<?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>20351</bug_id>
          
          <creation_ts>2008-08-11 17:20:51 -0700</creation_ts>
          <short_desc>&lt;canvas&gt; code needs fewer #ifdefs</short_desc>
          <delta_ts>2008-08-14 15:47:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>88251</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-11 17:20:51 -0700</bug_when>
    <thetext>&lt;canvas&gt; code needs fewer #ifdefs

I guess my first attempt will be to abstract out the Pattern stuff a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88254</commentid>
    <comment_count>1</comment_count>
      <attachid>22735</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-11 17:29:22 -0700</bug_when>
    <thetext>Created attachment 22735
First pass at refactoring Pattern

 WebCore/WebCore.xcodeproj/project.pbxproj          |   16 ++-
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  153 +------------------
 WebCore/html/CanvasPattern.h                       |   64 ++-------
 WebCore/html/CanvasRenderingContext2D.cpp          |  119 ++++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    2 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   45 ++++++
 WebCore/platform/graphics/Pattern.h                |   62 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 39 files changed, 484 insertions(+), 611 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88255</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-11 17:32:57 -0700</bug_when>
    <thetext>So there were several non-intentional consequences of this patch.

1.  I needed to make Image refcounted (for my own personal sanity, if nothing else).
2.  I now correctly (according to HTML5) return an exception when the image isn&apos;t fully loaded and one tries to create a pattern from it.
3.  I added Image::nullImage() (which is slightly ugly, since it causes Image.cpp to need BitmapImage.h)
4.  I added a constructor to Color() and fixed the &quot;set stroke/fill style&quot; paths in the 2d-context code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88258</commentid>
    <comment_count>3</comment_count>
      <attachid>22736</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-11 18:10:10 -0700</bug_when>
    <thetext>Created attachment 22736
First pass at refactoring Pattern

 WebCore/WebCore.xcodeproj/project.pbxproj          |   16 ++-
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  165 +-------------------
 WebCore/html/CanvasPattern.h                       |   58 +------
 WebCore/html/CanvasRenderingContext2D.cpp          |  115 ++++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    2 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   45 ++++++
 WebCore/platform/graphics/Pattern.h                |   62 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 39 files changed, 482 insertions(+), 615 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88330</commentid>
    <comment_count>4</comment_count>
      <attachid>22754</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 12:50:25 -0700</bug_when>
    <thetext>Created attachment 22754
Third pass, now fixing Cairo build issues.

 WebCore/WebCore.xcodeproj/project.pbxproj          |   19 ++-
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  165 +-------------------
 WebCore/html/CanvasPattern.h                       |   58 +------
 WebCore/html/CanvasRenderingContext2D.cpp          |  115 ++++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    2 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   45 ++++++
 WebCore/platform/graphics/Pattern.h                |   63 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 39 files changed, 483 insertions(+), 618 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88333</commentid>
    <comment_count>5</comment_count>
      <attachid>22755</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 13:53:30 -0700</bug_when>
    <thetext>Created attachment 22755
Fourth pass, fixing a bogus ASSERT, color float conversions, and more Cairo build issues.

 WebCore/WebCore.xcodeproj/project.pbxproj          |   19 ++-
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  165 +-------------------
 WebCore/html/CanvasPattern.h                       |   58 +------
 WebCore/html/CanvasRenderingContext2D.cpp          |  116 ++++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    5 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   46 ++++++
 WebCore/platform/graphics/Pattern.h                |   63 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 .../platform/graphics/cairo/ImageBufferCairo.cpp   |    8 +-
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 40 files changed, 490 insertions(+), 624 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88340</commentid>
    <comment_count>6</comment_count>
      <attachid>22756</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 15:11:17 -0700</bug_when>
    <thetext>Created attachment 22756
Fifth pass, try to fix the non-mac builds

 WebCore/GNUmakefile.am                             |    3 +
 WebCore/WebCore.pro                                |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |   28 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |   19 ++-
 WebCore/WebCoreSources.bkl                         |    1 +
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  156 +------------------
 WebCore/html/CanvasPattern.h                       |   58 +------
 WebCore/html/CanvasRenderingContext2D.cpp          |  116 ++++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    5 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   46 ++++++
 WebCore/platform/graphics/Pattern.h                |   66 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 .../platform/graphics/cairo/ImageBufferCairo.cpp   |    8 +-
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/gtk/ImageGtk.cpp         |    9 +-
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/platform/graphics/qt/PatternQt.cpp         |   41 +++++
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../graphics/cairo/SVGPaintServerPatternCairo.cpp  |    4 +-
 .../svg/graphics/cairo/SVGResourceMaskerCairo.cpp  |    8 +-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 48 files changed, 579 insertions(+), 625 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88352</commentid>
    <comment_count>7</comment_count>
      <attachid>22760</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 17:41:35 -0700</bug_when>
    <thetext>Created attachment 22760
Fifth pass, try to fix the non-mac builds

 WebCore/GNUmakefile.am                             |    3 +
 WebCore/WebCore.pro                                |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |   28 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |   19 ++-
 WebCore/WebCoreSources.bkl                         |    1 +
 WebCore/editing/DeleteButtonController.cpp         |   10 +-
 WebCore/html/CanvasPattern.cpp                     |  156 +------------------
 WebCore/html/CanvasPattern.h                       |   58 +------
 WebCore/html/CanvasRenderingContext2D.cpp          |  113 +++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/CanvasStyle.cpp                       |  165 ++++----------------
 WebCore/html/HTMLCanvasElement.cpp                 |   44 -----
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/CachedImage.cpp                     |   24 ++--
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 +-
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++-
 WebCore/platform/graphics/Color.cpp                |   10 ++
 WebCore/platform/graphics/Color.h                  |    5 +
 WebCore/platform/graphics/GeneratedImage.h         |    4 +
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 -
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 WebCore/platform/graphics/Image.cpp                |    7 +
 WebCore/platform/graphics/Image.h                  |   20 ++--
 WebCore/platform/graphics/ImageBuffer.h            |   39 +-----
 WebCore/platform/graphics/Pattern.cpp              |   46 ++++++
 WebCore/platform/graphics/Pattern.h                |   66 ++++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 .../platform/graphics/cairo/ImageBufferCairo.cpp   |    8 +-
 WebCore/platform/graphics/cairo/PatternCairo.cpp   |   46 ++++++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 +-
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 ++-
 WebCore/platform/graphics/cg/PatternCG.cpp         |   77 +++++++++
 WebCore/platform/graphics/gtk/ImageGtk.cpp         |    9 +-
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +-
 WebCore/platform/graphics/qt/PatternQt.cpp         |   41 +++++
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +--
 WebCore/svg/graphics/SVGImage.h                    |   11 ++-
 .../graphics/cairo/SVGPaintServerPatternCairo.cpp  |    4 +-
 .../svg/graphics/cairo/SVGResourceMaskerCairo.cpp  |    8 +-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 48 files changed, 575 insertions(+), 626 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88353</commentid>
    <comment_count>8</comment_count>
      <attachid>22761</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 17:41:37 -0700</bug_when>
    <thetext>Created attachment 22761
Split out HTML5 functional change into separate change

 .../canvas-pattern-from-incremental-image.html     |   19 +++++++++++++++++++
 .../http/tests/misc/resources/image-slow.pl        |   19 +++++++++++++++++++
 WebCore/html/CanvasRenderingContext2D.cpp          |    5 +++++
 3 files changed, 43 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88357</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 18:12:38 -0700</bug_when>
    <thetext>Ok.  Sam finally guilt-tripped me into it.  I&apos;ve split this big honken patch into 4 separate smaller commits.   None of them have ChangeLogs yet, but I&apos;ll add those when I land.  A test case was added for the one commit which needed one.  There is no way to test the loss of more-than-32-bit color support on the Mac which is caused by my Color refactor.  Hyatt and I agreed that it wasn&apos;t important to maintain support for float colors (and no other platform had support).   If we decide it&apos;s required in the future, we&apos;ll add a FloatColor class or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88358</commentid>
    <comment_count>10</comment_count>
      <attachid>22762</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 18:13:08 -0700</bug_when>
    <thetext>Created attachment 22762
Split out Color changes into separate commit

 WebCore/html/CanvasStyle.cpp        |  165 +++++++----------------------------
 WebCore/platform/graphics/Color.cpp |   10 ++
 WebCore/platform/graphics/Color.h   |    5 +
 3 files changed, 48 insertions(+), 132 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88359</commentid>
    <comment_count>11</comment_count>
      <attachid>22763</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 18:13:12 -0700</bug_when>
    <thetext>Created attachment 22763
Split out Image cleanup into separate commit

 WebCore/editing/DeleteButtonController.cpp         |   10 ++---
 WebCore/loader/CachedImage.cpp                     |   24 ++++++-------
 WebCore/loader/CachedImage.h                       |    2 +-
 WebCore/loader/icon/IconRecord.cpp                 |    6 ++--
 WebCore/loader/icon/IconRecord.h                   |    2 +-
 WebCore/platform/graphics/BitmapImage.h            |   17 ++++++---
 WebCore/platform/graphics/GeneratedImage.h         |    4 ++
 WebCore/platform/graphics/Gradient.cpp             |    2 +-
 WebCore/platform/graphics/Gradient.h               |    5 ---
 WebCore/platform/graphics/Image.cpp                |    7 ++++
 WebCore/platform/graphics/Image.h                  |   20 +++++-----
 WebCore/platform/graphics/ImageBuffer.h            |   39 ++------------------
 .../platform/graphics/cairo/ImageBufferCairo.cpp   |    8 +---
 WebCore/platform/graphics/cg/ImageBufferCG.cpp     |    8 ++---
 WebCore/platform/graphics/cg/PDFDocumentImage.h    |   11 +++++-
 WebCore/platform/graphics/gtk/ImageGtk.cpp         |    9 ++---
 WebCore/platform/graphics/mac/ImageMac.mm          |   12 +++----
 WebCore/rendering/RenderImage.cpp                  |    3 +-
 WebCore/rendering/RenderLayer.cpp                  |    4 +-
 WebCore/svg/graphics/SVGImage.cpp                  |   11 +-----
 WebCore/svg/graphics/SVGImage.h                    |   11 +++++-
 .../graphics/cairo/SVGPaintServerPatternCairo.cpp  |    4 ++-
 .../svg/graphics/cairo/SVGResourceMaskerCairo.cpp  |    8 ++++-
 .../svg/graphics/cg/SVGPaintServerPatternCg.cpp    |    2 +-
 WebCore/svg/graphics/cg/SVGResourceMaskerCg.mm     |    2 +-
 25 files changed, 106 insertions(+), 125 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88360</commentid>
    <comment_count>12</comment_count>
      <attachid>22764</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 18:13:15 -0700</bug_when>
    <thetext>Created attachment 22764
The final changes needed for Pattern cleanup

 WebCore/GNUmakefile.am                             |    3 +
 WebCore/WebCore.pro                                |    2 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |   28 ++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |   19 ++-
 WebCore/WebCoreSources.bkl                         |    1 +
 WebCore/html/CanvasPattern.cpp                     |  156 +-------------------
 WebCore/html/CanvasPattern.h                       |   58 +-------
 WebCore/html/CanvasRenderingContext2D.cpp          |  113 +++-----------
 WebCore/html/CanvasRenderingContext2D.h            |    4 +-
 WebCore/html/HTMLCanvasElement.cpp                 |   44 ------
 WebCore/html/HTMLCanvasElement.h                   |   24 +---
 WebCore/loader/FrameLoader.cpp                     |    6 +-
 WebCore/platform/graphics/GraphicsContext.h        |    6 +-
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   33 ++++-
 15 files changed, 145 insertions(+), 369 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88361</commentid>
    <comment_count>13</comment_count>
      <attachid>22765</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-12 18:13:17 -0700</bug_when>
    <thetext>Created attachment 22765
Split out HTML5 functional change into separate change

 .../canvas-pattern-from-incremental-image.html     |   18 ++++++++++++++++++
 .../http/tests/misc/resources/image-slow.pl        |   19 +++++++++++++++++++
 WebCore/html/CanvasRenderingContext2D.cpp          |    5 +++++
 3 files changed, 42 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88436</commentid>
    <comment_count>14</comment_count>
      <attachid>22765</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-08-13 14:42:56 -0700</bug_when>
    <thetext>Comment on attachment 22765
Split out HTML5 functional change into separate change

Needs expected results and a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88438</commentid>
    <comment_count>15</comment_count>
      <attachid>22764</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-08-13 15:06:50 -0700</bug_when>
    <thetext>Comment on attachment 22764
The final changes needed for Pattern cleanup

Nice work Eric! Some comments:

No ChangeLog?
FrameLoader.cpp - change looks unrelated (style cleanup)
PatternQt.cpp missing (would break Qt build)

Other than that, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88439</commentid>
    <comment_count>16</comment_count>
      <attachid>22762</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-08-13 15:11:11 -0700</bug_when>
    <thetext>Comment on attachment 22762
Split out Color changes into separate commit

In the color code, we usually use nextafterf(256.0f, 0.0f); to conver from float to byte.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88440</commentid>
    <comment_count>17</comment_count>
      <attachid>22763</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-08-13 15:11:56 -0700</bug_when>
    <thetext>Comment on attachment 22763
Split out Image cleanup into separate commit

Looks nice. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88499</commentid>
    <comment_count>18</comment_count>
      <attachid>22799</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-14 15:44:34 -0700</bug_when>
    <thetext>Created attachment 22799
Move us one step closer to cross-platform svg/graphics code

 WebCore/WebCore.xcodeproj/project.pbxproj         |    3 --
 WebCore/html/CanvasStyle.cpp                      |    7 -----
 WebCore/platform/graphics/Color.cpp               |    7 +++++
 WebCore/platform/graphics/Color.h                 |    2 +-
 WebCore/svg/graphics/cg/CgSupport.cpp             |    7 +++--
 WebCore/svg/graphics/cg/SVGPaintServerSolidCg.cpp |   27 ++++++++++-----------
 6 files changed, 25 insertions(+), 28 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88501</commentid>
    <comment_count>19</comment_count>
      <attachid>22799</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-14 15:47:57 -0700</bug_when>
    <thetext>Comment on attachment 22799
Move us one step closer to cross-platform svg/graphics code

wrong bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22735</attachid>
            <date>2008-08-11 17:29:22 -0700</date>
            <delta_ts>2008-08-11 18:10:19 -0700</delta_ts>
            <desc>First pass at refactoring Pattern</desc>
            <filename>First-pass-at-refactoring-Pattern.patch</filename>
            <type>text/plain</type>
            <size>77043</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NjMzNzc1NzU0OGMwZTJjMmU0Mzg4ZmUyOGVjYjJjYThhYTliNTE5YgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlOWExZjQxLi40MjZmNzUyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5OCw2ICsxODk4LDcg
QEAKIAkJQTgwOUYxNDgwQjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0
NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKIAkJ
QTgwOUYxQUEwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTgwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQlBODA5
RjFBQjBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE5MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9OworCQlBODBB
MzhGRTBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQ
YXR0ZXJuQ0cuY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFs
dWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlB
ODBFNkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ByaW1pdGl2ZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI2OTksNiArMjcwMCw4IEBACiAJCUE4RjQ2QjgxMENCMjBBOUQwMDNBOTY3
MCAvKiBET01TVkdTdHJpbmdMaXN0LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUQ3OUFEMjBBQ0ExN0VCMDBGMDJGQzUgLyog
RE9NU1ZHU3RyaW5nTGlzdC5oICovOyB9OwogCQlBOEY0RkI5NDBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAq
LzsgfTsKIAkJQThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUw
QzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgfTsKKwkJQThGQTZFNUUwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovOyB9OwogCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQy
RTkgLyogTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLzsgfTsK
IAkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMjBENzQ1RTA1MDA2NDQyRTkg
LyogTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovOyB9OwpA
QCAtMzE2MCw3ICszMTYzLDYgQEAKIAkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9
OwotCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmggKi87IH07CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cu
Y3BwICovOyB9OwogCQlCMjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC02MzkwLDYgKzYzOTIs
NyBAQAogCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE4MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5MjksNiArNjkzMiw4IEBACiAJCUE4RUE4MDA2
MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0
RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOUM2RTRFMTBENzQ1
RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1pbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlD
NkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNaW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NTM5LDcgKzc1NDQsNiBAQAogCQlCMjc1MzUyQjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemVDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1
MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIwOTUsNyArMTIwOTksNiBAQAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8q
IEdyYWRpZW50Q0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFw
aGljc0NvbnRleHRDRy5jcHAgKi8sCi0JCQkJQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4RDcw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlQ0cuY3BwICovLApAQCAtMTIxMDUsNiArMTIxMDgsNyBAQAogCQkJCUIyNzUz
NTM1MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCUE4MEEzOEZEMEU1MEND
ODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjIxMyw2ICsxMjIxNyw4IEBACiAJCQkJQjIz
NTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCUE4MjRC
NDY0MEUyRUYyRUEwMDgxQTdCNyAvKiBUZXh0UnVuLmggKi8sCiAJCQkJRTRBRkNGQTQwREFGMjlB
MzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNG
NDkgLyogUGF0dGVybi5oICovLAorCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQyNzMsNyArMTQyNzksNiBAQAogCQkJCUIyQzNEQTcwMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBE
MDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QUIwQTE1Njk3
ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcx
RDQ1RDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMTUzODksNiArMTUzOTQsNyBAQAogCQkJCTMxQzBGRjRCMEU0Q0VGREQwMDdENkZFNSAv
KiBET01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RkE2RTVEMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MTcyLDYgKzE3MTc4
LDggQEAKIAkJCQkzMUMwRkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEEwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEQw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAK
aW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25D
b250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0b25Db250
cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25I
ZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFnZS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJbWFnZT4g
YnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIp
OworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoYnV0dG9u
SW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGJ1
dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1dHRvbi5n
ZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRl
eCA3NjIwNzBjLi42MmNhZWMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVy
bi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwxMSArMjYs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKIAot
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02MywxNTIgKzYwLDEwIEBAIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VS
ZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmCiAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogfQogCi0jaWYgUExBVEZPUk0oQ0cpCi0KLUNhbnZhc1BhdHRl
cm46OkNhbnZhc1BhdHRlcm4oQ0dJbWFnZVJlZiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX3BsYXRmb3JtSW1hZ2UoaW1hZ2UpCi0g
ICAgLCBtX2NhY2hlZEltYWdlKDApCi0gICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKLSAgICAsIG1f
cmVwZWF0WShyZXBlYXRZKQotICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikKLXsKLX0K
LQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0KLUNhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4o
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9v
bCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGxhdGZvcm1JbWFnZShjYWlyb19zdXJmYWNlX3JlZmVy
ZW5jZShzdXJmYWNlKSkKLSAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKLSAgICAsIG1fcmVwZWF0WChy
ZXBlYXRYKQotICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNsZWFuKG9y
aWdpbkNsZWFuKQotewotfQotCi0jZW5kaWYKLQotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVy
bihDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBi
b29sIG9yaWdpbkNsZWFuKQotICAgIDogbV9jYWNoZWRJbWFnZShjYWNoZWRJbWFnZSkKLSNpZiBQ
TEFURk9STShDQUlSTykKLSAgICAsIG1fcGxhdGZvcm1JbWFnZSgwKQotI2VuZGlmCi0gICAgLCBt
X3JlcGVhdFgocmVwZWF0WCkKLSAgICAsIG1fcmVwZWF0WShyZXBlYXRZKQotICAgICwgbV9vcmln
aW5DbGVhbihvcmlnaW5DbGVhbikKLXsKLSAgICBpZiAoY2FjaGVkSW1hZ2UpCi0gICAgICAgIGNh
Y2hlZEltYWdlLT5hZGRDbGllbnQodGhpcyk7Ci19Ci0KLUNhbnZhc1BhdHRlcm46On5DYW52YXNQ
YXR0ZXJuKCkKK0NhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBzZWN1cml0eU9yaWdpbkNsZWFuKQorICAgIDog
bV9wYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKQorICAgICwgbV9zZWN1cml0eU9yaWdp
bkNsZWFuKHNlY3VyaXR5T3JpZ2luQ2xlYW4pCiB7Ci0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
aWYgKG1fcGxhdGZvcm1JbWFnZSkKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fcGxh
dGZvcm1JbWFnZSk7Ci0jZW5kaWYKLSAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgbV9j
YWNoZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogfQogCi0jaWYgUExBVEZPUk0oQ0cpCi0K
LXN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29u
dGV4dCkKLXsKLSAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYW52
YXNQYXR0ZXJuKj4oaW5mbyktPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICBpZiAocGxhdGZvcm1JbWFn
ZSkgewotICAgICAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3Vu
ZFRvRGV2aWNlUGl4ZWxzKAotICAgICAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRX
aWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOwot
ICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2Ug
PSBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbyktPmNhY2hlZEltYWdlKCk7Ci0gICAg
aWYgKCFjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNh
Y2hlZEltYWdlLT5pbWFnZSgpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEZsb2F0UmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZp
Y2VQaXhlbHMoaW1hZ2UtPnJlY3QoKSk7Ci0KLSAgICBpZiAoaW1hZ2UtPmdldENHSW1hZ2VSZWYo
KSkgewotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgaW1hZ2UtPmdl
dENHSW1hZ2VSZWYoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhp
cyBjb2RlIHRvIHVzZSB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgCi0gICAgICAgIC8vIGRyYXdp
bmcgQVBJIGluIGFsbCBjYXNlcy4gVGhlbiwgdGhpcyBkaWREcmF3IGNhbGwgd2lsbCBoYXBwZW4g
Ci0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFuZCB3ZSBjYW4gcmVtb3ZlIGl0LgotICAgICAg
ICBjYWNoZWRJbWFnZS0+ZGlkRHJhdyhpbWFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQoY29udGV4dCkuZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKLX0K
LQotc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQotewotICAg
IHN0YXRpY19jYXN0PENhbnZhc1BhdHRlcm4qPihpbmZvKS0+ZGVyZWYoKTsKLX0KLQotQ0dQYXR0
ZXJuUmVmIENhbnZhc1BhdHRlcm46OmNyZWF0ZVBhdHRlcm4oY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR1JlY3QgcmVjdDsKLSAgICByZWN0Lm9yaWdpbi54ID0g
MDsKLSAgICByZWN0Lm9yaWdpbi55ID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybUltYWdlKSB7Ci0g
ICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX3BsYXRmb3JtSW1hZ2Uu
Z2V0KCkpOwotICAgICAgICByZWN0LnNpemUuaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX3Bs
YXRmb3JtSW1hZ2UuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJ
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2Nh
Y2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IGltYWdlLT53aWR0aCgpOwotICAgICAg
ICByZWN0LnNpemUuaGVpZ2h0ID0gaW1hZ2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIENHQWZm
aW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPQotICAgICAgICBDR0FmZmluZVRyYW5zZm9y
bVRyYW5zbGF0ZShDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zZm9ybSwgMSwgLTEpLCAwLCAt
cmVjdC5zaXplLmhlaWdodCk7Ci0gICAgCi0gICAgLy8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBi
ZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJh
Y3Rpb25zIG9mIEZMVF9NQVggYWxzbwotICAgIC8vIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJl
bmRlcmVkLgotICAgIC8vIElOVF9NQVggaXMgYWxtb3N0IGNvcnJlY3QsIGJ1dCB0aGVyZSBzZWVt
cyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBvY2N1cmluZyBtYWtpbmcgdGhlIGZpbGwKLSAg
ICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29ycmVjdGx5LiAKLSAgICAvLyBTbywganVzdCBw
aWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0IHdvcmtzLiAKLSAgICBmbG9hdCB4U3RlcCA9
IG1fcmVwZWF0WCA/IHJlY3Quc2l6ZS53aWR0aCA6ICgxMDAwMDAwMDAuMGYpOwotICAgIGZsb2F0
IHlTdGVwID0gbV9yZXBlYXRZID8gcmVjdC5zaXplLmhlaWdodCA6ICgxMDAwMDAwMDAuMGYpOwot
Ci0gICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBh
dHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwotICAgIHJlZigpOwotICAg
IHJldHVybiBDR1BhdHRlcm5DcmVhdGUodGhpcywgcmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0
ZXAsIHlTdGVwLAotICAgICAgICBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVF
LCAmcGF0dGVybkNhbGxiYWNrcyk7Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWly
b19wYXR0ZXJuX3QqIENhbnZhc1BhdHRlcm46OmNyZWF0ZVBhdHRlcm4oY29uc3QgY2Fpcm9fbWF0
cml4X3QmIG0pCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gMDsKLSAgICBpZiAo
bV9wbGF0Zm9ybUltYWdlKSB7Ci0gICAgICAgIHN1cmZhY2UgPSBtX3BsYXRmb3JtSW1hZ2U7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NhY2hlZEltYWdlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCk7Ci0g
ICAgICAgIGlmICghaW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgc3VyZmFj
ZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIH0KLQotICAgIGlm
ICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBh
dHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKLSAgICBj
YWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwgJm0pOwotICAgIGlmIChtX3JlcGVhdFgg
fHwgbV9yZXBlYXRZKQotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwg
Q0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgcmV0dXJuIHBhdHRlcm47Ci19Ci0KLSNlbmRpZgot
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oIGIvV2ViQ29yZS9o
dG1sL0NhbnZhc1BhdHRlcm4uaAppbmRleCA2ODkxZGE2Li5iYTJlNTkzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0
ZXJuLmgKQEAgLTI2LDc3ICsyNiwzNSBAQAogI2lmbmRlZiBDYW52YXNQYXR0ZXJuX2gKICNkZWZp
bmUgQ2FudmFzUGF0dGVybl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgor
I2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENhY2hlZEltYWdlOworICAg
IGNsYXNzIEltYWdlOwogICAgIGNsYXNzIFN0cmluZzsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CiAKLSAgICBjbGFzcyBDYW52YXNQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8
Q2FudmFzUGF0dGVybj4sIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworICAgIGNsYXNz
IENhbnZhc1BhdHRlcm4gOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNQYXR0ZXJuPiB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0
cmluZyYsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAot
I2lmIFBMQVRGT1JNKENHKQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBjcmVhdGUoQ0dJbWFnZVJlZiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJv
b2wgb3JpZ2luQ2xlYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2FudmFzUGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsK
LSAgICAgICAgfQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oc3VyZmFjZSwgcmVwZWF0
WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShDYWNoZWRJbWFnZSogaW1hZ2Us
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBzZWN1cml0eU9yaWdpbkNsZWFuKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2Us
IHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFksIHNlY3VyaXR5
T3JpZ2luQ2xlYW4pKTsKICAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5DYW52YXNQYXR0ZXJu
KCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKCkgeyByZXR1cm4g
bV9wYXR0ZXJuOyB9CiAKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgQ0dJbWFnZVJlZiBwbGF0
Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdlLmdldCgpOyB9Ci0jZWxp
ZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBwbGF0Zm9ybUltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdlOyB9Ci0jZW5kaWYKLSAgICAgICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQot
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHUGF0dGVyblJlZiBjcmVhdGVQYXR0ZXJuKGNv
bnN0IENHQWZmaW5lVHJhbnNmb3JtJik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAg
Y2Fpcm9fcGF0dGVybl90KiBjcmVhdGVQYXR0ZXJuKGNvbnN0IGNhaXJvX21hdHJpeF90Jik7Ci0j
ZW5kaWYKLQotICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmln
aW5DbGVhbjsgfQorICAgICAgICBib29sIHNlY3VyaXR5T3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJl
dHVybiBtX3NlY3VyaXR5T3JpZ2luQ2xlYW47IH0KIAogICAgIHByaXZhdGU6Ci0jaWYgUExBVEZP
Uk0oQ0cpCi0gICAgICAgIENhbnZhc1BhdHRlcm4oQ0dJbWFnZVJlZiwgYm9vbCByZXBlYXRYLCBi
b29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0g
ICAgICAgIENhbnZhc1BhdHRlcm4oY2Fpcm9fc3VyZmFjZV90KiwgYm9vbCByZXBlYXRYLCBib29s
IHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwotI2VuZGlmCi0gICAgICAgIENhbnZhc1BhdHRl
cm4oQ2FjaGVkSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbik7CisgICAgICAgIENhbnZhc1BhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wg
cmVwZWF0WSwgYm9vbCBzZWN1cml0eU9yaWdpbkNsZWFuKTsKIAotI2lmIFBMQVRGT1JNKENHKQot
ICAgICAgICBjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9wbGF0Zm9ybUltYWdlOwotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogY29uc3QgbV9wbGF0
Zm9ybUltYWdlOwotI2VuZGlmCi0gICAgICAgIENhY2hlZEltYWdlKiBjb25zdCBtX2NhY2hlZElt
YWdlOwotICAgICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgY29uc3QgYm9vbCBt
X3JlcGVhdFk7Ci0gICAgICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKKyAgICAgICAgUGF0dGVybiBt
X3BhdHRlcm47CisgICAgICAgIGJvb2wgbV9zZWN1cml0eU9yaWdpbkNsZWFuOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKaW5kZXggZTdiNmIwZC4uOTNmZjQwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5
bGUpCiAKICAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgaWYgKENh
bnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+cGF0dGVybigpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCisgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPnNl
Y3VyaXR5T3JpZ2luQ2xlYW4oKSkKICAgICAgICAgICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2lu
VGFpbnRlZCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHls
ZT4gc3R5bGUpCiAgCiAgICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAg
IGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3R5bGUtPnBhdHRlcm4oKSkgewotICAgICAg
ICAgICAgaWYgKCFwYXR0ZXJuLT5vcmlnaW5DbGVhbigpKQorICAgICAgICAgICAgaWYgKCFwYXR0
ZXJuLT5zZWN1cml0eU9yaWdpbkNsZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9jYW52YXMtPnNl
dE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTExMjEsMTQgKzExMjEsMTkg
QEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZWF0ZVBhdHRlcm4oSFRNTEltYWdlRWxlbWUKICAgICBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0
aXRpb25UeXBlKHJlcGV0aXRpb25UeXBlLCByZXBlYXRYLCByZXBlYXRZLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBib29sIG9yaWdpbkNsZWFuID0gdHJ1
ZTsKLSAgICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdl
KCkpIHsKLSAgICAgICAgS1VSTCB1cmwoY2FjaGVkSW1hZ2UtPnVybCgpKTsKLSAgICAgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7
Ci0gICAgICAgIG9yaWdpbkNsZWFuID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2VzcyhvcmlnaW4uZ2V0KCkpOworCisgICAgaWYgKCFpbWFnZS0+Y29tcGxl
dGUoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShpbWFnZS0+Y2FjaGVk
SW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pOworCisgICAgQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisgICAgQVNTRVJUKGNhY2hl
ZEltYWdlKTsKKworICAgIEtVUkwgdXJsKGNhY2hlZEltYWdlLT51cmwoKSk7CisgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7Cisg
ICAgYm9vbCBvcmlnaW5DbGVhbiA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3Mob3JpZ2luLmdldCgpKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6
Y3JlYXRlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVh
bik7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCkBAIC0xMTM5LDIz
ICsxMTQ0LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW0KICAgICBDYW52YXNQYXR0ZXJuOjpw
YXJzZVJlcGV0aXRpb25UeXBlKHJlcGV0aXRpb25UeXBlLCByZXBlYXRYLCByZXBlYXRZLCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0
aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIGNhbnZh
cy0+Y3JlYXRlUGxhdGZvcm1JbWFnZSgpKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGltYWdlLmdldCgpLCByZXBl
YXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2FudmFzLT5jcmVhdGVQbGF0Zm9y
bUltYWdlKCk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQ
dHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IENhbnZhc1BhdHRlcm46OmNyZWF0ZShzdXJmYWNl
LCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwotICAgIGNhaXJvX3N1
cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1cm4gcGF0dGVybi5yZWxlYXNlKCk7Ci0j
ZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKKyAgICBy
ZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+YnVmZmVyKCktPmltYWdlKCksIHJl
cGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHIpCkBAIC0xMTc4
LDQ3ICsxMTY3LDIyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6
IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVk
PwogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0
ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0NvbnRleHRH
ZXRDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChzdGF0ZSgpLm1fYXBwbGllZFN0
cm9rZVBhdHRlcm4KLSAgICAgICAgICAgICYmIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5z
Zm9ybShtLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKSkKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gY3RtID0gYy0+Z2V0Q1RNKCk7CisgICAgaWYgKHN0YXRlKCkubV9hcHBsaWVk
U3Ryb2tlUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5z
Zm9ybSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAKICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0
ZXJuID0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCk7CiAgICAgaWYgKCFwYXR0ZXJu
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0g
cGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIHBhdHRlcm5TcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JTcGFj
ZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNwYWNlKTsKLSAgICBDR0NvbG9yU3BhY2VS
ZWxlYXNlKHBhdHRlcm5TcGFjZSk7Ci0KLSAgICBjb25zdCBDR0Zsb2F0IHBhdHRlcm5BbHBoYSA9
IDE7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjLT5wbGF0Zm9ybUNvbnRleHQoKSwg
cGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKLSAgICBDR1BhdHRlcm5SZWxlYXNlKHBs
YXRmb3JtUGF0dGVybik7Ci0KLSAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNm
b3JtID0gbTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxp
ZiBQTEFURk9STShDQUlSTykKLSAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJv
X21hdHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwotCi0gICAgY2Fpcm9f
cGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKG0pOwot
ICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47CisgICAgYy0+YXBwbHlT
dHJva2VQYXR0ZXJuKHBhdHRlcm4tPnBhdHRlcm4oKSk7CiAKLSAgICBjYWlyb19zZXRfc291cmNl
KGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwbGF0Zm9y
bVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQorICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZVBh
dHRlcm5UcmFuc2Zvcm0gPSBjdG07CiAjZW5kaWYKICAgICBzdGF0ZSgpLm1fYXBwbGllZFN0cm9r
ZVBhdHRlcm4gPSB0cnVlOwogfQpAQCAtMTIyOSw0NyArMTE5MywyMiBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgY2hlY2sgYmUgbW92ZWQgaW50byBH
cmFwaGljc0NvbnRleHQ/IG9yIHJlbW92ZWQ/CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gQ2hl
Y2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxyZWFkeSBzZXQuCi0gICAgQ0dBZmZp
bmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkRmlsbFBhdHRlcm4KLSAgICAgICAgICAgICYmIENHQWZm
aW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtLCBzdGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVy
blRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRl
cm4gPSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCk7Ci0gICAgaWYgKCFwYXR0ZXJuKQor
ICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKKyAgICBpZiAoc3RhdGUoKS5t
X2FwcGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5U
cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgogCi0gICAgQ0dQYXR0ZXJuUmVmIHBs
YXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0
Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0
ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwotICAgIENHQ29udGV4dFNl
dEZpbGxDb2xvclNwYWNlKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOwotICAg
IENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKLQotICAgIGNvbnN0IENHRmxvYXQg
cGF0dGVybkFscGhhID0gMTsKLSAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjLT5wbGF0Zm9y
bUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKLSAgICBDR1BhdHRl
cm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Ci0KLSAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlUGF0
dGVyblRyYW5zZm9ybSA9IG07Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9
IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgY2Fpcm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CisgICAg
Yy0+YXBwbHlGaWxsUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwogCi0gICAgY2Fpcm9fcGF0
dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKG0pOwotICAg
IGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb19zZXRf
c291cmNlKGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShw
bGF0Zm9ybVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQorICAgIHN0YXRlKCkubV9maWxsU3R5
bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3RtOwogI2VuZGlmCiAgICAgc3RhdGUoKS5tX2FwcGxpZWRG
aWxsUGF0dGVybiA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKaW5kZXggNDA3NzM0NC4uMTY4YjczMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaApAQCAtMTk1LDggKzE5NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAgICAgICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gbV90cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0FmZmlu
ZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybTsKLSAgICAgICAgICAgIENH
QWZmaW5lVHJhbnNmb3JtIG1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybTsKKyAgICAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybTsKKyAgICAgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm07CiAjZW5kaWYK
ICAgICAgICAgfTsKICAgICAgICAgUGF0aCBtX3BhdGg7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcAppbmRleCBi
ZTUwMTNhLi4wZTJlZDhlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4K
KyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVk
ZSA8UUJydXNoPgpAQCAtNjAsMTIgKzY0LDE2IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShm
bG9hdCBncmF5TGV2ZWwpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTdHJp
bmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShDb2xvclN0cmluZ1dpdGhBbHBo
YSksIG1fY29sb3IoY29sb3IpLCBtX2FscGhhKGFscGhhKQorICAgIDogbV90eXBlKENvbG9yU3Ry
aW5nV2l0aEFscGhhKQorICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYWxwaGEoYWxwaGEp
CiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKQotICAgIDogbV90eXBlKEdyYXlMZXZlbCksIG1fYWxwaGEoYWxwaGEpLCBtX2dyYXlM
ZXZlbChncmF5TGV2ZWwpCisgICAgOiBtX3R5cGUoR3JheUxldmVsKQorICAgICwgbV9hbHBoYShh
bHBoYSkKKyAgICAsIG1fZ3JheUxldmVsKGdyYXlMZXZlbCkKIHsKIH0KIApAQCAtODAsMTA0ICs4
OCw0NyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQg
eSwgZmxvYXQgaywgZmxvYXQgYSkKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKFBhc3NS
ZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50KQotICAgIDogbV90eXBlKGdyYWRpZW50ID8g
R3JhZGllbnQgOiBDb2xvclN0cmluZyksIG1fZ3JhZGllbnQoZ3JhZGllbnQpCisgICAgOiBtX3R5
cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENvbG9yU3RyaW5nKQorICAgICwgbV9ncmFkaWVudChn
cmFkaWVudCkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2Fu
dmFzUGF0dGVybj4gcGF0dGVybikKLSAgICA6IG1fdHlwZShwYXR0ZXJuID8gSW1hZ2VQYXR0ZXJu
IDogQ29sb3JTdHJpbmcpLCBtX3BhdHRlcm4ocGF0dGVybikKKyAgICA6IG1fdHlwZShwYXR0ZXJu
ID8gSW1hZ2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpCisgICAgLCBtX3BhdHRlcm4ocGF0dGVybikK
IHsKIH0KIAorc3RhdGljIGlubGluZSBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JB
MzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCit7CisgICAgUkdCQTMyIHJnYk9ubHkgPSBj
b2xvciAmIDB4MDBGRkZGRkY7CisgICAgUkdCQTMyIHJnYmEgPSByZ2JPbmx5IHwgc3RkOjptYXgo
c3RhdGljX2Nhc3Q8aW50PihvdmVycmlkZUFscGhhICogMjU1KSwgMCkgPDwgMjQ7CisgICAgcmV0
dXJuIHJnYmE7Cit9CisKIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50
ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotI2VuZGlmCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewogICAgICAg
ICAgICAgUkdCQTMyIGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawog
ICAgICAgICAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAg
ICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAg
KChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikg
LyAyNTUuMGYpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRUGVuIGN1cnJlbnRQ
ZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoKFFDb2xvcihR
UmdiKGNvbG9yKSkpKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihjdXJyZW50UGVuKTsKLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLy8gRklYTUU6IGZpbGwgYW5kIHN0cm9rZSBj
b2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5Ci0gICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY3IsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0jZW5kaWYKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAg
ICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAg
ICAgICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAg
ICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgo
Y29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAw
eEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JN
KFFUKQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAg
ICBRQ29sb3IgY2xyID0gUUNvbG9yKFFSZ2IoY29sb3IpKTsKLSAgICAgICAgICAgIGNsci5zZXRB
bHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0g
ICAgICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxkIGJlIGRl
YWx0IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNy
LAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAg
ICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAg
ICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4g
MjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBtX2FscGhhKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdyYXlMZXZlbDogewotICAg
ICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250
ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2dyYXlM
ZXZlbCwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFDb2xvciBj
bHI7Ci0gICAgICAgICAgICBRUGVuIGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAg
IGNsci5zZXRSZ2JGKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxw
aGEpOwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAg
cC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9n
cmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2Fs
cGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJHQkE6
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBl
bmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAg
IENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBt
X3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAgICBRQ29sb3Ig
Y2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9h
bHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0gICAgICAgICAg
ICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxkIGJlIGRlYWx0IHdpdGgg
c2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBtX3JlZCwg
bV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDTVlLQTogewpAQCAt
MjA4LDc1ICsxNTksMjUgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50
ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZW5kaWYKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7Ci0gICAgICAgICAgICBSR0JBMzIg
Y29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCi0gICAgICAgICAgICBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENv
bG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBm
LAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1
c2goKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiKFFS
Z2IoY29sb3IpKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwotICAg
ICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICAgICAg
UkdCQTMyIHJnYmEgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCisgICAgICAg
ICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgbV9jb2xvcik7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CiAgICAgICAgICAgICBSR0JB
MzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAgICAg
ICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmls
bENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29s
b3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4
KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1
LjBmLAotICAgICAgICAgICAgICAgIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
ICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAgICAgICAgIFFD
b2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiKFFSZ2IoY29sb3IpKTsKLSAgICAgICAg
ICAgIGNsci5zZXRBbHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0
Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5k
aWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVycmlkZUFs
cGhhKGNvbG9yLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIEdyYXlMZXZlbDogewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRG
T1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAg
ICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiRihtX2dyYXlMZXZlbCwg
bV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRC
cnVzaC5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNo
KTsKLSNlbmRpZgorICAgICAgICBjYXNlIEdyYXlMZXZlbDoKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVs
LCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFJHQkE6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0t
aW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgbV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkK
LSAgICAgICAgICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAg
ICAgUUNvbG9yIGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fcmVkLCBtX2dyZWVuLCBt
X2JsdWUsIG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9yKGNscik7
Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisgICAgICAg
IGNhc2UgUkdCQToKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcihtX3Jl
ZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQogICAgICAgICBjYXNlIENNWUtBOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhp
cyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCiAjaWYg
UExBVEZPUk0oQ0cpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCA5MDdjY2NjLi4w
ZDU0NTE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTI3NSw0OCArMjc1LDQg
QEAgSW1hZ2VCdWZmZXIqIEhUTUxDYW52YXNFbGVtZW50OjpidWZmZXIoKSBjb25zdAogICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogCi0jaWYgUExBVEZPUk0oQ0cpCi0KLUNHSW1h
Z2VSZWYgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAotewot
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0UmVmKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHRSZWYpOwotCi0g
ICAgcmV0dXJuIENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHRSZWYpOwotfQotCi0j
ZWxpZiBQTEFURk9STShRVCkKLQotUVBpeG1hcCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlUGxh
dGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyKQotICAgICAgICBy
ZXR1cm4gUVBpeG1hcCgpOwotICAgIHJldHVybiAqbV9pbWFnZUJ1ZmZlci0+cGl4bWFwKCk7Ci19
Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWlyb19zdXJmYWNlX3QqIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1hZ2VC
dWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gTm90ZSB0aGF0IHVubGlrZSBDRywg
b3VyIHJldHVybmVkIGltYWdlIGlzIG5vdCBhIGNvcHkgb3IKLSAgICAvLyBjb3B5LW9uLXdyaXRl
LCBidXQgdGhlIG9yaWdpbmFsLiBUaGlzIGlzIGZpbmUsIHNpbmNlIGl0IGlzIG9ubHkKLSAgICAv
LyBldmVyIHVzZWQgYXMgYSBzb3VyY2UuCi0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1faW1h
Z2VCdWZmZXItPnN1cmZhY2UoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9pbWFn
ZUJ1ZmZlci0+c3VyZmFjZSgpKTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci0+c3VyZmFjZSgp
OwotfQotCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBhMGI3Y2M1
Li5hMTE4MzY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMzAsMTkgKzMwLDYgQEAK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAotI2lmIFBM
QVRGT1JNKENHKQotLy8gRklYTUU6IENHLXNwZWNpZmljIHBhcnRzIG5lZWQgdG8gbW92ZSB0byB0
aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRl
eHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwotI2VsaWYgUExBVEZP
Uk0oUVQpCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQaXhtYXA7Ci1jbGFzcyBRUGFpbnRl
cjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwpAQCAtMTA1LDE1ICs5
Miw4IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBj
b25zdDsKIAotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsgCi0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgQ0dJbWFnZVJlZiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7Ci0jZWxpZiBQ
TEFURk9STShRVCkKLSAgICBRUGl4bWFwIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdDsKLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlUGxhdGZvcm1J
bWFnZSgpIGNvbnN0OwotI2VuZGlmCi0gICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNv
bnN0OworCiAgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVj
dCYpIGNvbnN0OwogICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFNpemUmKSBjb25zdDsKICAgICBJbnRQb2ludCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZElt
YWdlLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAppbmRleCAzNGEwNjViLi4y
YzdkNGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00OCwyMiArNDgsMjEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2lt
YWdlKDApCiB7Ci0gICAgbV9pbWFnZSA9IDA7CiAgICAgbV9zdGF0dXMgPSBVbmtub3duOwogfQog
CiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgIDogQ2FjaGVkUmVz
b3VyY2UoU3RyaW5nKCksIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2ltYWdlKGltYWdlKQogewot
ICAgIG1faW1hZ2UgPSBpbWFnZTsKICAgICBtX3N0YXR1cyA9IENhY2hlZDsKICAgICBtX2xvYWRp
bmcgPSBmYWxzZTsKIH0KIAogQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCiB7Ci0gICAgZGVs
ZXRlIG1faW1hZ2U7CiB9CiAgICAgCiB2b2lkIENhY2hlZEltYWdlOjpsb2FkKERvY0xvYWRlciog
ZG9jTG9hZGVyKQpAQCAtOTMsMTYgKzkyLDE2IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFsbFJlZmVy
ZW5jZXNSZW1vdmVkKCkKIAogc3RhdGljIEltYWdlKiBicm9rZW5JbWFnZSgpCiB7Ci0gICAgc3Rh
dGljIEltYWdlKiBicm9rZW5JbWFnZTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBicm9rZW5J
bWFnZTsKICAgICBpZiAoIWJyb2tlbkltYWdlKQogICAgICAgICBicm9rZW5JbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlIik7Ci0gICAgcmV0dXJuIGJyb2tl
bkltYWdlOworICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKIH0KIAogc3RhdGljIEltYWdl
KiBudWxsSW1hZ2UoKQogewotICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBudWxsSW1hZ2U7Ci0gICAg
cmV0dXJuICZudWxsSW1hZ2U7CisgICAgc3RhdGljIFJlZlB0cjxCaXRtYXBJbWFnZT4gbnVsbElt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIHJldHVybiBudWxsSW1hZ2UuZ2V0KCk7
CiB9CiAKIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdApAQCAtMTExLDcgKzExMCw3
IEBAIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdAogICAgICAgICByZXR1cm4gYnJv
a2VuSW1hZ2UoKTsKIAogICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZTsK
KyAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiAKICAgICByZXR1cm4gbnVsbEltYWdlKCk7
CiB9CkBAIC0xOTUsMTQgKzE5NCwxMyBAQCBJbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3Qo
ZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHZvaWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9ic2VydmVy
cygpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAg
IHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQorICAgIHdoaWxlIChD
YWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQogICAgICAgICBjLT5pbWFnZUNoYW5n
ZWQodGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKIHsKICAgICBkZXN0cm95
RGVjb2RlZERhdGEoKTsKLSAgICBkZWxldGUgbV9pbWFnZTsKICAgICBtX2ltYWdlID0gMDsKICAg
ICBzZXRFbmNvZGVkU2l6ZSgwKTsKIH0KQEAgLTIxNCwxNyArMjEyLDE3IEBAIGlubGluZSB2b2lk
IENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBQTEFURk9S
TShDRykKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYi
KSB7Ci0gICAgICAgIG1faW1hZ2UgPSBuZXcgUERGRG9jdW1lbnRJbWFnZTsKKyAgICAgICAgbV9p
bWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCiAjaWYgRU5BQkxFKFNWR19BU19JTUFHRSkKICAgICBpZiAobV9yZXNwb25zZS5t
aW1lVHlwZSgpID09ICJpbWFnZS9zdmcreG1sIikgewotICAgICAgICBtX2ltYWdlID0gbmV3IFNW
R0ltYWdlKHRoaXMpOworICAgICAgICBtX2ltYWdlID0gU1ZHSW1hZ2U6OmNyZWF0ZSh0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1faW1hZ2UgPSBuZXcgQml0bWFw
SW1hZ2UodGhpcyk7CisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUodGhpcyk7CiB9
CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuaCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKaW5kZXggMGEzZDI0OC4uMjEz
YzlmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAorKysgYi9XZWJD
b3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjcmVhdGVJbWFnZSgpOwogICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzKCk7CiAKLSAgICBJ
bWFnZSogbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggYTZiNGRlMC4uM2E5MDg1MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtMzk5OSw3ICszOTk5LDExIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1l
TG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKQogICAgIGlmIChvcmln
aW5hbFVSTC5pc0VtcHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYmxhbmtVUkwoKTsKICAg
ICAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVy
bCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCksIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyBt
X2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT50cmVlKCktPm5hbWUoKSA6ICIiLCBkb2NMb2FkZXIg
PyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIik7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9m
cmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICBTdHJpbmcgcGFyZW50ID0gcGFyZW50RnJhbWUg
PyBwYXJlbnRGcmFtZS0+dHJlZSgpLT5uYW1lKCkgOiAiIjsKKyAgICBTdHJpbmcgdGl0bGUgPSBk
b2NMb2FkZXIgPyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIjsKKworICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50cmVlKCktPm5h
bWUoKSwgcGFyZW50LCB0aXRsZSk7CiAgICAgaXRlbS0+c2V0T3JpZ2luYWxVUkxTdHJpbmcob3Jp
Z2luYWxVUkwuc3RyaW5nKCkpOwogICAgIAogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSBpZiB0aGlz
IGlzIGEgUE9TVApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNw
cCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAKaW5kZXggOGIzZDVmOS4uZjA3
MGNjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAorKysg
Yi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCkBAIC02NiwxMiArNjYsMTIgQEAg
dm9pZCBJY29uUmVjb3JkOjpzZXRJbWFnZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEpCiB7CiAgICAgLy8gSXQncyBva2F5IHRvIGRlbGV0ZSB0aGUgcmF3IGltYWdlIGhlcmUuIEFu
eSBleGlzdGluZyBjbGllbnRzIHVzaW5nIHRoaXMgaWNvbiB3aWxsIGJlCiAgICAgLy8gbWFuYWdp
bmcgYW4gaW1hZ2UgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgY29weSBvZiB0aGlzIHJhdyBpbWFn
ZSBkYXRhLgotICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFnZSgpKTsKKyAgICBtX2ltYWdl
ID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogCiAgICAgLy8gQ29weSB0aGUgcHJvdmlkZWQgZGF0
YSBpbnRvIHRoZSBidWZmZXIgb2YgdGhlIG5ldyBJbWFnZSBvYmplY3QuCiAgICAgaWYgKCFtX2lt
YWdlLT5zZXREYXRhKGRhdGEsIHRydWUpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJN
YW51YWwgaW1hZ2UgZGF0YSBmb3IgaWNvblVSTCAnJXMnIEZBSUxFRCAtIGl0IHdhcyBwcm9iYWJs
eSBpbnZhbGlkIGltYWdlIGRhdGEiLCBtX2ljb25VUkwuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICBtX2ltYWdlLnNldCgwKTsKKyAgICAgICAgbV9pbWFnZS5jbGVhcigpOwogICAgIH0KICAgICAK
ICAgICBtX2RhdGFTZXQgPSB0cnVlOwpAQCAtODIsNyArODIsNyBAQCB2b2lkIEljb25SZWNvcmQ6
OmxvYWRJbWFnZUZyb21SZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSkKICAgICBpZiAoIXJl
c291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1faW1hZ2Uuc2V0KEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZSkpOworICAgIG1faW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIG1fZGF0YVNldCA9IHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5oIGIvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKaW5kZXggNjFkMzFmYS4uYWFlYTc4NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uUmVjb3JkLmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0
cmluZyBtX2ljb25VUkw7CiAgICAgdGltZV90IG1fc3RhbXA7Ci0gICAgT3duUHRyPEltYWdlPiBt
X2ltYWdlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICAKICAgICBIYXNoU2V0PFN0
cmluZz4gbV9yZXRhaW5pbmdQYWdlVVJMczsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKaW5kZXggN2NhZjM5Zi4uZWMzOTQ4MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtOTEsMTIgKzkxLDE0IEBAIGNsYXNzIEJpdG1h
cEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSNpZiBQTEFURk9S
TShDRykKLSAgICBCaXRtYXBJbWFnZShDR0ltYWdlUmVmLCBJbWFnZU9ic2VydmVyKiA9IDApOwot
I2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQml0bWFwSW1hZ2UoY2Fpcm9fc3VyZmFjZV90Kiwg
SW1hZ2VPYnNlcnZlciogPSAwKTsKLSNlbmRpZgotICAgIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2
ZXIqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNyZWF0ZShOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBJbWFnZShuYXRpdmVJbWFnZSwg
b2JzZXJ2ZXIpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNy
ZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDApCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG9ic2VydmVyKSk7CisgICAgfQogICAgIH5CaXRtYXBJ
bWFnZSgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpAQCAtMTM1LDYgKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gZnJhbWVB
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgQml0bWFwSW1hZ2Uo
TmF0aXZlSW1hZ2VQdHIsIEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAgQml0bWFwSW1hZ2UoSW1h
Z2VPYnNlcnZlciogPSAwKTsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDUyZDJiZDcuLmU2
NjRkYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC01MSw2ICs1MSwxNiBA
QCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJu
IG1heCgwLCBtaW4oYSwgMjU1KSkgPDwgMjQgfCBtYXgoMCwgbWluKHIsIDI1NSkpIDw8IDE2IHwg
bWF4KDAsIG1pbihnLCAyNTUpKSA8PCA4IHwgbWF4KDAsIG1pbihiLCAyNTUpKTsKIH0KIAorc3Rh
dGljIGlubGluZSBpbnQgZmxvYXRUb1Nob3J0KGZsb2F0IGYpCit7CisgICAgcmV0dXJuIG1heCgw
LCBtaW4oc3RhdGljX2Nhc3Q8aW50PigyNTUgKiBmKSwgMjU1KSk7Cit9CisKK1JHQkEzMiBtYWtl
UkdCQShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQoreworICAgIHJldHVybiBm
bG9hdFRvU2hvcnQoYSkgPDwgMjQgfCBmbG9hdFRvU2hvcnQocikgPDwgMTYgfCBmbG9hdFRvU2hv
cnQoZykgPDwgOCB8IGZsb2F0VG9TaG9ydChiKTsKK30KKwogc3RhdGljIGRvdWJsZSBjYWxjSHVl
KGRvdWJsZSB0ZW1wMSwgZG91YmxlIHRlbXAyLCBkb3VibGUgaHVlVmFsKQogewogICAgIGlmICho
dWVWYWwgPCAwLjApCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggMTYwM2MxYS4uMjA5
YmM0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTYsNiArNTYsNyBAQCB0eXBl
ZGVmIHVuc2lnbmVkIFJHQkEzMjsgICAgICAgIC8vIFJHQkEgcXVhZHJ1cGxldAogCiBSR0JBMzIg
bWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50
IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSk7CiBSR0JBMzIgbWFrZVJHQkFGcm9tSFNMQShkb3VibGUgaCwgZG91Ymxl
IHMsIGRvdWJsZSBsLCBkb3VibGUgYSk7CiAKIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CkBAIC02Niw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBDb2xv
cihSR0JBMzIgY29sKSA6IG1fY29sb3IoY29sKSwgbV92YWxpZCh0cnVlKSB7IH0KICAgICBDb2xv
cihpbnQgciwgaW50IGcsIGludCBiKSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSksIG1fdmFs
aWQodHJ1ZSkgeyB9CiAgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogbV9j
b2xvcihtYWtlUkdCQShyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9CisgICAgQ29sb3Io
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBKHIs
IGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KICAgICBleHBsaWNpdCBDb2xvcihjb25zdCBT
dHJpbmcmKTsKICAgICBleHBsaWNpdCBDb2xvcihjb25zdCBjaGFyKik7CiAgICAgCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKaW5kZXggZDM4MmYwNi4uYjMyMWI4
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaApAQCAtNTEs
NiArNTEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KIAorICAgIC8vIEFzc3VtZSB0aGF0IGdlbmVyYXRlZCBjb250ZW50
IGhhcyBubyBkZWNvZGVkIGRhdGEgd2UgbmVlZCB0byB3b3JyeSBhYm91dAorICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCmluZGV4IDc1MGM1
OGMuLmI5YzcxZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29u
c3QgQ29sb3ImIGNvbG9yKQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZVN0b3BzKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AgJmEsIGNvbnN0
IEdyYWRpZW50OjpDb2xvclN0b3AgJmIpCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3Bz
KGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGEsIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3Am
IGIpCiB7CiAgICAgcmV0dXJuIGEuc3RvcCA8IGIuc3RvcDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaAppbmRleCA3MDE1OWIwLi4wYjBkODUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgi
CiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShDRykKQEAgLTc5LDExICs3
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFN0b3BzU29ydGVk
KGJvb2wgcykgeyBtX3N0b3BzU29ydGVkID0gczsgfQogCi0jaWYgUExBVEZPUk0oQ0cpIHx8IFBM
QVRGT1JNKENBSVJPKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmKTsKLSNlbHNlCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQot
I2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9n
cmFkaWVudCA9IDA7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCmluZGV4IDEwMWFiZjguLmU5NGQzYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaApAQCAtOTMsNiArOTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBQYXRo
OworICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xhc3MgVGV4dFJ1bjsKIAogICAgIC8vIFRoZXNl
IGJpdHMgY2FuIGJlIE9SZWQgdG9nZXRoZXIgZm9yIGEgdG90YWwgb2YgOCBwb3NzaWJsZSB0ZXh0
IGRyYXdpbmcgbW9kZXMuCkBAIC0xMzQsNyArMTM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRGaWxs
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICAgICAgCisKKyAgICAgICAgdm9pZCBhcHBseVN0cm9r
ZVBhdHRlcm4oY29uc3QgUGF0dGVybiYpOworICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
Y29uc3QgUGF0dGVybiYpOworCiAgICAgICAgIHZvaWQgc2F2ZSgpOwogICAgICAgICB2b2lkIHJl
c3RvcmUoKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDFh
MWUzYjIuLjE4NDU2ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
QEAgLTQ5LDYgKzUwLDEyIEBAIEltYWdlOjp+SW1hZ2UoKQogewogfQogCitJbWFnZSogSW1hZ2U6
Om51bGxJbWFnZSgpCit7CisgICAgUmVmUHRyPEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKK30KKwogYm9vbCBJbWFn
ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUodHlwZSk7IApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IDNjNzM1ZDYuLmQ2NWU1MjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKQEAgLTY5LDE4ICs2OSwxOSBAQCBjbGFzcyBTdHJpbmc7CiAvLyBU
aGlzIGNsYXNzIGdldHMgbm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lz
IGRlY29kZWQgZnJhbWVzIGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBj
bGFzcyBJbWFnZU9ic2VydmVyOwogCi1jbGFzcyBJbWFnZSA6IE5vbmNvcHlhYmxlIHsKK2NsYXNz
IEltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR2Vu
ZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoK
LSAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAg
ICAgCi0gICAgc3RhdGljIEltYWdlKiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBu
YW1lKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIq
ID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNl
KGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBT
dHJpbmcmKTsgCiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgCisKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBT
VkdJbWFnZSByaWdodCBub3cKQEAgLTk2LDExICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwogICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICAvLyBGSVhNRTogUERGL1NWRyB3aWxsIGJlIHVu
ZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlIHRvIHBydW5lIGJl
Y2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QKLSAgICAvLyBpbXBsZW1lbnRlZCB5ZXQgZm9y
IHRob3NlIGltYWdlIHR5cGVzLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEo
Ym9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7fTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29k
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgPSAwOwogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRh
KCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAKQEAgLTEzNyw5ICsxMzYsMTAgQEAgcHVibGlj
OgogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwor
CiAgICAgc3RhdGljIHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKTsKIAotcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRl
T3BlcmF0b3IpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKaW5kZXggZTY1MmUyYS4uZTVkYTNlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaApAQCAtMzMsMjUgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPG1lbW9yeT4KIAotI2lmICFQTEFURk9STShDRykKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykKLXR5cGVkZWYgc3RydWN0
IENHSW1hZ2UqIENHSW1hZ2VSZWY7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1
ZGUgPFFQaXhtYXA+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQYWludGVyOwotUVRfRU5E
X05BTUVTUEFDRQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDQUlSTykKLXR5cGVkZWYgc3RydWN0
IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC02OSwxOSArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAot
I2lmIFBMQVRGT1JNKENHKQotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBpbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICBRUGl4bWFwKiBwaXhtYXAoKSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAg
ICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oQ0cpIHx8IFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkKICAgICAgICAgSW1h
Z2UqIGltYWdlKCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNs
ZWFySW1hZ2UoKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQogCkBAIC05MCwyMyArNTksMjEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkgY29uc3Q7CiAKLSAgICAgICAgCi0KICAgICBwcml2YXRlOgogICAgICAgICB2
b2lkKiBtX2RhdGE7CiAgICAgICAgIEludFNpemUgbV9zaXplOwogCiAgICAgICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2U+
IG1faW1hZ2U7CisgICAgICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAog
I2lmIFBMQVRGT1JNKENHKQogICAgICAgICBJbWFnZUJ1ZmZlcih2b2lkKiBpbWFnZURhdGEsIGNv
bnN0IEludFNpemUmLCBzdGQ6OmF1dG9fcHRyPEdyYXBoaWNzQ29udGV4dD4pOwogI2VsaWYgUExB
VEZPUk0oUVQpCi0gICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IFFQaXhtYXAgJnB4KTsKKyAgICAg
ICAgSW1hZ2VCdWZmZXIoY29uc3QgUVBpeG1hcCYpOwogICAgICAgICBtdXRhYmxlIFFQaXhtYXAg
bV9waXhtYXA7CiAgICAgICAgIG11dGFibGUgUVBhaW50ZXIqIG1fcGFpbnRlcjsKICNlbGlmIFBM
QVRGT1JNKENBSVJPKQotICAgICAgICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpOworICAgICAgICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqKTsKICAgICAgICAgbXV0
YWJsZSBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKICNlbmRpZgogICAgIH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kMjA0YjliCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXR0ZXJuLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKKyNpbmNsdWRl
ICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhdHRlcm46OlBhdHRlcm4oSW1h
Z2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICA6IG1fdGlsZUltYWdl
KGltYWdlKQorICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCisgICAgLCBtX3JlcGVhdFkocmVwZWF0
WSkKK3sKK30KKworUGF0dGVybjo6flBhdHRlcm4oKQoreworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDBh
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UGF0dGVybl9oCisjZGVmaW5lIFBhdHRlcm5faAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oQ0cpCit0eXBlZGVm
IHN0cnVjdCBDR1BhdHRlcm4qIENHUGF0dGVyblJlZjsKK3R5cGVkZWYgQ0dQYXR0ZXJuUmVmIFBs
YXRmb3JtUGF0dGVyblB0cjsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQordHlwZWRlZiBjYWlyb19w
YXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworICAgIGNsYXNzIEltYWdlOworCisgICAg
Y2xhc3MgUGF0dGVybiA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhdHRl
cm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7CisKKyAgICAgICAgdmlydHVh
bCB+UGF0dGVybigpOworICAgICAgICAKKyAgICAgICAgSW1hZ2UqIHRpbGVJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGlsZUltYWdlLmdldCgpOyB9CisKKyAgICAgICAgUGxhdGZvcm1QYXR0ZXJu
UHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0pIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEltYWdlPiBt
X3RpbGVJbWFnZTsKKyAgICAgICAgYm9vbCBtX3JlcGVhdFg7CisgICAgICAgIGJvb2wgbV9yZXBl
YXRZOworICAgIH07CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmlu
ZGV4IGIwN2UyYTQuLmFjNTBhMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC00OTUsNiArNDk1LDIz
IEBAIEludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKCkKICAgICByZXR1cm4gSW50UG9p
bnQoc3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueDApLCBzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC55
MCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0
IFBhdHRlcm4mIHBhdHRlcm4pCit7CisgICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRl
cm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFw
bGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3NldF9zb3VyY2Uo
cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybik7CisgICAgY2Fpcm9fcGF0dGVybl9k
ZXN0cm95KHBsYXRmb3JtUGF0dGVybik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCit7CisgICAgLy8gVGhlIENhaXJv
IGNvZGVwYXRoIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHNlcGFyYXRlIHN0cm9rZS9maWxsPwor
ICAgIC8vIFRoZSBjb2RlIEkgcmVmYWN0b3JlZCB0byBjcmVhdGUgdGhlc2UgbWV0aG9kcyB3YXMg
aWRlbnRpY2FsIGZvciBDYWlybworICAgIGFwcGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuKTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2wpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgaXMgcHJvYmFibHkgYSBuby1vcCBidXQgSSdt
IG5vdCBzdXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bh
dHRlcm5DYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5D
YWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlNTEzYwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNh
aXJvLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NhaXJvX3BhdHRlcm5fdCogQ2FudmFzUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSkgY29u
c3QKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBpbWFnZSgpLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9m
b3Jfc3VyZmFjZShzdXJmYWNlKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVy
biwgJnBhdHRlcm5UcmFuc2Zvcm0pOworICAgIGlmIChtX3JlcGVhdFggfHwgbV9yZXBlYXRZKQor
ICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JF
UEVBVCk7CisgICAgcmV0dXJuIHBhdHRlcm47Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggODZiMWE5YS4uMzg4
YzRiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybi5o
IgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ0dQREZDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
QEAgLTQ4OSw3ICs0OTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlcgogICAgIAogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdC54KCksIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0
KCksIDEsIC0xKTsKLSAgICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlQnVmZmVyLT5jZ0ltYWdl
KCkpOworICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0KCksIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmltYWdlKCktPmdldENH
SW1hZ2VSZWYoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIDEs
IC0xKTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIC1yZWN0
LngoKSwgLXJlY3QueSgpIC0gcmVjdC5oZWlnaHQoKSk7CiB9CkBAIC04OTIsNiArODkzLDM2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9k
ZSkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4o
Y29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0
ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmICgh
cGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbG9yU3BhY2VSZWYg
cGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKKyAgICBDR0NvbnRl
eHRTZXRTdHJva2VDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOwor
ICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKKworICAgIGNvbnN0IENHRmxv
YXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRTZXRTdHJva2VQYXR0ZXJuKHBsYXRm
b3JtQ29udGV4dCgpLCBwbGF0Zm9ybVBhdHRlcm4sICZwYXR0ZXJuQWxwaGEpOworICAgIENHUGF0
dGVyblJlbGVhc2UocGxhdGZvcm1QYXR0ZXJuKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBDR1BhdHRl
cm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0
Q1RNKCkpOworICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVy
bigwKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShwbGF0Zm9ybUNvbnRleHQoKSwg
cGF0dGVyblNwYWNlKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7CisK
KyAgICBjb25zdCBDR0Zsb2F0IHBhdHRlcm5BbHBoYSA9IDE7CisgICAgQ0dDb250ZXh0U2V0Rmls
bFBhdHRlcm4ocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBo
YSk7CisgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmluZGV4IGRkNTIxOTIuLjYyMDc0YWYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMTAy
LDcgKzEwMiw3IEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgICAgICBB
U1NFUlQoY29udGV4dCgpKTsKICAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAg
IC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIENHSW1hZ2Ugb24gZGVz
dHJ1Y3Rpb24KLSAgICAgICAgbV9pbWFnZS5zZXQobmV3IEJpdG1hcEltYWdlKGNnSW1hZ2UpKTsK
KyAgICAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7CiAgICAgfQog
ICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQpAQCAtMTUzLDkgKzE1Myw4IEBAIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7CiAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKQEAgLTIwNSw5ICsyMDQsOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbgogICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwogICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0g
PSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwogICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4o
c3JjUm93cyArIGJhc2V4KVswXTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CiAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQ
ZXJSb3c7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5oCmluZGV4IGNhZGRjMDUuLjk5M2Y0NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCkBAIC0zOCwxNCArMzgsMjMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgUERGRG9jdW1lbnRJbWFnZSA6IHB1YmxpYyBJbWFnZSB7
CiAgICAgcHVibGljOgotICAgICAgICBQREZEb2N1bWVudEltYWdlKCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBERkRvY3VtZW50SW1hZ2U+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUERGRG9jdW1lbnRJbWFnZSk7CisgICAgICAgIH0K
ICAgICAgICAgflBERkRvY3VtZW50SW1hZ2UoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICAgICAgLy8gRklY
TUU6IFBERiBJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwg
YmUgdW5hYmxlCisgICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFy
ZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9CisgICAgICAgIHZpcnR1YWwgdW5z
aWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisKICAgICAgICAgdmlydHVh
bCBJbnRTaXplIHNpemUoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFBERkRvY3Vt
ZW50SW1hZ2UoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFBhZ2UoaW50
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGYzYTgxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBhdHRlcm4uaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQg
cGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAg
IENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlKj4oaW5mbyktPmdl
dENHSW1hZ2VSZWYoKTsKKyAgICBpZiAoIXBsYXRmb3JtSW1hZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZp
Y2VQaXhlbHMoCisgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZv
cm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKK3sKKyAgICBzdGF0aWNfY2Fz
dDxJbWFnZSo+KGluZm8pLT5kZXJlZigpOworfQorCitDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25z
dAoreworICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlSW1hZ2UoKS0+cmVjdCgpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgcGF0dGVy
blRyYW5zZm9ybS5zY2FsZSgtMSwgLTEpOworICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRl
KDAsIC10aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNv
IGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVwLCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBm
cmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCisgICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcg
cmVuZGVyZWQuCisgICAgLy8gSU5UX01BWCBpcyBhbG1vc3QgY29ycmVjdCwgYnV0IHRoZXJlIHNl
ZW1zIHRvIGJlIHNvbWUgbnVtYmVyIHdyYXBwaW5nIG9jY3VyaW5nIG1ha2luZyB0aGUgZmlsbAor
ICAgIC8vIHBhdHRlcm4gaXMgbm90IGZpbGxlZCBjb3JyZWN0bHkuIAorICAgIC8vIFNvLCBqdXN0
IHBpY2sgYSByZWFsbHkgbGFyZ2UgbnVtYmVyIHRoYXQgd29ya3MuIAorICAgIGZsb2F0IHhTdGVw
ID0gbV9yZXBlYXRYID8gdGlsZVJlY3Qud2lkdGgoKSA6ICgxMDAwMDAwMDAuMGYpOworICAgIGZs
b2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMTAwMDAwMDAwLjBm
KTsKKworICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0aGUgdGlsZSB3aGVuIGl0J3Mg
ZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VDYWxsYmFjaworICAgIHRpbGVJbWFnZSgp
LT5yZWYoKTsKKworICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tz
ID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKKyAgICBy
ZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRpbGVJbWFnZSgpLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgeFN0ZXAsIHlTdGVwLAorICAgICAgICBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFj
aW5nLCBUUlVFLCAmcGF0dGVybkNhbGxiYWNrcyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggODE2ZjljYi4uYTBkMjU3YiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTUyLDI0ICs1MiwyMiBAQCB2
b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKICAgICBtX3RpZmZSZXAg
PSAwOwogfQogCi1JbWFnZSogSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIg
Km5hbWUpCitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29u
c3QgY2hhciAqbmFtZSkKIHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2UgbnVsbEltYWdlOwotICAg
IAogICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNv
cmVCdW5kbGVGaW5kZXIgY2xhc3NdXTsKICAgICBOU1N0cmluZyAqaW1hZ2VQYXRoID0gW2J1bmRs
ZSBwYXRoRm9yUmVzb3VyY2U6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm5hbWVdIG9m
VHlwZTpAInRpZmYiXTsKICAgICBOU0RhdGEgKm5hbWVkSW1hZ2VEYXRhID0gW05TRGF0YSBkYXRh
V2l0aENvbnRlbnRzT2ZGaWxlOmltYWdlUGF0aF07CiAgICAgaWYgKG5hbWVkSW1hZ2VEYXRhKSB7
Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9IG5ldyBCaXRtYXBJbWFnZTsKKyAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgaW1hZ2UtPnNl
dERhdGEoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKG5hbWVkSW1hZ2VEYXRhKSwgdHJ1ZSk7Ci0g
ICAgICAgIHJldHVybiBpbWFnZTsKKyAgICAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKICAg
ICB9Ci0gICAgCisKICAgICAvLyBXZSBoYXZlIHJlcG9ydHMgaW5kaWNhdGluZyByZXNvdXJjZSBs
b2FkcyBhcmUgZmFpbGluZywgYnV0IHdlIGRvbid0IHlldCBrbm93IHRoZSByb290IGNhdXNlKHMp
LgogICAgIC8vIFR3byB0aGVvcmllcyBhcmUgYmFkIGluc3RhbGxzIChpbWFnZSBmaWxlcyBhcmUg
bWlzc2luZyksIGFuZCB0b28tbWFueS1vcGVuLWZpbGVzLgogICAgIC8vIFNlZSByZGFyOi8vNTYw
NzM4MQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAmbnVsbEltYWdlOwor
ICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKIENGRGF0YVJlZiBCaXRtYXBJbWFn
ZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRl
eCA3ZTJjN2ZjLi45NGZjZWQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC01NDYs
OCArNTQ2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6Y2FsY1ByZWZXaWR0aHMoKQogCiBJbWFnZSog
UmVuZGVySW1hZ2U6Om51bGxJbWFnZSgpCiB7Ci0gICAgc3RhdGljIEJpdG1hcEltYWdlIHNoYXJl
ZE51bGxJbWFnZTsKLSAgICByZXR1cm4gJnNoYXJlZE51bGxJbWFnZTsKKyAgICByZXR1cm4gSW1h
Z2U6Om51bGxJbWFnZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKaW5kZXggZTQwYmU0Yi4uNDEyZjJjYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMTQzMCwxMSArMTQzMCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgdHgsIGludCB0eSwgY29u
cwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSByZXNpemVyIGNv
bnRyb2wuCi0gICAgICAgIHN0YXRpYyBJbWFnZSogcmVzaXplQ29ybmVySW1hZ2U7CisgICAgICAg
IHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOwogICAgICAgICBpZiAoIXJl
c2l6ZUNvcm5lckltYWdlKQogICAgICAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIik7CiAgICAgICAgIElu
dFBvaW50IGltYWdlUG9pbnQoc2Nyb2xsQ29ybmVyLnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFn
ZS0+d2lkdGgoKSwgc2Nyb2xsQ29ybmVyLmJvdHRvbSgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPmhl
aWdodCgpKTsKLSAgICAgICAgcC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVBv
aW50KTsKKyAgICAgICAgcC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBpbWFn
ZVBvaW50KTsKIAogICAgICAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgx
cHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KICAgICAg
ICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9m
IHRoaXMgZnJhbWUuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNzg4NTZjNS4uODdk
MGE5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBi
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMTc1LDE2ICsxNzUsNyBAQCBO
YXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJlbmRlclN1YnRyZWVUb0ltYWdlKG1fZnJhbWVD
YWNoZS5nZXQoKSwgbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpOwogICAgIH0KLSNpZiBQTEFU
Rk9STShDRykKLSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5jZ0ltYWdlKCk7Ci0jZWxpZiBQTEFU
Rk9STShRVCkKLSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5waXhtYXAoKTsKLSNlbGlmIFBMQVRG
T1JNKENBSVJPKQotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPnN1cmZhY2UoKTsKLSNlbHNlCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgorICAgIHJldHVybiBt
X2ZyYW1lQ2FjaGUtPmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKIH0KIAogYm9vbCBTVkdJbWFn
ZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
aAppbmRleCAzZTY3YTdjLi4wM2JiNTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKQEAgLTQy
LDcgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBTVkdJbWFn
ZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgcHVibGljOgotICAgICAgICBTVkdJbWFnZShJbWFnZU9i
c2VydmVyKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ltYWdlPiBjcmVhdGUoSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICAgICAgfQogICAgICAgICB+U1ZHSW1h
Z2UoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRT
aXplJik7CkBAIC01NCw5ICs1NywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwog
CisgICAgICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQg
c2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCisgICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhl
c2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisK
ICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJl
dHVybiAwOyB9CiAgICAgICAgIAogcHJpdmF0ZToKKyAgICAgICAgU1ZHSW1hZ2UoSW1hZ2VPYnNl
cnZlciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCmluZGV4IDA3ZmY0N2MuLjQxNmQ1ZmUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNn
LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5D
Zy5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQq
IGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29u
dGV4dCk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIHBhdHRlcm5JbWFn
ZS0+c2l6ZSgpLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjBm
LCAtMS4wZik7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKSkpLCBwYXR0ZXJuSW1hZ2UtPmNn
SW1hZ2UoKSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKSkpLCBwYXR0ZXJuSW1hZ2UtPmlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3Vy
Y2VNYXNrZXJDZy5tbSBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2Vy
Q2cubW0KaW5kZXggN2ZjYmZlNi4uZWM2YjM0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1tCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBTVkdS
ZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBib3UKICAgICBDSUNvbnRleHQqIGNpR3JheXNjYWxlQ29udGV4dCA9IFtDSUNv
bnRleHQgY29udGV4dFdpdGhDR0NvbnRleHQ6Z3JheVNjYWxlQ29udGV4dCBvcHRpb25zOm5pbF07
CiAKICAgICAvLyBUcmFuc2Zvcm0gY29sb3JpemVkIG1hc2sgdG8gZ3JheSBzY2FsZQotICAgIENJ
SW1hZ2UqIGNvbG9yTWFzayA9IFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6bV9tYXNrLT5jZ0lt
YWdlKCldOworICAgIENJSW1hZ2UqIGNvbG9yTWFzayA9IFtDSUltYWdlIGltYWdlV2l0aENHSW1h
Z2U6bV9tYXNrLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCldOwogICAgIGlmICghY29sb3JNYXNr
KQogICAgICAgICByZXR1cm47CiAgICAgQ0lJbWFnZSogZ3JheVNjYWxlTWFzayA9IHRyYW5zZm9y
bUltYWdlSW50b0dyYXlzY2FsZU1hc2soY29sb3JNYXNrKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22736</attachid>
            <date>2008-08-11 18:10:10 -0700</date>
            <delta_ts>2008-08-12 12:50:39 -0700</delta_ts>
            <desc>First pass at refactoring Pattern</desc>
            <filename>First-pass-at-refactoring-Pattern.patch</filename>
            <type>text/plain</type>
            <size>76688</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MGM4NjY1NTgwZTgzNGI4NTU3MWNhMDY4Mzk4YmVhMzNmOGMxZDI3OQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlOWExZjQxLi40MjZmNzUyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5OCw2ICsxODk4LDcg
QEAKIAkJQTgwOUYxNDgwQjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0
NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKIAkJ
QTgwOUYxQUEwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTgwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQlBODA5
RjFBQjBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE5MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9OworCQlBODBB
MzhGRTBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQ
YXR0ZXJuQ0cuY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFs
dWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlB
ODBFNkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ByaW1pdGl2ZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI2OTksNiArMjcwMCw4IEBACiAJCUE4RjQ2QjgxMENCMjBBOUQwMDNBOTY3
MCAvKiBET01TVkdTdHJpbmdMaXN0LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUQ3OUFEMjBBQ0ExN0VCMDBGMDJGQzUgLyog
RE9NU1ZHU3RyaW5nTGlzdC5oICovOyB9OwogCQlBOEY0RkI5NDBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAq
LzsgfTsKIAkJQThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUw
QzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgfTsKKwkJQThGQTZFNUUwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovOyB9OwogCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQy
RTkgLyogTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLzsgfTsK
IAkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMjBENzQ1RTA1MDA2NDQyRTkg
LyogTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovOyB9OwpA
QCAtMzE2MCw3ICszMTYzLDYgQEAKIAkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9
OwotCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmggKi87IH07CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cu
Y3BwICovOyB9OwogCQlCMjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC02MzkwLDYgKzYzOTIs
NyBAQAogCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE4MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5MjksNiArNjkzMiw4IEBACiAJCUE4RUE4MDA2
MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0
RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOUM2RTRFMTBENzQ1
RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1pbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlD
NkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNaW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NTM5LDcgKzc1NDQsNiBAQAogCQlCMjc1MzUyQjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemVDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1
MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIwOTUsNyArMTIwOTksNiBAQAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8q
IEdyYWRpZW50Q0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFw
aGljc0NvbnRleHRDRy5jcHAgKi8sCi0JCQkJQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4RDcw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlQ0cuY3BwICovLApAQCAtMTIxMDUsNiArMTIxMDgsNyBAQAogCQkJCUIyNzUz
NTM1MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCUE4MEEzOEZEMEU1MEND
ODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjIxMyw2ICsxMjIxNyw4IEBACiAJCQkJQjIz
NTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCUE4MjRC
NDY0MEUyRUYyRUEwMDgxQTdCNyAvKiBUZXh0UnVuLmggKi8sCiAJCQkJRTRBRkNGQTQwREFGMjlB
MzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNG
NDkgLyogUGF0dGVybi5oICovLAorCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQyNzMsNyArMTQyNzksNiBAQAogCQkJCUIyQzNEQTcwMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBE
MDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QUIwQTE1Njk3
ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcx
RDQ1RDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMTUzODksNiArMTUzOTQsNyBAQAogCQkJCTMxQzBGRjRCMEU0Q0VGREQwMDdENkZFNSAv
KiBET01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RkE2RTVEMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MTcyLDYgKzE3MTc4
LDggQEAKIAkJCQkzMUMwRkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEEwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEQw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAK
aW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25D
b250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0b25Db250
cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25I
ZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFnZS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJbWFnZT4g
YnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIp
OworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoYnV0dG9u
SW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGJ1
dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1dHRvbi5n
ZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRl
eCA3NjIwNzBjLi5lNjNlZGI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVy
bi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwxODkgKzI2
LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9
PSAicmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9
IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
dHlwZSA9PSAibm8tcmVwZWF0IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibm8tcmVwZWF0
IikgewogICAgICAgICByZXBlYXRYID0gZmFsc2U7CiAgICAgICAgIHJlcGVhdFkgPSBmYWxzZTsK
LSAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0eXBlID09
ICJyZXBlYXQteCIpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInJlcGVhdC14IikgewogICAg
ICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9IGZhbHNlOwotICAgICAgICBl
YyA9IDA7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInJlcGVhdC15
IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAicmVwZWF0LXkiKSB7CiAgICAgICAgIHJlcGVh
dFggPSBmYWxzZTsKICAgICAgICAgcmVwZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBlYyA9IFNZTlRBWF9FUlI7CiB9CiAKLSNpZiBQTEFU
Rk9STShDRykKLQotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihDR0ltYWdlUmVmIGltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1f
cGxhdGZvcm1JbWFnZShpbWFnZSkKLSAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKLSAgICAsIG1fcmVw
ZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNs
ZWFuKG9yaWdpbkNsZWFuKQotewotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykKLQotQ2FudmFz
UGF0dGVybjo6Q2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgIDogbV9wbGF0Zm9ybUlt
YWdlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpKQotICAgICwgbV9jYWNoZWRJbWFn
ZSgwKQotICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkK
LSAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2luQ2xlYW4pCi17Ci19Ci0KLSNlbmRpZgotCi1DYW52
YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSwgYm9vbCBy
ZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX2NhY2hlZElt
YWdlKGNhY2hlZEltYWdlKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICwgbV9wbGF0Zm9ybUlt
YWdlKDApCi0jZW5kaWYKLSAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZ
KHJlcGVhdFkpCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCisgICAgOiBtX3BhdHRl
cm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpCiAgICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNs
ZWFuKQogewotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCh0aGlzKTsKLX0KLQotQ2FudmFzUGF0dGVybjo6fkNhbnZhc1BhdHRlcm4oKQotewotI2lm
IFBMQVRGT1JNKENBSVJPKQotICAgIGlmIChtX3BsYXRmb3JtSW1hZ2UpCi0gICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShtX3BsYXRmb3JtSW1hZ2UpOwotI2VuZGlmCi0gICAgaWYgKG1fY2Fj
aGVkSW1hZ2UpCi0gICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0K
LQotI2lmIFBMQVRGT1JNKENHKQotCi1zdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5wbGF0Zm9ybUltYWdlKCk7
Ci0gICAgaWYgKHBsYXRmb3JtSW1hZ2UpIHsKLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGlj
c0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgICAgIEZsb2F0
UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWln
aHQocGxhdGZvcm1JbWFnZSkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQs
IHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8p
LT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKGltYWdlLT5yZWN0KCkpOwotCi0gICAgaWYg
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQsIHJlY3QsIGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOwotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMgY29kZSB0byB1c2UgdGhlIHBsYXRmb3JtLWluZGVwZW5k
ZW50IAotICAgICAgICAvLyBkcmF3aW5nIEFQSSBpbiBhbGwgY2FzZXMuIFRoZW4sIHRoaXMgZGlk
RHJhdyBjYWxsIHdpbGwgaGFwcGVuIAotICAgICAgICAvLyBhdXRvbWF0aWNhbGx5LCBhbmQgd2Ug
Y2FuIHJlbW92ZSBpdC4KLSAgICAgICAgY2FjaGVkSW1hZ2UtPmRpZERyYXcoaW1hZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLmRyYXdJ
bWFnZShpbWFnZSwgcmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sodm9pZCogaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbykt
PmRlcmVmKCk7Ci19Ci0KLUNHUGF0dGVyblJlZiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQYXR0ZXJu
KGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dSZWN0IHJlY3Q7
Ci0gICAgcmVjdC5vcmlnaW4ueCA9IDA7Ci0gICAgcmVjdC5vcmlnaW4ueSA9IDA7Ci0gICAgaWYg
KG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICByZWN0LnNpemUud2lkdGggPSBDR0ltYWdlR2V0
V2lkdGgobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9
IENHSW1hZ2VHZXRIZWlnaHQobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgSW1hZ2UqIGltYWdlID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZWN0LnNpemUud2lkdGggPSBp
bWFnZS0+d2lkdGgoKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IGltYWdlLT5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0KLSAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUoQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0
cmFuc2Zvcm0sIDEsIC0xKSwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIAotICAgIC8vIElm
IEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcg
aXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KLSAgICAvLyByZXN1
bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KLSAgICAvLyBJTlRfTUFYIGlzIGFsbW9zdCBj
b3JyZWN0LCBidXQgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBudW1iZXIgd3JhcHBpbmcgb2NjdXJp
bmcgbWFraW5nIHRoZSBmaWxsCi0gICAgLy8gcGF0dGVybiBpcyBub3QgZmlsbGVkIGNvcnJlY3Rs
eS4gCi0gICAgLy8gU28sIGp1c3QgcGljayBhIHJlYWxseSBsYXJnZSBudW1iZXIgdGhhdCB3b3Jr
cy4gCi0gICAgZmxvYXQgeFN0ZXAgPSBtX3JlcGVhdFggPyByZWN0LnNpemUud2lkdGggOiAoMTAw
MDAwMDAwLjBmKTsKLSAgICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHJlY3Quc2l6ZS5oZWln
aHQgOiAoMTAwMDAwMDAwLjBmKTsKLQotICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0
ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sgfTsKLSAgICByZWYoKTsKLSAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRoaXMsIHJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKLSAgICAgICAga0NHUGF0dGVyblRpbGlu
Z0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwotfQotCi0jZWxpZiBQ
TEFURk9STShDQUlSTykKLQotY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQ
YXR0ZXJuKGNvbnN0IGNhaXJvX21hdHJpeF90JiBtKQotewotICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICBzdXJmYWNl
ID0gbV9wbGF0Zm9ybUltYWdlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJ
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2Nh
Y2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1
cmZhY2Uoc3VyZmFjZSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZt
KTsKLSAgICBpZiAobV9yZXBlYXRYIHx8IG1fcmVwZWF0WSkKLSAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwotICAgIHJldHVybiBw
YXR0ZXJuOwogfQogCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKaW5kZXggNjg5MWRhNi4u
NzljNzg3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAorKysgYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCkBAIC0yNiw3NiArMjYsMzQgQEAKICNpZm5kZWYg
Q2FudmFzUGF0dGVybl9oCiAjZGVmaW5lIENhbnZhc1BhdHRlcm5faAogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0jaWYgUExBVEZP
Uk0oQ0cpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0j
aW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBDYWNoZWRJbWFnZTsKKyAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBTdHJpbmc7CiAK
ICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAgY2xhc3MgQ2FudmFzUGF0dGVy
biA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BhdHRlcm4+LCBwcml2YXRlIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKKyAgICBjbGFzcyBDYW52YXNQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8
Q2FudmFzUGF0dGVybj4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VS
ZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmLCBib29sJiByZXBlYXRYLCBib29sJiByZXBlYXRZ
LCBFeGNlcHRpb25Db2RlJik7CiAKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJl
cGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQ
YXR0ZXJuKHN1cmZhY2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVh
dGUoQ2FjaGVkSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3Jl
YXRlKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2lu
Q2xlYW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
UGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAg
fQotICAgICAgICB2aXJ0dWFsIH5DYW52YXNQYXR0ZXJuKCk7Ci0KLSNpZiBQTEFURk9STShDRykK
LSAgICAgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybUltYWdlLmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV90KiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdl
OyB9Ci0jZW5kaWYKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHUGF0
dGVyblJlZiBjcmVhdGVQYXR0ZXJuKGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVQYXR0ZXJuKGNv
bnN0IGNhaXJvX21hdHJpeF90Jik7Ci0jZW5kaWYKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFBh
dHRlcm4mIHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRlcm47IH0KIAogICAgICAgICBib29sIG9y
aWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0
ZToKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgQ2FudmFzUGF0dGVybihDR0ltYWdlUmVmLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZWxpZiBQTEFU
Rk9STShDQUlSTykKLSAgICAgICAgQ2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZW5kaWYKLSAgICAg
ICAgQ2FudmFzUGF0dGVybihDYWNoZWRJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZ
LCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9wbGF0Zm9ybUltYWdl
OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogY29uc3Qg
bV9wbGF0Zm9ybUltYWdlOwotI2VuZGlmCi0gICAgICAgIENhY2hlZEltYWdlKiBjb25zdCBtX2Nh
Y2hlZEltYWdlOwotICAgICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgY29uc3Qg
Ym9vbCBtX3JlcGVhdFk7CisgICAgICAgIFBhdHRlcm4gbV9wYXR0ZXJuOwogICAgICAgICBib29s
IG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBlN2I2YjBkLi5lMWQzNTJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTEyMSwxNCArMTEyMSwxOSBAQCBQYXNzUmVmUHRy
PENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihI
VE1MSW1hZ2VFbGVtZQogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUocmVw
ZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSB0cnVlOwotICAgIGlmIChD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAg
ICBLVVJMIHVybChjYWNoZWRJbWFnZS0+dXJsKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKLSAgICAgICAgb3Jp
Z2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKG9yaWdpbi5nZXQoKSk7CisKKyAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgpKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGltYWdlLT5jYWNoZWRJbWFnZSgpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOworCisg
ICAgS1VSTCB1cmwoY2FjaGVkSW1hZ2UtPnVybCgpKTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBib29sIG9yaWdp
bkNsZWFuID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
cyhvcmlnaW4uZ2V0KCkpOworICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FjaGVk
SW1hZ2UtPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKIH0KIAogUGFz
c1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBh
dHRlcm4oSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywKQEAgLTExMzksMjMgKzExNDQsNyBAQCBQ
YXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRl
UGF0dGVybihIVE1MQ2FudmFzRWxlbQogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlv
blR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybiAwOwotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZv
cm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgY2FudmFzLT5jcmVhdGVQbGF0
Zm9ybUltYWdlKCkpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UuZ2V0KCksIHJlcGVhdFgsIHJlcGVhdFks
IGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKTsKLSAg
ICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiBwYXR0ZXJuID0gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKHN1cmZhY2UsIHJlcGVhdFgsIHJl
cGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KHN1cmZhY2UpOwotICAgIHJldHVybiBwYXR0ZXJuLnJlbGVhc2UoKTsKLSNlbHNlCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgorICAgIHJldHVybiBDYW52YXNQ
YXR0ZXJuOjpjcmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0
WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExNzgsNDcgKzExNjcsMjIg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgY2hl
Y2sgYmUgbW92ZWQgaW50byBHcmFwaGljc0NvbnRleHQ/IG9yIHJlbW92ZWQ/CiAjaWYgUExBVEZP
Uk0oQ0cpCiAgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxyZWFk
eSBzZXQuCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybgot
ICAgICAgICAgICAgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNmb3JtKG0sIHN0YXRl
KCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pKQorICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0gPSBjLT5nZXRDVE0oKTsKKyAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJu
ICYmIGN0bSA9PSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQogICAgICAg
ICByZXR1cm47CisjZW5kaWYKIAogICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgp
Lm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVh
dGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
UGF0dGVybigwKTsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNwYWNlKGMtPnBsYXRmb3Jt
Q29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVy
blNwYWNlKTsKLQotICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBDR0Nv
bnRleHRTZXRTdHJva2VQYXR0ZXJuKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybVBhdHRl
cm4sICZwYXR0ZXJuQWxwaGEpOwotICAgIENHUGF0dGVyblJlbGVhc2UocGxhdGZvcm1QYXR0ZXJu
KTsKLQotICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBtOwotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbGlmIFBMQVRGT1JNKENB
SVJPKQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUt
PnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNh
aXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fbWF0cml4X3QgbTsK
LSAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7Ci0KLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBs
YXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0
Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKKyAgICBjLT5hcHBseVN0cm9rZVBhdHRlcm4o
cGF0dGVybi0+cGF0dGVybigpKTsKIAotICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBsYXRmb3Jt
UGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3JtUGF0dGVybik7Cisj
aWYgUExBVEZPUk0oQ0cpCisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9y
bSA9IGN0bTsKICNlbmRpZgogICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRy
dWU7CiB9CkBAIC0xMjI5LDQ3ICsxMTkzLDIyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBjaGVjayBiZSBtb3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4
dD8gb3IgcmVtb3ZlZD8KICNpZiBQTEFURk9STShDRykKICAgICAvLyBDaGVjayBmb3IgY2FzZSB3
aGVyZSB0aGUgcGF0dGVybiBpcyBhbHJlYWR5IHNldC4KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBt
ID0gQ0dDb250ZXh0R2V0Q1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUo
KS5tX2FwcGxpZWRGaWxsUGF0dGVybgotICAgICAgICAgICAgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1F
cXVhbFRvVHJhbnNmb3JtKG0sIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCku
bV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCisgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bSA9IGMtPmdldENUTSgpOworICAgIGlmIChzdGF0ZSgpLm1fYXBwbGllZEZpbGxQ
YXR0ZXJuICYmIGN0bSA9PSBzdGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSkKICAg
ICAgICAgcmV0dXJuOworI2VuZGlmCiAKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJu
ID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIHBhdHRlcm5TcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3Bh
Y2UoYy0+cGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7Ci0gICAgQ0dDb2xvclNwYWNl
UmVsZWFzZShwYXR0ZXJuU3BhY2UpOwotCi0gICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEg
PSAxOwotICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBw
bGF0Zm9ybVBhdHRlcm4sICZwYXR0ZXJuQWxwaGEpOwotICAgIENHUGF0dGVyblJlbGVhc2UocGxh
dGZvcm1QYXR0ZXJuKTsKLQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3Jt
ID0gbTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpOwogICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWlyb19tYXRy
aXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKKyAgICBjLT5hcHBseUZpbGxQ
YXR0ZXJuKHBhdHRlcm4tPnBhdHRlcm4oKSk7CiAKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBsYXRm
b3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0Zm9y
bVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBs
YXRmb3JtUGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3JtUGF0dGVy
bik7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0gPSBjdG07CiAjZW5kaWYKICAgICBzdGF0ZSgpLm1fYXBwbGllZEZpbGxQYXR0ZXJuID0g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA0MDc3
MzQ0Li4xNjhiNzMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBA
IC0xOTUsOCArMTk1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgYm9vbCBt
X2FwcGxpZWRGaWxsUGF0dGVybjsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5z
Zm9ybTsKICNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG1f
c3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybTsKICNlbmRpZgogICAgICAgICB9Owog
ICAgICAgICBQYXRoIG1fcGF0aDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHls
ZS5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCmluZGV4IGJlNTAxM2EuLjBlMmVk
OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0NhbnZhc1N0eWxlLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCisjaWYgUExBVEZP
Uk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlmCisKICNp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRQnJ1c2g+CkBA
IC02MCwxMiArNjQsMTYgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZl
bCkKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGNvbnN0IFN0cmluZyYgY29sb3IsIGZs
b2F0IGFscGhhKQotICAgIDogbV90eXBlKENvbG9yU3RyaW5nV2l0aEFscGhhKSwgbV9jb2xvcihj
b2xvciksIG1fYWxwaGEoYWxwaGEpCisgICAgOiBtX3R5cGUoQ29sb3JTdHJpbmdXaXRoQWxwaGEp
CisgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICwgbV9hbHBoYShhbHBoYSkKIHsKIH0KIAogQ2Fu
dmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0gICAg
OiBtX3R5cGUoR3JheUxldmVsKSwgbV9hbHBoYShhbHBoYSksIG1fZ3JheUxldmVsKGdyYXlMZXZl
bCkKKyAgICA6IG1fdHlwZShHcmF5TGV2ZWwpCisgICAgLCBtX2FscGhhKGFscGhhKQorICAgICwg
bV9ncmF5TGV2ZWwoZ3JheUxldmVsKQogewogfQogCkBAIC04MCwxMDQgKzg4LDQ3IEBAIENhbnZh
c1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNH
cmFkaWVudD4gZ3JhZGllbnQpCi0gICAgOiBtX3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENv
bG9yU3RyaW5nKSwgbV9ncmFkaWVudChncmFkaWVudCkKKyAgICA6IG1fdHlwZShncmFkaWVudCA/
IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpCisgICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQogewog
fQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBw
YXR0ZXJuKQotICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRlcm4gOiBDb2xvclN0cmlu
ZyksIG1fcGF0dGVybihwYXR0ZXJuKQorICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRl
cm4gOiBDb2xvclN0cmluZykKKyAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQogewogfQogCitzdGF0
aWMgaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBSR0JBMzIgcmdiT25seSA9IGNvbG9yICYgMHgwMEZG
RkZGRjsKKyAgICBSR0JBMzIgcmdiYSA9IHJnYk9ubHkgfCBzdGQ6Om1heChzdGF0aWNfY2FzdDxp
bnQ+KG92ZXJyaWRlQWxwaGEgKiAyNTUpLCAwKSA8PCAyNDsKKyAgICByZXR1cm4gcmdiYTsKK30K
Kwogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0jZW5kaWYKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7CiAgICAgICAgICAgICBSR0JBMzIg
Y29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAgICAgICBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tl
Q29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xv
ciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgp
ICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigp
OwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcigoUUNvbG9yKFFSZ2IoY29sb3IpKSkp
OwotICAgICAgICAgICAgcC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgICAgICAvLyBGSVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBi
ZSBkZWFsdCB3aXRoIHNlcGFyYXRlbHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfcmdi
YShjciwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAot
ICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAg
ICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9y
ID4+IDI0KSAmIDB4RkYpIC8gMjU1LjBmKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDb2xvclN0cmluZ1dpdGhBbHBoYTogewogICAgICAgICAgICAgUkdCQTMyIGNv
bG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawogICAgICAgICAgICAgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQ
SS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNv
bG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBm
LAotICAgICAgICAgICAgICAgIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAg
ICAgICBRUGVuIGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHIg
PSBRQ29sb3IoUVJnYihjb2xvcikpOwotICAgICAgICAgICAgY2xyLnNldEFscGhhRihtX2FscGhh
KTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAt
PnNldFBlbihjdXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAg
Ly8gRklYTUU6IGZpbGwgYW5kIHN0cm9rZSBjb2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBh
cmF0ZWx5Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAo
KGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYg
MHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAv
IDI1NS4wZik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNv
bG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3JheUxldmVsOiB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ry
b2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fZ3JheUxldmVsLCBtX2FscGhh
KTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUUNvbG9yIGNscjsKLSAgICAgICAg
ICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgY2xyLnNldFJnYkYo
bV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0gICAgICAg
ICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0gICAgICAgICAgICBwLT5zZXRQZW4oY3Vy
cmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiYShjciwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9h
bHBoYSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9y
KG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUkdCQTogewotICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGlj
c0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCU3Ryb2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fcmVkLCBtX2dyZWVu
LCBtX2JsdWUsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRUGVu
IGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAg
ICAgICBjbHIuc2V0UmdiRihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSAgICAg
ICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihj
dXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLy8gRklYTUU6
IGZpbGwgYW5kIHN0cm9rZSBjb2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5Ci0g
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIG1fcmVkLCBtX2dyZWVuLCBtX2Js
dWUsIG1fYWxwaGEpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihDb2xvcihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENNWUtBOiB7CkBAIC0yMDgsNzUgKzE1OSwy
NSBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseUZpbGxDb2xvcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbmRpZgogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
ICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKLSAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8v
IGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKLSAgICAgICAgICAgIENTU1BhcnNlcjo6cGFy
c2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0
aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICAgICAgICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAg
ICAgICAgUUNvbG9yIGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2IoUVJnYihjb2xvcikpOwot
ICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9yKGNscik7Ci0gICAgICAgICAgICBwLT5z
ZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisgICAgICAgICAgICBSR0JBMzIgcmdiYSA9
IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKKyAgICAgICAgICAgIENTU1BhcnNl
cjo6cGFyc2VDb2xvcihyZ2JhLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihyZ2JhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7
IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAgICAgICAgICAgIENTU1BhcnNlcjo6
cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhp
cyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYg
UExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAw
eEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAy
NTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAg
ICAgICAgICAgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFCcnVz
aCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAgICAgUUNvbG9yIGNscjsKLSAg
ICAgICAgICAgIGNsci5zZXRSZ2IoUVJnYihjb2xvcikpOwotICAgICAgICAgICAgY2xyLnNldEFs
cGhhRihtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwot
ICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1f
YWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3Jh
eUxldmVsOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3Jt
LWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgICAgICBDR0NvbnRleHRTZXRHcmF5RmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAg
ICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAgICAgUUNvbG9y
IGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwg
bV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9y
KGNscik7Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisg
ICAgICAgIGNhc2UgR3JheUxldmVsOgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUkdCQTogewotICAg
ICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX3JlZCwgbV9n
cmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAg
UUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAgICBRQ29sb3IgY2xy
OwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBo
YSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAg
IHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5kaWYKKyAgICAgICAgY2FzZSBSR0JBOgor
ICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fcmVkLCBtX2dyZWVuLCBt
X2JsdWUsIG1fYWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ01ZS0E6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxh
dGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KICNpZiBQTEFURk9STShDRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDkwN2NjY2MuLjBkNTQ1MTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMjc1LDQ4ICsyNzUsNCBAQCBJbWFnZUJ1ZmZl
ciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIuZ2V0KCk7CiB9CiAKLSNpZiBQTEFURk9STShDRykKLQotQ0dJbWFnZVJlZiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHRSZWYpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dFJlZik7Ci0KLSAgICByZXR1cm4gQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dFJlZik7Ci19Ci0KLSNlbGlmIFBMQVRGT1JN
KFFUKQotCi1RUGl4bWFwIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybiBRUGl4bWFw
KCk7Ci0gICAgcmV0dXJuICptX2ltYWdlQnVmZmVyLT5waXhtYXAoKTsKLX0KLQotI2VsaWYgUExB
VEZPUk0oQ0FJUk8pCi0KLWNhaXJvX3N1cmZhY2VfdCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAotewotICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBOb3RlIHRoYXQgdW5saWtlIENHLCBvdXIgcmV0dXJuZWQg
aW1hZ2UgaXMgbm90IGEgY29weSBvcgotICAgIC8vIGNvcHktb24td3JpdGUsIGJ1dCB0aGUgb3Jp
Z2luYWwuIFRoaXMgaXMgZmluZSwgc2luY2UgaXQgaXMgb25seQotICAgIC8vIGV2ZXIgdXNlZCBh
cyBhIHNvdXJjZS4KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9pbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpKTsKLSAgICBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX2ltYWdlQnVmZmVyLT5zdXJm
YWNlKCkpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5zdXJmYWNlKCk7Ci19Ci0KLSNlbmRp
ZgotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGEwYjdjYzUuLmExMTgzNjQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0zMCwxOSArMzAsNiBAQAogI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCi0jaWYgUExBVEZPUk0oQ0cpCi0v
LyBGSVhNRTogQ0ctc3BlY2lmaWMgcGFydHMgbmVlZCB0byBtb3ZlIHRvIHRoZSBwbGF0Zm9ybSBk
aXJlY3RvcnkuCi10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKLXR5cGVk
ZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7Ci0jZWxpZiBQTEFURk9STShRVCkKLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKLWNsYXNzIFFQYWludGVyOwotUVRfRU5EX05B
TUVTUEFDRQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3Vy
ZmFjZSBjYWlyb19zdXJmYWNlX3Q7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CkBAIC0xMDUsMTUgKzkyLDggQEAgcHVibGlj
OgogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OwogCi0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OyAKLSNpZiBQTEFURk9STShDRykKLSAgICBDR0lt
YWdlUmVmIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKFFUKQot
ICAgIFFQaXhtYXAgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0o
Q0FJUk8pCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7
Ci0jZW5kaWYKLSAgICAKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7CisKICAgICBJ
bnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
OwogICAgIEludFBvaW50IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwIGIvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDM0YTA2NWIuLjJjN2Q0YzMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAorKysgYi9XZWJDb3JlL2xvYWRl
ci9DYWNoZWRJbWFnZS5jcHAKQEAgLTQ4LDIyICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBTdHJpbmcmIHVybCkKICAgICA6IENh
Y2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoMCkKIHsKLSAg
ICBtX2ltYWdlID0gMDsKICAgICBtX3N0YXR1cyA9IFVua25vd247CiB9CiAKIENhY2hlZEltYWdl
OjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmco
KSwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCiB7Ci0gICAgbV9pbWFnZSA9
IGltYWdlOwogICAgIG1fc3RhdHVzID0gQ2FjaGVkOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwog
fQogCiBDYWNoZWRJbWFnZTo6fkNhY2hlZEltYWdlKCkKIHsKLSAgICBkZWxldGUgbV9pbWFnZTsK
IH0KICAgICAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCkBA
IC05MywxNiArOTIsMTYgQEAgdm9pZCBDYWNoZWRJbWFnZTo6YWxsUmVmZXJlbmNlc1JlbW92ZWQo
KQogCiBzdGF0aWMgSW1hZ2UqIGJyb2tlbkltYWdlKCkKIHsKLSAgICBzdGF0aWMgSW1hZ2UqIGJy
b2tlbkltYWdlOworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGJyb2tlbkltYWdlOwogICAgIGlm
ICghYnJva2VuSW1hZ2UpCiAgICAgICAgIGJyb2tlbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJtaXNzaW5nSW1hZ2UiKTsKLSAgICByZXR1cm4gYnJva2VuSW1hZ2U7CisgICAg
cmV0dXJuIGJyb2tlbkltYWdlLmdldCgpOwogfQogCiBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgp
CiB7Ci0gICAgc3RhdGljIEJpdG1hcEltYWdlIG51bGxJbWFnZTsKLSAgICByZXR1cm4gJm51bGxJ
bWFnZTsKKyAgICBzdGF0aWMgUmVmUHRyPEJpdG1hcEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKIH0KIAogSW1hZ2Uq
IENhY2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CkBAIC0xMTEsNyArMTEwLDcgQEAgSW1hZ2UqIENh
Y2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgpOwog
CiAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlOworICAgICAgICByZXR1
cm4gbV9pbWFnZS5nZXQoKTsKIAogICAgIHJldHVybiBudWxsSW1hZ2UoKTsKIH0KQEAgLTE5NSwx
NCArMTk0LDEzIEBAIEludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAogdm9pZCBDYWNoZWRJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJzKCkKIHsKICAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hl
ZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0KCkpCisgICAgd2hpbGUgKENhY2hlZFJlc291cmNl
Q2xpZW50KiBjID0gdy5uZXh0KCkpCiAgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0aGlzKTsKIH0K
IAogdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogewogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
OwotICAgIGRlbGV0ZSBtX2ltYWdlOwogICAgIG1faW1hZ2UgPSAwOwogICAgIHNldEVuY29kZWRT
aXplKDApOwogfQpAQCAtMjE0LDE3ICsyMTIsMTcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6
OmNyZWF0ZUltYWdlKCkKICAgICAgICAgcmV0dXJuOwogI2lmIFBMQVRGT1JNKENHKQogICAgIGlm
IChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIpIHsKLSAgICAgICAg
bV9pbWFnZSA9IG5ldyBQREZEb2N1bWVudEltYWdlOworICAgICAgICBtX2ltYWdlID0gUERGRG9j
dW1lbnRJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKICNp
ZiBFTkFCTEUoU1ZHX0FTX0lNQUdFKQogICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0g
ImltYWdlL3N2Zyt4bWwiKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBuZXcgU1ZHSW1hZ2UodGhpcyk7
CisgICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbV9pbWFnZSA9IG5ldyBCaXRtYXBJbWFnZSh0aGlzKTsK
KyAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKIH0KIAogdm9pZCBDYWNo
ZWRJbWFnZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oIGIvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAppbmRleCAwYTNkMjQ4Li4yMTNjOWYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUlt
YWdlKCk7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoKTsKIAotICAgIEltYWdlKiBtX2ltYWdl
OworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAppbmRleCBhNmI0ZGUwLi4zYTkwODUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zOTk5
LDcgKzM5OTksMTEgQEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0
ZUhpc3RvcnlJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiAgICAgaWYgKG9yaWdpbmFsVVJMLmlzRW1w
dHkoKSkKICAgICAgICAgb3JpZ2luYWxVUkwgPSBibGFua1VSTCgpOwogICAgIAotICAgIFJlZlB0
cjxIaXN0b3J5SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50
cmVlKCktPm5hbWUoKSwgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSA/IG1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCktPnRyZWUoKS0+bmFtZSgpIDogIiIsIGRvY0xvYWRlciA/IGRvY0xvYWRlci0+
dGl0bGUoKSA6ICIiKTsKKyAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCkt
PnBhcmVudCgpOworICAgIFN0cmluZyBwYXJlbnQgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1l
LT50cmVlKCktPm5hbWUoKSA6ICIiOworICAgIFN0cmluZyB0aXRsZSA9IGRvY0xvYWRlciA/IGRv
Y0xvYWRlci0+dGl0bGUoKSA6ICIiOworCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0g
SGlzdG9yeUl0ZW06OmNyZWF0ZSh1cmwsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBwYXJlbnQs
IHRpdGxlKTsKICAgICBpdGVtLT5zZXRPcmlnaW5hbFVSTFN0cmluZyhvcmlnaW5hbFVSTC5zdHJp
bmcoKSk7CiAgICAgCiAgICAgLy8gU2F2ZSBmb3JtIHN0YXRlIGlmIHRoaXMgaXMgYSBQT1NUCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwIGIvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAppbmRleCA4YjNkNWY5Li5mMDcwY2M5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvblJlY29yZC5jcHAKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIEljb25SZWNv
cmQ6OnNldEltYWdlRGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKIHsKICAgICAv
LyBJdCdzIG9rYXkgdG8gZGVsZXRlIHRoZSByYXcgaW1hZ2UgaGVyZS4gQW55IGV4aXN0aW5nIGNs
aWVudHMgdXNpbmcgdGhpcyBpY29uIHdpbGwgYmUKICAgICAvLyBtYW5hZ2luZyBhbiBpbWFnZSB0
aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBjb3B5IG9mIHRoaXMgcmF3IGltYWdlIGRhdGEuCi0gICAg
bV9pbWFnZS5zZXQobmV3IEJpdG1hcEltYWdlKCkpOworICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CiAKICAgICAvLyBDb3B5IHRoZSBwcm92aWRlZCBkYXRhIGludG8gdGhlIGJ1
ZmZlciBvZiB0aGUgbmV3IEltYWdlIG9iamVjdC4KICAgICBpZiAoIW1faW1hZ2UtPnNldERhdGEo
ZGF0YSwgdHJ1ZSkpIHsKICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIk1hbnVhbCBpbWFnZSBk
YXRhIGZvciBpY29uVVJMICclcycgRkFJTEVEIC0gaXQgd2FzIHByb2JhYmx5IGludmFsaWQgaW1h
Z2UgZGF0YSIsIG1faWNvblVSTC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIG1faW1hZ2Uuc2V0
KDApOworICAgICAgICBtX2ltYWdlLmNsZWFyKCk7CiAgICAgfQogICAgIAogICAgIG1fZGF0YVNl
dCA9IHRydWU7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSWNvblJlY29yZDo6bG9hZEltYWdlRnJv
bVJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNlKQogICAgIGlmICghcmVzb3VyY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9pbWFnZS5zZXQoSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKHJlc291cmNlKSk7CisgICAgbV9pbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgbV9kYXRhU2V0ID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmggYi9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25SZWNvcmQuaAppbmRleCA2MWQzMWZhLi5hYWVhNzg3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAorKysgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25S
ZWNvcmQuaApAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1faWNvblVS
TDsKICAgICB0aW1lX3QgbV9zdGFtcDsKLSAgICBPd25QdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAg
UmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JldGFp
bmluZ1BhZ2VVUkxzOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaAppbmRleCA3Y2FmMzlmLi5lYzM5NDgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCkBAIC05MSwxMiArOTEsMTQgQEAgY2xhc3MgQml0bWFwSW1hZ2UgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgotI2lmIFBMQVRGT1JNKENHKQotICAgIEJp
dG1hcEltYWdlKENHSW1hZ2VSZWYsIEltYWdlT2JzZXJ2ZXIqID0gMCk7Ci0jZWxpZiBQTEFURk9S
TShDQUlSTykKLSAgICBCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3QqLCBJbWFnZU9ic2VydmVy
KiA9IDApOwotI2VuZGlmCi0gICAgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gY3JlYXRlKE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG5hdGl2ZUltYWdlLCBvYnNlcnZlcikpOwor
ICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gY3JlYXRlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Qml0bWFwSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICB9CiAgICAgfkJpdG1hcEltYWdlKCk7CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkBAIC0xMzUsNiArMTM3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBmcmFtZUF0SW5kZXgoY3VycmVu
dEZyYW1lKCkpOyB9CiAKIHByb3RlY3RlZDoKKyAgICBCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0
ciwgSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAgICBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9
IDApOworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRj
aGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNTJkMmJkNy4uZTY2NGRhMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTUxLDYgKzUxLDE2IEBAIFJHQkEzMiBtYWtl
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gbWF4KDAsIG1pbihh
LCAyNTUpKSA8PCAyNCB8IG1heCgwLCBtaW4ociwgMjU1KSkgPDwgMTYgfCBtYXgoMCwgbWluKGcs
IDI1NSkpIDw8IDggfCBtYXgoMCwgbWluKGIsIDI1NSkpOwogfQogCitzdGF0aWMgaW5saW5lIGlu
dCBmbG9hdFRvU2hvcnQoZmxvYXQgZikKK3sKKyAgICByZXR1cm4gbWF4KDAsIG1pbihzdGF0aWNf
Y2FzdDxpbnQ+KDI1NSAqIGYpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBKGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIGZsb2F0VG9TaG9ydChh
KSA8PCAyNCB8IGZsb2F0VG9TaG9ydChyKSA8PCAxNiB8IGZsb2F0VG9TaG9ydChnKSA8PCA4IHwg
ZmxvYXRUb1Nob3J0KGIpOworfQorCiBzdGF0aWMgZG91YmxlIGNhbGNIdWUoZG91YmxlIHRlbXAx
LCBkb3VibGUgdGVtcDIsIGRvdWJsZSBodWVWYWwpCiB7CiAgICAgaWYgKGh1ZVZhbCA8IDAuMCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCAxNjAzYzFhLi4yMDliYzRhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC01Niw2ICs1Niw3IEBAIHR5cGVkZWYgdW5zaWduZWQg
UkdCQTMyOyAgICAgICAgLy8gUkdCQSBxdWFkcnVwbGV0CiAKIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwogUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1JHQkEzMiBtYWtlUkdCQShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBh
KTsKIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGRvdWJsZSBoLCBkb3VibGUgcywgZG91YmxlIGws
IGRvdWJsZSBhKTsKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKQEAgLTY2LDYgKzY3LDcgQEAgcHVibGljOgogICAgIENvbG9yKFJHQkEzMiBjb2wp
IDogbV9jb2xvcihjb2wpLCBtX3ZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQg
ZywgaW50IGIpIDogbV9jb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgbV92YWxpZCh0cnVlKSB7IH0K
ICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgOiBtX2NvbG9yKG1ha2VSR0JB
KHIsIGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEociwgZywgYiwgYSkpLCBt
X3ZhbGlkKHRydWUpIHsgfQogICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwogICAg
IGV4cGxpY2l0IENvbG9yKGNvbnN0IGNoYXIqKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAppbmRleCBkMzgyZjA2Li5iMzIxYjhkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCkBAIC01MSw2ICs1MSwxMCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCisgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29k
ZWQgZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggNzUwYzU4Yy4uYjljNzFmOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAg
dm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBDb2xvciYgY29s
b3IpCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21w
YXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCAmYSwgY29uc3QgR3JhZGllbnQ6OkNv
bG9yU3RvcCAmYikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGll
bnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKIHsKICAgICBy
ZXR1cm4gYS5zdG9wIDwgYi5zdG9wOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFkaWVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5o
CmluZGV4IDcwMTU5YjAuLjBiMGQ4NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNzksMTEgKzc4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0U3RvcHNTb3J0ZWQoYm9vbCBzKSB7IG1f
c3RvcHNTb3J0ZWQgPSBzOyB9CiAKLSNpZiBQTEFURk9STShDRykgfHwgUExBVEZPUk0oQ0FJUk8p
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYpOwotI2Vsc2UKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0jZW5kaWYKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gMDsg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMTAx
YWJmOC4uZTk0ZDNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC05Myw2ICs5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBhdGg7CisgICAgY2xhc3Mg
UGF0dGVybjsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAgICAgLy8gVGhlc2UgYml0cyBjYW4gYmUg
T1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBvc3NpYmxlIHRleHQgZHJhd2luZyBtb2Rl
cy4KQEAgLTEzNCw3ICsxMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIENv
bG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotICAgICAgICAKKworICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihjb25z
dCBQYXR0ZXJuJik7CisgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJu
Jik7CisKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggMWExZTNiMi4uMTg0NTZm
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDksNiArNTAs
MTIgQEAgSW1hZ2U6On5JbWFnZSgpCiB7CiB9CiAKK0ltYWdlKiBJbWFnZTo6bnVsbEltYWdlKCkK
K3sKKyAgICBSZWZQdHI8SW1hZ2U+IG51bGxJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsK
KyAgICByZXR1cm4gbnVsbEltYWdlLmdldCgpOworfQorCiBib29sIEltYWdlOjpzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZSh0eXBlKTsgCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKaW5kZXggM2M3MzVkNi4uZDY1ZTUyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaApAQCAtNjksMTggKzY5LDE5IEBAIGNsYXNzIFN0cmluZzsKIC8vIFRoaXMgY2xhc3MgZ2V0
cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMgZGVjb2RlZCBmcmFt
ZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNsYXNzIEltYWdlT2Jz
ZXJ2ZXI7CiAKLWNsYXNzIEltYWdlIDogTm9uY29weWFibGUgeworY2xhc3MgSW1hZ2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsK
ICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgotICAgIEltYWdlKElt
YWdlT2JzZXJ2ZXIqID0gMCk7CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKLSAgICBzdGF0
aWMgSW1hZ2UqIGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciog
bmFtZSk7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICAKKworICAgIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7CiAgICAgYm9vbCBpc051bGwo
KSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdlIHJpZ2h0
IG5vdwpAQCAtOTYsMTEgKzk3LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBzZXREYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgdmly
dHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIAotICAgIC8vIEZJWE1FOiBQREYvU1ZHIHdpbGwgYmUgdW5kZXJyZXBvcnRpbmcg
ZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUgdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBm
dW5jdGlvbnMgYXJlIG5vdAotICAgIC8vIGltcGxlbWVudGVkIHlldCBmb3IgdGhvc2UgaW1hZ2Ug
dHlwZXMuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVu
dGFsID0gZmFsc2UpIHt9OwotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJv
b2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2Rl
ZFNpemUoKSBjb25zdCA9IDA7CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBt
X2RhdGEuZ2V0KCk7IH0KIApAQCAtMTM3LDkgKzEzNiwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJvdGVjdGVkOgorICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisKICAgICBzdGF0aWMg
dm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
OwogCi1wcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3
RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBlNjUy
ZTJhLi5lNWRhM2VkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBA
IC0zMywyNSArMzMsNiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
bWVtb3J5PgogCi0jaWYgIVBMQVRGT1JNKENHKQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJ
bWFnZVJlZjsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UVBpeG1hcD4K
LVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBhaW50ZXI7Ci1RVF9FTkRfTkFNRVNQQUNFCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZh
Y2UgY2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTY5LDE5ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCi0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGltYWdlKCkt
PmdldENHSW1hZ2VSZWYoKTsgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIFFQaXhtYXAq
IHBpeG1hcCgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykgfHwg
UExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBJbWFnZSogaW1hZ2UoKSBj
b25zdDsKLSNlbHNlCi0gICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KLSNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsg
bV9pbWFnZS5jbGVhcigpOyB9CiAKQEAgLTkwLDIzICs1OSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBj
b25zdDsKIAotICAgICAgICAKLQogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fZGF0YTsK
ICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gbV9jb250ZXh0OwotICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZT4gbV9pbWFnZTsKKyAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgCiAjaWYgUExBVEZPUk0o
Q0cpCiAgICAgICAgIEltYWdlQnVmZmVyKHZvaWQqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYs
IHN0ZDo6YXV0b19wdHI8R3JhcGhpY3NDb250ZXh0Pik7CiAjZWxpZiBQTEFURk9STShRVCkKLSAg
ICAgICAgSW1hZ2VCdWZmZXIoY29uc3QgUVBpeG1hcCAmcHgpOworICAgICAgICBJbWFnZUJ1ZmZl
cihjb25zdCBRUGl4bWFwJik7CiAgICAgICAgIG11dGFibGUgUVBpeG1hcCBtX3BpeG1hcDsKICAg
ICAgICAgbXV0YWJsZSBRUGFpbnRlciogbV9wYWludGVyOwogI2VsaWYgUExBVEZPUk0oQ0FJUk8p
Ci0gICAgICAgIEltYWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7CisgICAgICAg
IEltYWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCopOwogICAgICAgICBtdXRhYmxlIGNhaXJvX3N1
cmZhY2VfdCogbV9zdXJmYWNlOwogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdHRlcm4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDRiOWIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3Bw
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJv
b2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIDogbV90aWxlSW1hZ2UoaW1hZ2UpCisgICAg
LCBtX3JlcGVhdFgocmVwZWF0WCkKKyAgICAsIG1fcmVwZWF0WShyZXBlYXRZKQoreworfQorCitQ
YXR0ZXJuOjp+UGF0dGVybigpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMGFkNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYXR0ZXJuX2gKKyNk
ZWZpbmUgUGF0dGVybl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShDRykKK3R5cGVkZWYgc3RydWN0IENHUGF0
dGVybiogQ0dQYXR0ZXJuUmVmOwordHlwZWRlZiBDR1BhdHRlcm5SZWYgUGxhdGZvcm1QYXR0ZXJu
UHRyOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIGNhaXJvX3BhdHRlcm5fdCogUGxh
dGZvcm1QYXR0ZXJuUHRyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CisgICAgY2xhc3MgSW1hZ2U7CisKKyAgICBjbGFzcyBQYXR0ZXJu
IDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGF0dGVybihJbWFnZSosIGJv
b2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKKworICAgICAgICB2aXJ0dWFsIH5QYXR0ZXJuKCk7
CisgICAgICAgIAorICAgICAgICBJbWFnZSogdGlsZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV90
aWxlSW1hZ2UuZ2V0KCk7IH0KKworICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOwor
ICAgICAgICBib29sIG1fcmVwZWF0WDsKKyAgICAgICAgYm9vbCBtX3JlcGVhdFk7CisgICAgfTsK
KworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYjA3ZTJhNC4u
YWM1MGEyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTQ5NSw2ICs0OTUsMjMgQEAgSW50UG9pbnQg
R3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2Fz
dDxpbnQ+KG1hdHJpeC54MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0
dGVybikKK3sKKyAgICBjYWlyb19wYXR0ZXJuX3QqIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4u
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKKyAgICBpZiAoIXBsYXRmb3JtUGF0dGVy
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRl
eHQoKSwgcGxhdGZvcm1QYXR0ZXJuKTsKKyAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZv
cm1QYXR0ZXJuKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4o
Y29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICAvLyBUaGUgQ2Fpcm8gY29kZXBhdGggZG9l
c24ndCBzZWVtIHRvIHN1cHBvcnQgc2VwYXJhdGUgc3Ryb2tlL2ZpbGw/CisgICAgLy8gVGhlIGNv
ZGUgSSByZWZhY3RvcmVkIHRvIGNyZWF0ZSB0aGVzZSBtZXRob2RzIHdhcyBpZGVudGljYWwgZm9y
IENhaXJvCisgICAgYXBwbHlTdHJva2VQYXR0ZXJuKHBhdHRlcm4pOworfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCkKIHsKICAg
ICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhIG5vLW9wIGJ1dCBJJ20gbm90IHN1cmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU1MTNjCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZh
c1BhdHRlcm4uaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdAoreworICAgIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNhaXJv
X3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKHN1
cmZhY2UpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmcGF0dGVyblRy
YW5zZm9ybSk7CisgICAgaWYgKG1fcmVwZWF0WCB8fCBtX3JlcGVhdFkpCisgICAgICAgIGNhaXJv
X3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICBy
ZXR1cm4gcGF0dGVybjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA4NmIxYTlhLi4zODhjNGIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R1BERkNvbnRleHQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDg5LDcgKzQ5
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyCiAgICAgCiAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwot
ICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0KCksIEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmNnSW1hZ2UoKSk7CisgICAgQ0dD
b250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsK
ICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3QueCgpLCAtcmVjdC55
KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KQEAgLTg5Miw2ICs4OTMsMzYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQogICAgIH0KIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJu
JiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJu
LmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRl
cm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2Ug
PSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENHQ29udGV4dFNldFN0cm9rZUNv
bG9yU3BhY2UocGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7CisgICAgQ0dDb2xvclNw
YWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOworCisgICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxw
aGEgPSAxOworICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4ocGxhdGZvcm1Db250ZXh0KCks
IHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7CisgICAgQ0dQYXR0ZXJuUmVsZWFzZShw
bGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0
dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9y
bVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAg
aWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JTcGFj
ZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENH
Q29udGV4dFNldEZpbGxDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2Up
OworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKKworICAgIGNvbnN0IENH
RmxvYXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihwbGF0
Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKKyAgICBDR1Bh
dHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKaW5kZXggZGQ1MjE5Mi4uNjIwNzRhZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAg
SW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIEFTU0VSVChjb250ZXh0
KCkpOwogICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgLy8gQml0bWFwSW1h
Z2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAg
ICAgICBtX2ltYWdlLnNldChuZXcgQml0bWFwSW1hZ2UoY2dJbWFnZSkpOworICAgICAgICBtX2lt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKICAgICB9CiAgICAgcmV0dXJuIG1f
aW1hZ2UuZ2V0KCk7CiB9CkBAIC0xNTMsOSArMTUzLDggQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAq
IDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RS
b3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBi
YXNleClbMF07Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwpAQCAt
MjA1LDkgKzIwNCw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEq
IHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uCiAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93
cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFz
ZXgpWzBdOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlc3RSb3dzICs9IGRl
c3RCeXRlc1BlclJvdzsKICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKaW5kZXggY2Fk
ZGMwNS4uOTkzZjQ0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmgKQEAgLTM4LDE0ICszOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBQREZEb2N1bWVudEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdlKTsKKyAgICAgICAgfQogICAgICAgICB+UERG
RG9jdW1lbnRJbWFnZSgpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGRhdGFDaGFu
Z2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAorICAgICAgICAvLyBGSVhNRTogUERGIEltYWdl
cyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAg
ICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1l
bnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBp
bmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Ip
OwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjEwZjNhODEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGF0dGVybi5o
IgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJh
Y2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQ0dJbWFnZVJlZiBw
bGF0Zm9ybUltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2UqPihpbmZvKS0+Z2V0Q0dJbWFnZVJlZigp
OworICAgIGlmICghcGxhdGZvcm1JbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dSZWN0
IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKKyAg
ICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJ
bWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdlKTsKK30KKworc3RhdGljIHZvaWQgcGF0dGVyblJl
bGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQoreworICAgIHN0YXRpY19jYXN0PEltYWdlKj4oaW5m
byktPmRlcmVmKCk7Cit9CisKK0NHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgSW50
UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnNj
YWxlKC0xLCAtMSk7CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLXRpbGVSZWN0
LmhlaWdodCgpKTsKKworICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3Ig
eFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBG
TFRfTUFYIGFsc28KKyAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KKyAg
ICAvLyBJTlRfTUFYIGlzIGFsbW9zdCBjb3JyZWN0LCBidXQgdGhlcmUgc2VlbXMgdG8gYmUgc29t
ZSBudW1iZXIgd3JhcHBpbmcgb2NjdXJpbmcgbWFraW5nIHRoZSBmaWxsCisgICAgLy8gcGF0dGVy
biBpcyBub3QgZmlsbGVkIGNvcnJlY3RseS4gCisgICAgLy8gU28sIGp1c3QgcGljayBhIHJlYWxs
eSBsYXJnZSBudW1iZXIgdGhhdCB3b3Jrcy4gCisgICAgZmxvYXQgeFN0ZXAgPSBtX3JlcGVhdFgg
PyB0aWxlUmVjdC53aWR0aCgpIDogKDEwMDAwMDAwMC4wZik7CisgICAgZmxvYXQgeVN0ZXAgPSBt
X3JlcGVhdFkgPyB0aWxlUmVjdC5oZWlnaHQoKSA6ICgxMDAwMDAwMDAuMGYpOworCisgICAgLy8g
VGhlIHBhdHRlcm4gd2lsbCByZWxlYXNlIHRoZSB0aWxlIHdoZW4gaXQncyBkb25lIHJlbmRlcmlu
ZyBpbiBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrCisgICAgdGlsZUltYWdlKCktPnJlZigpOworCisg
ICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRl
cm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OworICAgIHJldHVybiBDR1BhdHRl
cm5DcmVhdGUodGlsZUltYWdlKCksIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwg
eVN0ZXAsCisgICAgICAgIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIFRSVUUsICZw
YXR0ZXJuQ2FsbGJhY2tzKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bWFnZU1hYy5tbQppbmRleCA4MTZmOWNiLi5hMGQyNTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtNTIsMjQgKzUyLDIyIEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQogICAgIG1fdGlmZlJlcCA9IDA7CiB9CiAKLUlt
YWdlKiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkKK1Bhc3NS
ZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1l
KQogewotICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBudWxsSW1hZ2U7Ci0gICAgCiAgICAgTlNCdW5k
bGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29yZUJ1bmRsZUZpbmRl
ciBjbGFzc11dOwogICAgIE5TU3RyaW5nICppbWFnZVBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNv
dXJjZTpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bmFtZV0gb2ZUeXBlOkAidGlmZiJd
OwogICAgIE5TRGF0YSAqbmFtZWRJbWFnZURhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNP
ZkZpbGU6aW1hZ2VQYXRoXTsKICAgICBpZiAobmFtZWRJbWFnZURhdGEpIHsKLSAgICAgICAgSW1h
Z2UqIGltYWdlID0gbmV3IEJpdG1hcEltYWdlOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBpbWFnZS0+c2V0RGF0YShTaGFyZWRC
dWZmZXI6OndyYXBOU0RhdGEobmFtZWRJbWFnZURhdGEpLCB0cnVlKTsKLSAgICAgICAgcmV0dXJu
IGltYWdlOworICAgICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIFdlIGhhdmUgcmVwb3J0cyBpbmRpY2F0aW5nIHJlc291cmNlIGxvYWRzIGFyZSBmYWls
aW5nLCBidXQgd2UgZG9uJ3QgeWV0IGtub3cgdGhlIHJvb3QgY2F1c2UocykuCiAgICAgLy8gVHdv
IHRoZW9yaWVzIGFyZSBiYWQgaW5zdGFsbHMgKGltYWdlIGZpbGVzIGFyZSBtaXNzaW5nKSwgYW5k
IHRvby1tYW55LW9wZW4tZmlsZXMuCiAgICAgLy8gU2VlIHJkYXI6Ly81NjA3MzgxCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICZudWxsSW1hZ2U7CisgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRUSUZGUmVw
cmVzZW50YXRpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDdlMmM3ZmMuLjk0
ZmNlZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTU0Niw4ICs1NDYsNyBAQCB2
b2lkIFJlbmRlckltYWdlOjpjYWxjUHJlZldpZHRocygpCiAKIEltYWdlKiBSZW5kZXJJbWFnZTo6
bnVsbEltYWdlKCkKIHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2Ugc2hhcmVkTnVsbEltYWdlOwot
ICAgIHJldHVybiAmc2hhcmVkTnVsbEltYWdlOworICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCBlNDBiZTRiLi40MTJmMmNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC0xNDMwLDExICsxNDMwLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250
cm9scyhHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KLSAgICAg
ICAgc3RhdGljIEltYWdlKiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICAgICAgc3RhdGljIFJlZlB0
cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CiAgICAgICAgIGlmICghcmVzaXplQ29ybmVySW1h
Z2UpCiAgICAgICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKTsKICAgICAgICAgSW50UG9pbnQgaW1hZ2VQ
b2ludChzY3JvbGxDb3JuZXIucmlnaHQoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBz
Y3JvbGxDb3JuZXIuYm90dG9tKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOwotICAg
ICAgICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUG9pbnQpOworICAgICAg
ICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGltYWdlUG9pbnQpOwogCiAg
ICAgICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgogICAgICAgICAvLyBDbGlwcGlu
ZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA3ODg1NmM1Li44N2QwYTk1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0xNzUsMTYgKzE3NSw3IEBAIE5hdGl2ZUltYWdlUHRy
IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdldCgpLCBt
X2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSk7CiAgICAgfQotI2lmIFBMQVRGT1JNKENHKQotICAg
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmNnSW1hZ2UoKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnBpeG1hcCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0g
ICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c3VyZmFjZSgpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhdGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmggYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCmluZGV4IDNlNjdh
N2MuLjAzYmI1MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgK
KysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaApAQCAtNDIsNyArNDIsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIFNWR0ltYWdlIDogcHVibGljIElt
YWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJ
bWFnZShvYnNlcnZlcikpOworICAgICAgICB9CiAgICAgICAgIH5TVkdJbWFnZSgpOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTU0
LDkgKzU3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICAgICAgLy8g
RklYTUU6IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2ls
bCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMg
YXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVj
b2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1
bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAg
ICAgICAgCiBwcml2YXRlOgorICAgICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlclBhdHRlcm5DZy5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlclBhdHRlcm5DZy5jcHAKaW5kZXggMDdmZjQ3Yy4uNDE2ZDVmZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcApAQCAtMzgs
NyArMzgsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250
ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgcGF0dGVybkltYWdlLT5zaXplKCkuaGVp
Z2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEuMGYsIC0xLjBmKTsKLSAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHBhdHRlcm5JbWFnZS0+c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+Y2dJbWFnZSgpKTsKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHBhdHRlcm5JbWFnZS0+c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+aW1hZ2UoKS0+Z2V0Q0dJ
bWFnZVJlZigpKTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1t
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQppbmRleCA3
ZmNiZmU2Li5lYzZiMzQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdS
ZXNvdXJjZU1hc2tlckNnLm1tCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291
cmNlTWFza2VyQ2cubW0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFNWR1Jlc291cmNlTWFza2Vy
OjphcHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJv
dQogICAgIENJQ29udGV4dCogY2lHcmF5c2NhbGVDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0
V2l0aENHQ29udGV4dDpncmF5U2NhbGVDb250ZXh0IG9wdGlvbnM6bmlsXTsKIAogICAgIC8vIFRy
YW5zZm9ybSBjb2xvcml6ZWQgbWFzayB0byBncmF5IHNjYWxlCi0gICAgQ0lJbWFnZSogY29sb3JN
YXNrID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTptX21hc2stPmNnSW1hZ2UoKV07CisgICAg
Q0lJbWFnZSogY29sb3JNYXNrID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTptX21hc2stPmlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKV07CiAgICAgaWYgKCFjb2xvck1hc2spCiAgICAgICAgIHJl
dHVybjsKICAgICBDSUltYWdlKiBncmF5U2NhbGVNYXNrID0gdHJhbnNmb3JtSW1hZ2VJbnRvR3Jh
eXNjYWxlTWFzayhjb2xvck1hc2spOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22754</attachid>
            <date>2008-08-12 12:50:25 -0700</date>
            <delta_ts>2008-08-12 13:53:39 -0700</delta_ts>
            <desc>Third pass, now fixing Cairo build issues.</desc>
            <filename>Third-pass-now-fixing-Cairo-build-issues..patch</filename>
            <type>text/plain</type>
            <size>77012</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MzRkMmNmMzllOTk4NmEwMTgxNzFiMjAzZTZiZWQ3MDIwYmNmMDVlNwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ODlmYjBkLi40MjZmNzUyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5OCw2ICsxODk4LDcg
QEAKIAkJQTgwOUYxNDgwQjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0
NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKIAkJ
QTgwOUYxQUEwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTgwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQlBODA5
RjFBQjBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE5MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9OworCQlBODBB
MzhGRTBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQ
YXR0ZXJuQ0cuY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFs
dWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlB
ODBFNkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ByaW1pdGl2ZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI2OTksNiArMjcwMCw4IEBACiAJCUE4RjQ2QjgxMENCMjBBOUQwMDNBOTY3
MCAvKiBET01TVkdTdHJpbmdMaXN0LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUQ3OUFEMjBBQ0ExN0VCMDBGMDJGQzUgLyog
RE9NU1ZHU3RyaW5nTGlzdC5oICovOyB9OwogCQlBOEY0RkI5NDBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAq
LzsgfTsKIAkJQThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUw
QzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgfTsKKwkJQThGQTZFNUUwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovOyB9OwogCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQy
RTkgLyogTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLzsgfTsK
IAkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMjBENzQ1RTA1MDA2NDQyRTkg
LyogTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovOyB9OwpA
QCAtMzE2MCw3ICszMTYzLDYgQEAKIAkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9
OwotCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmggKi87IH07CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cu
Y3BwICovOyB9OwogCQlCMjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC02MzkwLDYgKzYzOTIs
NyBAQAogCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE4MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5MjksNiArNjkzMiw4IEBACiAJCUE4RUE4MDA2
MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0
RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOUM2RTRFMTBENzQ1
RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1pbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlD
NkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNaW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NTM5LDcgKzc1NDQsNiBAQAogCQlCMjc1MzUyQjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemVDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1
MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIwOTUsNyArMTIwOTksNiBAQAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8q
IEdyYWRpZW50Q0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFw
aGljc0NvbnRleHRDRy5jcHAgKi8sCi0JCQkJQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4RDcw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlQ0cuY3BwICovLApAQCAtMTIxMDUsNiArMTIxMDgsNyBAQAogCQkJCUIyNzUz
NTM1MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCUE4MEEzOEZEMEU1MEND
ODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjIxMyw2ICsxMjIxNyw4IEBACiAJCQkJQjIz
NTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCUE4MjRC
NDY0MEUyRUYyRUEwMDgxQTdCNyAvKiBUZXh0UnVuLmggKi8sCiAJCQkJRTRBRkNGQTQwREFGMjlB
MzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNG
NDkgLyogUGF0dGVybi5oICovLAorCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQyNzMsNyArMTQyNzksNiBAQAogCQkJCUIyQzNEQTcwMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBE
MDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QUIwQTE1Njk3
ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcx
RDQ1RDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMTUzODksNiArMTUzOTQsNyBAQAogCQkJCTMxQzBGRjRCMEU0Q0VGREQwMDdENkZFNSAv
KiBET01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RkE2RTVEMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1NDQzLDkgKzE1NDQ5
LDYgQEAKIAkJCXByb2R1Y3RSZWZHcm91cCA9IDAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQ
cm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIi
OwotCQkJcHJvamVjdFJvb3RzID0gKAotCQkJCSIiLAotCQkJKTsKIAkJCXRhcmdldHMgPSAoCiAJ
CQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJREQwNDFGQkUw
OUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKQEAgLTE3MTc1LDYgKzE3MTc4
LDggQEAKIAkJCQkzMUMwRkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEEwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEQw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAK
aW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25D
b250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0b25Db250
cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25I
ZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFnZS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJbWFnZT4g
YnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIp
OworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoYnV0dG9u
SW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGJ1
dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1dHRvbi5n
ZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRl
eCA3NjIwNzBjLi5lNjNlZGI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVy
bi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwxODkgKzI2
LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9
PSAicmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9
IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
dHlwZSA9PSAibm8tcmVwZWF0IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibm8tcmVwZWF0
IikgewogICAgICAgICByZXBlYXRYID0gZmFsc2U7CiAgICAgICAgIHJlcGVhdFkgPSBmYWxzZTsK
LSAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0eXBlID09
ICJyZXBlYXQteCIpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInJlcGVhdC14IikgewogICAg
ICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9IGZhbHNlOwotICAgICAgICBl
YyA9IDA7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInJlcGVhdC15
IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAicmVwZWF0LXkiKSB7CiAgICAgICAgIHJlcGVh
dFggPSBmYWxzZTsKICAgICAgICAgcmVwZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBlYyA9IFNZTlRBWF9FUlI7CiB9CiAKLSNpZiBQTEFU
Rk9STShDRykKLQotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihDR0ltYWdlUmVmIGltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1f
cGxhdGZvcm1JbWFnZShpbWFnZSkKLSAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKLSAgICAsIG1fcmVw
ZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNs
ZWFuKG9yaWdpbkNsZWFuKQotewotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykKLQotQ2FudmFz
UGF0dGVybjo6Q2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgIDogbV9wbGF0Zm9ybUlt
YWdlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpKQotICAgICwgbV9jYWNoZWRJbWFn
ZSgwKQotICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkK
LSAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2luQ2xlYW4pCi17Ci19Ci0KLSNlbmRpZgotCi1DYW52
YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSwgYm9vbCBy
ZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX2NhY2hlZElt
YWdlKGNhY2hlZEltYWdlKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICwgbV9wbGF0Zm9ybUlt
YWdlKDApCi0jZW5kaWYKLSAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZ
KHJlcGVhdFkpCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCisgICAgOiBtX3BhdHRl
cm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpCiAgICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNs
ZWFuKQogewotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCh0aGlzKTsKLX0KLQotQ2FudmFzUGF0dGVybjo6fkNhbnZhc1BhdHRlcm4oKQotewotI2lm
IFBMQVRGT1JNKENBSVJPKQotICAgIGlmIChtX3BsYXRmb3JtSW1hZ2UpCi0gICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShtX3BsYXRmb3JtSW1hZ2UpOwotI2VuZGlmCi0gICAgaWYgKG1fY2Fj
aGVkSW1hZ2UpCi0gICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0K
LQotI2lmIFBMQVRGT1JNKENHKQotCi1zdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5wbGF0Zm9ybUltYWdlKCk7
Ci0gICAgaWYgKHBsYXRmb3JtSW1hZ2UpIHsKLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGlj
c0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgICAgIEZsb2F0
UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWln
aHQocGxhdGZvcm1JbWFnZSkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQs
IHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8p
LT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKGltYWdlLT5yZWN0KCkpOwotCi0gICAgaWYg
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQsIHJlY3QsIGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOwotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMgY29kZSB0byB1c2UgdGhlIHBsYXRmb3JtLWluZGVwZW5k
ZW50IAotICAgICAgICAvLyBkcmF3aW5nIEFQSSBpbiBhbGwgY2FzZXMuIFRoZW4sIHRoaXMgZGlk
RHJhdyBjYWxsIHdpbGwgaGFwcGVuIAotICAgICAgICAvLyBhdXRvbWF0aWNhbGx5LCBhbmQgd2Ug
Y2FuIHJlbW92ZSBpdC4KLSAgICAgICAgY2FjaGVkSW1hZ2UtPmRpZERyYXcoaW1hZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLmRyYXdJ
bWFnZShpbWFnZSwgcmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sodm9pZCogaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbykt
PmRlcmVmKCk7Ci19Ci0KLUNHUGF0dGVyblJlZiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQYXR0ZXJu
KGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dSZWN0IHJlY3Q7
Ci0gICAgcmVjdC5vcmlnaW4ueCA9IDA7Ci0gICAgcmVjdC5vcmlnaW4ueSA9IDA7Ci0gICAgaWYg
KG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICByZWN0LnNpemUud2lkdGggPSBDR0ltYWdlR2V0
V2lkdGgobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9
IENHSW1hZ2VHZXRIZWlnaHQobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgSW1hZ2UqIGltYWdlID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZWN0LnNpemUud2lkdGggPSBp
bWFnZS0+d2lkdGgoKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IGltYWdlLT5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0KLSAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUoQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0
cmFuc2Zvcm0sIDEsIC0xKSwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIAotICAgIC8vIElm
IEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcg
aXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KLSAgICAvLyByZXN1
bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KLSAgICAvLyBJTlRfTUFYIGlzIGFsbW9zdCBj
b3JyZWN0LCBidXQgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBudW1iZXIgd3JhcHBpbmcgb2NjdXJp
bmcgbWFraW5nIHRoZSBmaWxsCi0gICAgLy8gcGF0dGVybiBpcyBub3QgZmlsbGVkIGNvcnJlY3Rs
eS4gCi0gICAgLy8gU28sIGp1c3QgcGljayBhIHJlYWxseSBsYXJnZSBudW1iZXIgdGhhdCB3b3Jr
cy4gCi0gICAgZmxvYXQgeFN0ZXAgPSBtX3JlcGVhdFggPyByZWN0LnNpemUud2lkdGggOiAoMTAw
MDAwMDAwLjBmKTsKLSAgICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHJlY3Quc2l6ZS5oZWln
aHQgOiAoMTAwMDAwMDAwLjBmKTsKLQotICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0
ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sgfTsKLSAgICByZWYoKTsKLSAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRoaXMsIHJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKLSAgICAgICAga0NHUGF0dGVyblRpbGlu
Z0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwotfQotCi0jZWxpZiBQ
TEFURk9STShDQUlSTykKLQotY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQ
YXR0ZXJuKGNvbnN0IGNhaXJvX21hdHJpeF90JiBtKQotewotICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICBzdXJmYWNl
ID0gbV9wbGF0Zm9ybUltYWdlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJ
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2Nh
Y2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1
cmZhY2Uoc3VyZmFjZSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZt
KTsKLSAgICBpZiAobV9yZXBlYXRYIHx8IG1fcmVwZWF0WSkKLSAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwotICAgIHJldHVybiBw
YXR0ZXJuOwogfQogCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKaW5kZXggNjg5MWRhNi4u
NzljNzg3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAorKysgYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCkBAIC0yNiw3NiArMjYsMzQgQEAKICNpZm5kZWYg
Q2FudmFzUGF0dGVybl9oCiAjZGVmaW5lIENhbnZhc1BhdHRlcm5faAogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0jaWYgUExBVEZP
Uk0oQ0cpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0j
aW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBDYWNoZWRJbWFnZTsKKyAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBTdHJpbmc7CiAK
ICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAgY2xhc3MgQ2FudmFzUGF0dGVy
biA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BhdHRlcm4+LCBwcml2YXRlIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKKyAgICBjbGFzcyBDYW52YXNQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8
Q2FudmFzUGF0dGVybj4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VS
ZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmLCBib29sJiByZXBlYXRYLCBib29sJiByZXBlYXRZ
LCBFeGNlcHRpb25Db2RlJik7CiAKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJl
cGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQ
YXR0ZXJuKHN1cmZhY2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVh
dGUoQ2FjaGVkSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3Jl
YXRlKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2lu
Q2xlYW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
UGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAg
fQotICAgICAgICB2aXJ0dWFsIH5DYW52YXNQYXR0ZXJuKCk7Ci0KLSNpZiBQTEFURk9STShDRykK
LSAgICAgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybUltYWdlLmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV90KiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdl
OyB9Ci0jZW5kaWYKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHUGF0
dGVyblJlZiBjcmVhdGVQYXR0ZXJuKGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVQYXR0ZXJuKGNv
bnN0IGNhaXJvX21hdHJpeF90Jik7Ci0jZW5kaWYKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFBh
dHRlcm4mIHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRlcm47IH0KIAogICAgICAgICBib29sIG9y
aWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0
ZToKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgQ2FudmFzUGF0dGVybihDR0ltYWdlUmVmLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZWxpZiBQTEFU
Rk9STShDQUlSTykKLSAgICAgICAgQ2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZW5kaWYKLSAgICAg
ICAgQ2FudmFzUGF0dGVybihDYWNoZWRJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZ
LCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9wbGF0Zm9ybUltYWdl
OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogY29uc3Qg
bV9wbGF0Zm9ybUltYWdlOwotI2VuZGlmCi0gICAgICAgIENhY2hlZEltYWdlKiBjb25zdCBtX2Nh
Y2hlZEltYWdlOwotICAgICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgY29uc3Qg
Ym9vbCBtX3JlcGVhdFk7CisgICAgICAgIFBhdHRlcm4gbV9wYXR0ZXJuOwogICAgICAgICBib29s
IG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBlN2I2YjBkLi5lMWQzNTJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTEyMSwxNCArMTEyMSwxOSBAQCBQYXNzUmVmUHRy
PENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihI
VE1MSW1hZ2VFbGVtZQogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUocmVw
ZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSB0cnVlOwotICAgIGlmIChD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAg
ICBLVVJMIHVybChjYWNoZWRJbWFnZS0+dXJsKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKLSAgICAgICAgb3Jp
Z2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKG9yaWdpbi5nZXQoKSk7CisKKyAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgpKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGltYWdlLT5jYWNoZWRJbWFnZSgpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOworCisg
ICAgS1VSTCB1cmwoY2FjaGVkSW1hZ2UtPnVybCgpKTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBib29sIG9yaWdp
bkNsZWFuID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
cyhvcmlnaW4uZ2V0KCkpOworICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FjaGVk
SW1hZ2UtPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKIH0KIAogUGFz
c1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBh
dHRlcm4oSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywKQEAgLTExMzksMjMgKzExNDQsNyBAQCBQ
YXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRl
UGF0dGVybihIVE1MQ2FudmFzRWxlbQogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlv
blR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybiAwOwotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZv
cm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgY2FudmFzLT5jcmVhdGVQbGF0
Zm9ybUltYWdlKCkpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UuZ2V0KCksIHJlcGVhdFgsIHJlcGVhdFks
IGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKTsKLSAg
ICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiBwYXR0ZXJuID0gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKHN1cmZhY2UsIHJlcGVhdFgsIHJl
cGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KHN1cmZhY2UpOwotICAgIHJldHVybiBwYXR0ZXJuLnJlbGVhc2UoKTsKLSNlbHNlCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgorICAgIHJldHVybiBDYW52YXNQ
YXR0ZXJuOjpjcmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0
WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExNzgsNDcgKzExNjcsMjIg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgY2hl
Y2sgYmUgbW92ZWQgaW50byBHcmFwaGljc0NvbnRleHQ/IG9yIHJlbW92ZWQ/CiAjaWYgUExBVEZP
Uk0oQ0cpCiAgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxyZWFk
eSBzZXQuCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybgot
ICAgICAgICAgICAgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNmb3JtKG0sIHN0YXRl
KCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pKQorICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0gPSBjLT5nZXRDVE0oKTsKKyAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJu
ICYmIGN0bSA9PSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQogICAgICAg
ICByZXR1cm47CisjZW5kaWYKIAogICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgp
Lm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVh
dGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
UGF0dGVybigwKTsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNwYWNlKGMtPnBsYXRmb3Jt
Q29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVy
blNwYWNlKTsKLQotICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBDR0Nv
bnRleHRTZXRTdHJva2VQYXR0ZXJuKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybVBhdHRl
cm4sICZwYXR0ZXJuQWxwaGEpOwotICAgIENHUGF0dGVyblJlbGVhc2UocGxhdGZvcm1QYXR0ZXJu
KTsKLQotICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBtOwotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbGlmIFBMQVRGT1JNKENB
SVJPKQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUt
PnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNh
aXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fbWF0cml4X3QgbTsK
LSAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7Ci0KLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBs
YXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0
Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKKyAgICBjLT5hcHBseVN0cm9rZVBhdHRlcm4o
cGF0dGVybi0+cGF0dGVybigpKTsKIAotICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBsYXRmb3Jt
UGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3JtUGF0dGVybik7Cisj
aWYgUExBVEZPUk0oQ0cpCisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9y
bSA9IGN0bTsKICNlbmRpZgogICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRy
dWU7CiB9CkBAIC0xMjI5LDQ3ICsxMTkzLDIyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBjaGVjayBiZSBtb3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4
dD8gb3IgcmVtb3ZlZD8KICNpZiBQTEFURk9STShDRykKICAgICAvLyBDaGVjayBmb3IgY2FzZSB3
aGVyZSB0aGUgcGF0dGVybiBpcyBhbHJlYWR5IHNldC4KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBt
ID0gQ0dDb250ZXh0R2V0Q1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUo
KS5tX2FwcGxpZWRGaWxsUGF0dGVybgotICAgICAgICAgICAgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1F
cXVhbFRvVHJhbnNmb3JtKG0sIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCku
bV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCisgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bSA9IGMtPmdldENUTSgpOworICAgIGlmIChzdGF0ZSgpLm1fYXBwbGllZEZpbGxQ
YXR0ZXJuICYmIGN0bSA9PSBzdGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSkKICAg
ICAgICAgcmV0dXJuOworI2VuZGlmCiAKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJu
ID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIHBhdHRlcm5TcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3Bh
Y2UoYy0+cGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7Ci0gICAgQ0dDb2xvclNwYWNl
UmVsZWFzZShwYXR0ZXJuU3BhY2UpOwotCi0gICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEg
PSAxOwotICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBw
bGF0Zm9ybVBhdHRlcm4sICZwYXR0ZXJuQWxwaGEpOwotICAgIENHUGF0dGVyblJlbGVhc2UocGxh
dGZvcm1QYXR0ZXJuKTsKLQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3Jt
ID0gbTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpOwogICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWlyb19tYXRy
aXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKKyAgICBjLT5hcHBseUZpbGxQ
YXR0ZXJuKHBhdHRlcm4tPnBhdHRlcm4oKSk7CiAKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBsYXRm
b3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0Zm9y
bVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBs
YXRmb3JtUGF0dGVybik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3JtUGF0dGVy
bik7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0gPSBjdG07CiAjZW5kaWYKICAgICBzdGF0ZSgpLm1fYXBwbGllZEZpbGxQYXR0ZXJuID0g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCA0MDc3
MzQ0Li4xNjhiNzMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBA
IC0xOTUsOCArMTk1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgYm9vbCBt
X2FwcGxpZWRGaWxsUGF0dGVybjsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5z
Zm9ybTsKICNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG1f
c3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOworICAgICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybTsKICNlbmRpZgogICAgICAgICB9Owog
ICAgICAgICBQYXRoIG1fcGF0aDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHls
ZS5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCmluZGV4IGJlNTAxM2EuLjBlMmVk
OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0NhbnZhc1N0eWxlLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCisjaWYgUExBVEZP
Uk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlmCisKICNp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRQnJ1c2g+CkBA
IC02MCwxMiArNjQsMTYgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZl
bCkKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGNvbnN0IFN0cmluZyYgY29sb3IsIGZs
b2F0IGFscGhhKQotICAgIDogbV90eXBlKENvbG9yU3RyaW5nV2l0aEFscGhhKSwgbV9jb2xvcihj
b2xvciksIG1fYWxwaGEoYWxwaGEpCisgICAgOiBtX3R5cGUoQ29sb3JTdHJpbmdXaXRoQWxwaGEp
CisgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICwgbV9hbHBoYShhbHBoYSkKIHsKIH0KIAogQ2Fu
dmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0gICAg
OiBtX3R5cGUoR3JheUxldmVsKSwgbV9hbHBoYShhbHBoYSksIG1fZ3JheUxldmVsKGdyYXlMZXZl
bCkKKyAgICA6IG1fdHlwZShHcmF5TGV2ZWwpCisgICAgLCBtX2FscGhhKGFscGhhKQorICAgICwg
bV9ncmF5TGV2ZWwoZ3JheUxldmVsKQogewogfQogCkBAIC04MCwxMDQgKzg4LDQ3IEBAIENhbnZh
c1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNH
cmFkaWVudD4gZ3JhZGllbnQpCi0gICAgOiBtX3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENv
bG9yU3RyaW5nKSwgbV9ncmFkaWVudChncmFkaWVudCkKKyAgICA6IG1fdHlwZShncmFkaWVudCA/
IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpCisgICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQogewog
fQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBw
YXR0ZXJuKQotICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRlcm4gOiBDb2xvclN0cmlu
ZyksIG1fcGF0dGVybihwYXR0ZXJuKQorICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRl
cm4gOiBDb2xvclN0cmluZykKKyAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQogewogfQogCitzdGF0
aWMgaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBSR0JBMzIgcmdiT25seSA9IGNvbG9yICYgMHgwMEZG
RkZGRjsKKyAgICBSR0JBMzIgcmdiYSA9IHJnYk9ubHkgfCBzdGQ6Om1heChzdGF0aWNfY2FzdDxp
bnQ+KG92ZXJyaWRlQWxwaGEgKiAyNTUpLCAwKSA8PCAyNDsKKyAgICByZXR1cm4gcmdiYTsKK30K
Kwogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3Qq
IGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0jZW5kaWYKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7CiAgICAgICAgICAgICBSR0JBMzIg
Y29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAgICAgICBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tl
Q29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xv
ciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgp
ICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigp
OwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcigoUUNvbG9yKFFSZ2IoY29sb3IpKSkp
OwotICAgICAgICAgICAgcC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgICAgICAvLyBGSVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBi
ZSBkZWFsdCB3aXRoIHNlcGFyYXRlbHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfcmdi
YShjciwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAot
ICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAg
ICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9y
ID4+IDI0KSAmIDB4RkYpIC8gMjU1LjBmKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDb2xvclN0cmluZ1dpdGhBbHBoYTogewogICAgICAgICAgICAgUkdCQTMyIGNv
bG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawogICAgICAgICAgICAgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQ
SS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNv
bG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBm
LAotICAgICAgICAgICAgICAgIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAg
ICAgICBRUGVuIGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHIg
PSBRQ29sb3IoUVJnYihjb2xvcikpOwotICAgICAgICAgICAgY2xyLnNldEFscGhhRihtX2FscGhh
KTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAt
PnNldFBlbihjdXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAg
Ly8gRklYTUU6IGZpbGwgYW5kIHN0cm9rZSBjb2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBh
cmF0ZWx5Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAo
KGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYg
MHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAv
IDI1NS4wZik7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNv
bG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3JheUxldmVsOiB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ry
b2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fZ3JheUxldmVsLCBtX2FscGhh
KTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUUNvbG9yIGNscjsKLSAgICAgICAg
ICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgY2xyLnNldFJnYkYo
bV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0gICAgICAg
ICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0gICAgICAgICAgICBwLT5zZXRQZW4oY3Vy
cmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiYShjciwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9h
bHBoYSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9y
KG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUkdCQTogewotICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGlj
c0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCU3Ryb2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fcmVkLCBtX2dyZWVu
LCBtX2JsdWUsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRUGVu
IGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAg
ICAgICBjbHIuc2V0UmdiRihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSAgICAg
ICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihj
dXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLy8gRklYTUU6
IGZpbGwgYW5kIHN0cm9rZSBjb2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5Ci0g
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIG1fcmVkLCBtX2dyZWVuLCBtX2Js
dWUsIG1fYWxwaGEpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihDb2xvcihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENNWUtBOiB7CkBAIC0yMDgsNzUgKzE1OSwy
NSBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseUZpbGxDb2xvcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbmRpZgogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
ICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKLSAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8v
IGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKLSAgICAgICAgICAgIENTU1BhcnNlcjo6cGFy
c2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0
aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICAgICAgICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAg
ICAgICAgUUNvbG9yIGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2IoUVJnYihjb2xvcikpOwot
ICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9yKGNscik7Ci0gICAgICAgICAgICBwLT5z
ZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisgICAgICAgICAgICBSR0JBMzIgcmdiYSA9
IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKKyAgICAgICAgICAgIENTU1BhcnNl
cjo6cGFyc2VDb2xvcihyZ2JhLCBtX2NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihyZ2JhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7
IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAgICAgICAgICAgIENTU1BhcnNlcjo6
cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhp
cyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYg
UExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAw
eEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAy
NTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAg
ICAgICAgICAgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFCcnVz
aCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAgICAgUUNvbG9yIGNscjsKLSAg
ICAgICAgICAgIGNsci5zZXRSZ2IoUVJnYihjb2xvcikpOwotICAgICAgICAgICAgY2xyLnNldEFs
cGhhRihtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwot
ICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1f
YWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3Jh
eUxldmVsOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3Jt
LWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgICAgICBDR0NvbnRleHRTZXRHcmF5RmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAg
ICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAgICAgUUNvbG9y
IGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwg
bV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9y
KGNscik7Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisg
ICAgICAgIGNhc2UgR3JheUxldmVsOgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUkdCQTogewotICAg
ICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX3JlZCwgbV9n
cmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAg
UUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAgICBRQ29sb3IgY2xy
OwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBo
YSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAg
IHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5kaWYKKyAgICAgICAgY2FzZSBSR0JBOgor
ICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fcmVkLCBtX2dyZWVuLCBt
X2JsdWUsIG1fYWxwaGEpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ01ZS0E6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxh
dGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KICNpZiBQTEFURk9STShDRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDkwN2NjY2MuLjBkNTQ1MTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMjc1LDQ4ICsyNzUsNCBAQCBJbWFnZUJ1ZmZl
ciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZlcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIuZ2V0KCk7CiB9CiAKLSNpZiBQTEFURk9STShDRykKLQotQ0dJbWFnZVJlZiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHRSZWYpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dFJlZik7Ci0KLSAgICByZXR1cm4gQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dFJlZik7Ci19Ci0KLSNlbGlmIFBMQVRGT1JN
KFFUKQotCi1RUGl4bWFwIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybiBRUGl4bWFw
KCk7Ci0gICAgcmV0dXJuICptX2ltYWdlQnVmZmVyLT5waXhtYXAoKTsKLX0KLQotI2VsaWYgUExB
VEZPUk0oQ0FJUk8pCi0KLWNhaXJvX3N1cmZhY2VfdCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAotewotICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBOb3RlIHRoYXQgdW5saWtlIENHLCBvdXIgcmV0dXJuZWQg
aW1hZ2UgaXMgbm90IGEgY29weSBvcgotICAgIC8vIGNvcHktb24td3JpdGUsIGJ1dCB0aGUgb3Jp
Z2luYWwuIFRoaXMgaXMgZmluZSwgc2luY2UgaXQgaXMgb25seQotICAgIC8vIGV2ZXIgdXNlZCBh
cyBhIHNvdXJjZS4KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9pbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpKTsKLSAgICBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX2ltYWdlQnVmZmVyLT5zdXJm
YWNlKCkpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5zdXJmYWNlKCk7Ci19Ci0KLSNlbmRp
ZgotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGEwYjdjYzUuLmExMTgzNjQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0zMCwxOSArMzAsNiBAQAogI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCi0jaWYgUExBVEZPUk0oQ0cpCi0v
LyBGSVhNRTogQ0ctc3BlY2lmaWMgcGFydHMgbmVlZCB0byBtb3ZlIHRvIHRoZSBwbGF0Zm9ybSBk
aXJlY3RvcnkuCi10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKLXR5cGVk
ZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7Ci0jZWxpZiBQTEFURk9STShRVCkKLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUVBpeG1hcDsKLWNsYXNzIFFQYWludGVyOwotUVRfRU5EX05B
TUVTUEFDRQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3Vy
ZmFjZSBjYWlyb19zdXJmYWNlX3Q7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CkBAIC0xMDUsMTUgKzkyLDggQEAgcHVibGlj
OgogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OwogCi0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OyAKLSNpZiBQTEFURk9STShDRykKLSAgICBDR0lt
YWdlUmVmIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKFFUKQot
ICAgIFFQaXhtYXAgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0o
Q0FJUk8pCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7
Ci0jZW5kaWYKLSAgICAKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7CisKICAgICBJ
bnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
OwogICAgIEludFBvaW50IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRQb2ludCYp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwIGIvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDM0YTA2NWIuLjJjN2Q0YzMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAorKysgYi9XZWJDb3JlL2xvYWRl
ci9DYWNoZWRJbWFnZS5jcHAKQEAgLTQ4LDIyICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBTdHJpbmcmIHVybCkKICAgICA6IENh
Y2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoMCkKIHsKLSAg
ICBtX2ltYWdlID0gMDsKICAgICBtX3N0YXR1cyA9IFVua25vd247CiB9CiAKIENhY2hlZEltYWdl
OjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmco
KSwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCiB7Ci0gICAgbV9pbWFnZSA9
IGltYWdlOwogICAgIG1fc3RhdHVzID0gQ2FjaGVkOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwog
fQogCiBDYWNoZWRJbWFnZTo6fkNhY2hlZEltYWdlKCkKIHsKLSAgICBkZWxldGUgbV9pbWFnZTsK
IH0KICAgICAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCkBA
IC05MywxNiArOTIsMTYgQEAgdm9pZCBDYWNoZWRJbWFnZTo6YWxsUmVmZXJlbmNlc1JlbW92ZWQo
KQogCiBzdGF0aWMgSW1hZ2UqIGJyb2tlbkltYWdlKCkKIHsKLSAgICBzdGF0aWMgSW1hZ2UqIGJy
b2tlbkltYWdlOworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IGJyb2tlbkltYWdlOwogICAgIGlm
ICghYnJva2VuSW1hZ2UpCiAgICAgICAgIGJyb2tlbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJtaXNzaW5nSW1hZ2UiKTsKLSAgICByZXR1cm4gYnJva2VuSW1hZ2U7CisgICAg
cmV0dXJuIGJyb2tlbkltYWdlLmdldCgpOwogfQogCiBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgp
CiB7Ci0gICAgc3RhdGljIEJpdG1hcEltYWdlIG51bGxJbWFnZTsKLSAgICByZXR1cm4gJm51bGxJ
bWFnZTsKKyAgICBzdGF0aWMgUmVmUHRyPEJpdG1hcEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKIH0KIAogSW1hZ2Uq
IENhY2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CkBAIC0xMTEsNyArMTEwLDcgQEAgSW1hZ2UqIENh
Y2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgpOwog
CiAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlOworICAgICAgICByZXR1
cm4gbV9pbWFnZS5nZXQoKTsKIAogICAgIHJldHVybiBudWxsSW1hZ2UoKTsKIH0KQEAgLTE5NSwx
NCArMTk0LDEzIEBAIEludFJlY3QgQ2FjaGVkSW1hZ2U6OmltYWdlUmVjdChmbG9hdCBtdWx0aXBs
aWVyKSBjb25zdAogdm9pZCBDYWNoZWRJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJzKCkKIHsKICAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hl
ZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0KCkpCisgICAgd2hpbGUgKENhY2hlZFJlc291cmNl
Q2xpZW50KiBjID0gdy5uZXh0KCkpCiAgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0aGlzKTsKIH0K
IAogdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogewogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
OwotICAgIGRlbGV0ZSBtX2ltYWdlOwogICAgIG1faW1hZ2UgPSAwOwogICAgIHNldEVuY29kZWRT
aXplKDApOwogfQpAQCAtMjE0LDE3ICsyMTIsMTcgQEAgaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6
OmNyZWF0ZUltYWdlKCkKICAgICAgICAgcmV0dXJuOwogI2lmIFBMQVRGT1JNKENHKQogICAgIGlm
IChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3BkZiIpIHsKLSAgICAgICAg
bV9pbWFnZSA9IG5ldyBQREZEb2N1bWVudEltYWdlOworICAgICAgICBtX2ltYWdlID0gUERGRG9j
dW1lbnRJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKICNp
ZiBFTkFCTEUoU1ZHX0FTX0lNQUdFKQogICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0g
ImltYWdlL3N2Zyt4bWwiKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBuZXcgU1ZHSW1hZ2UodGhpcyk7
CisgICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgbV9pbWFnZSA9IG5ldyBCaXRtYXBJbWFnZSh0aGlzKTsK
KyAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKIH0KIAogdm9pZCBDYWNo
ZWRJbWFnZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oIGIvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAppbmRleCAwYTNkMjQ4Li4yMTNjOWYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmgKQEAgLTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUlt
YWdlKCk7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoKTsKIAotICAgIEltYWdlKiBtX2ltYWdl
OworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAppbmRleCBhNmI0ZGUwLi4zYTkwODUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zOTk5
LDcgKzM5OTksMTEgQEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0
ZUhpc3RvcnlJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiAgICAgaWYgKG9yaWdpbmFsVVJMLmlzRW1w
dHkoKSkKICAgICAgICAgb3JpZ2luYWxVUkwgPSBibGFua1VSTCgpOwogICAgIAotICAgIFJlZlB0
cjxIaXN0b3J5SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50
cmVlKCktPm5hbWUoKSwgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSA/IG1fZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCktPnRyZWUoKS0+bmFtZSgpIDogIiIsIGRvY0xvYWRlciA/IGRvY0xvYWRlci0+
dGl0bGUoKSA6ICIiKTsKKyAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCkt
PnBhcmVudCgpOworICAgIFN0cmluZyBwYXJlbnQgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1l
LT50cmVlKCktPm5hbWUoKSA6ICIiOworICAgIFN0cmluZyB0aXRsZSA9IGRvY0xvYWRlciA/IGRv
Y0xvYWRlci0+dGl0bGUoKSA6ICIiOworCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0g
SGlzdG9yeUl0ZW06OmNyZWF0ZSh1cmwsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBwYXJlbnQs
IHRpdGxlKTsKICAgICBpdGVtLT5zZXRPcmlnaW5hbFVSTFN0cmluZyhvcmlnaW5hbFVSTC5zdHJp
bmcoKSk7CiAgICAgCiAgICAgLy8gU2F2ZSBmb3JtIHN0YXRlIGlmIHRoaXMgaXMgYSBQT1NUCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwIGIvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAppbmRleCA4YjNkNWY5Li5mMDcwY2M5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvblJlY29yZC5jcHAKQEAgLTY2LDEyICs2NiwxMiBAQCB2b2lkIEljb25SZWNv
cmQ6OnNldEltYWdlRGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKIHsKICAgICAv
LyBJdCdzIG9rYXkgdG8gZGVsZXRlIHRoZSByYXcgaW1hZ2UgaGVyZS4gQW55IGV4aXN0aW5nIGNs
aWVudHMgdXNpbmcgdGhpcyBpY29uIHdpbGwgYmUKICAgICAvLyBtYW5hZ2luZyBhbiBpbWFnZSB0
aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBjb3B5IG9mIHRoaXMgcmF3IGltYWdlIGRhdGEuCi0gICAg
bV9pbWFnZS5zZXQobmV3IEJpdG1hcEltYWdlKCkpOworICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CiAKICAgICAvLyBDb3B5IHRoZSBwcm92aWRlZCBkYXRhIGludG8gdGhlIGJ1
ZmZlciBvZiB0aGUgbmV3IEltYWdlIG9iamVjdC4KICAgICBpZiAoIW1faW1hZ2UtPnNldERhdGEo
ZGF0YSwgdHJ1ZSkpIHsKICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIk1hbnVhbCBpbWFnZSBk
YXRhIGZvciBpY29uVVJMICclcycgRkFJTEVEIC0gaXQgd2FzIHByb2JhYmx5IGludmFsaWQgaW1h
Z2UgZGF0YSIsIG1faWNvblVSTC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIG1faW1hZ2Uuc2V0
KDApOworICAgICAgICBtX2ltYWdlLmNsZWFyKCk7CiAgICAgfQogICAgIAogICAgIG1fZGF0YVNl
dCA9IHRydWU7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgSWNvblJlY29yZDo6bG9hZEltYWdlRnJv
bVJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNlKQogICAgIGlmICghcmVzb3VyY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgbV9pbWFnZS5zZXQoSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKHJlc291cmNlKSk7CisgICAgbV9pbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgbV9kYXRhU2V0ID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmggYi9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25SZWNvcmQuaAppbmRleCA2MWQzMWZhLi5hYWVhNzg3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAorKysgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25S
ZWNvcmQuaApAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1faWNvblVS
TDsKICAgICB0aW1lX3QgbV9zdGFtcDsKLSAgICBPd25QdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAg
UmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JldGFp
bmluZ1BhZ2VVUkxzOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaAppbmRleCA3Y2FmMzlmLi5lYzM5NDgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCkBAIC05MSwxMiArOTEsMTQgQEAgY2xhc3MgQml0bWFwSW1hZ2UgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgotI2lmIFBMQVRGT1JNKENHKQotICAgIEJp
dG1hcEltYWdlKENHSW1hZ2VSZWYsIEltYWdlT2JzZXJ2ZXIqID0gMCk7Ci0jZWxpZiBQTEFURk9S
TShDQUlSTykKLSAgICBCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3QqLCBJbWFnZU9ic2VydmVy
KiA9IDApOwotI2VuZGlmCi0gICAgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gY3JlYXRlKE5hdGl2ZUltYWdlUHRyIG5h
dGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG5hdGl2ZUltYWdlLCBvYnNlcnZlcikpOwor
ICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gY3JlYXRlKEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Qml0bWFwSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICB9CiAgICAgfkJpdG1hcEltYWdlKCk7CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkBAIC0xMzUsNiArMTM3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBmcmFtZUF0SW5kZXgoY3VycmVu
dEZyYW1lKCkpOyB9CiAKIHByb3RlY3RlZDoKKyAgICBCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0
ciwgSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAgICBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9
IDApOworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRj
aGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNTJkMmJkNy4uZTY2NGRhMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTUxLDYgKzUxLDE2IEBAIFJHQkEzMiBtYWtl
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gbWF4KDAsIG1pbihh
LCAyNTUpKSA8PCAyNCB8IG1heCgwLCBtaW4ociwgMjU1KSkgPDwgMTYgfCBtYXgoMCwgbWluKGcs
IDI1NSkpIDw8IDggfCBtYXgoMCwgbWluKGIsIDI1NSkpOwogfQogCitzdGF0aWMgaW5saW5lIGlu
dCBmbG9hdFRvU2hvcnQoZmxvYXQgZikKK3sKKyAgICByZXR1cm4gbWF4KDAsIG1pbihzdGF0aWNf
Y2FzdDxpbnQ+KDI1NSAqIGYpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBKGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIGZsb2F0VG9TaG9ydChh
KSA8PCAyNCB8IGZsb2F0VG9TaG9ydChyKSA8PCAxNiB8IGZsb2F0VG9TaG9ydChnKSA8PCA4IHwg
ZmxvYXRUb1Nob3J0KGIpOworfQorCiBzdGF0aWMgZG91YmxlIGNhbGNIdWUoZG91YmxlIHRlbXAx
LCBkb3VibGUgdGVtcDIsIGRvdWJsZSBodWVWYWwpCiB7CiAgICAgaWYgKGh1ZVZhbCA8IDAuMCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCAxNjAzYzFhLi4yMDliYzRhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC01Niw2ICs1Niw3IEBAIHR5cGVkZWYgdW5zaWduZWQg
UkdCQTMyOyAgICAgICAgLy8gUkdCQSBxdWFkcnVwbGV0CiAKIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwogUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1JHQkEzMiBtYWtlUkdCQShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBh
KTsKIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGRvdWJsZSBoLCBkb3VibGUgcywgZG91YmxlIGws
IGRvdWJsZSBhKTsKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKQEAgLTY2LDYgKzY3LDcgQEAgcHVibGljOgogICAgIENvbG9yKFJHQkEzMiBjb2wp
IDogbV9jb2xvcihjb2wpLCBtX3ZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQg
ZywgaW50IGIpIDogbV9jb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgbV92YWxpZCh0cnVlKSB7IH0K
ICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgOiBtX2NvbG9yKG1ha2VSR0JB
KHIsIGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICBDb2xvcihmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1fY29sb3IobWFrZVJHQkEociwgZywgYiwgYSkpLCBt
X3ZhbGlkKHRydWUpIHsgfQogICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwogICAg
IGV4cGxpY2l0IENvbG9yKGNvbnN0IGNoYXIqKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAppbmRleCBkMzgyZjA2Li5iMzIxYjhkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCkBAIC01MSw2ICs1MSwxMCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCisgICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29k
ZWQgZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggNzUwYzU4Yy4uYjljNzFmOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAg
dm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBDb2xvciYgY29s
b3IpCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21w
YXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCAmYSwgY29uc3QgR3JhZGllbnQ6OkNv
bG9yU3RvcCAmYikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGll
bnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKIHsKICAgICBy
ZXR1cm4gYS5zdG9wIDwgYi5zdG9wOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFkaWVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5o
CmluZGV4IDcwMTU5YjAuLjBiMGQ4NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNzksMTEgKzc4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0U3RvcHNTb3J0ZWQoYm9vbCBzKSB7IG1f
c3RvcHNTb3J0ZWQgPSBzOyB9CiAKLSNpZiBQTEFURk9STShDRykgfHwgUExBVEZPUk0oQ0FJUk8p
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYpOwotI2Vsc2UKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0jZW5kaWYKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gMDsg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMTAx
YWJmOC4uZTk0ZDNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC05Myw2ICs5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBhdGg7CisgICAgY2xhc3Mg
UGF0dGVybjsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAgICAgLy8gVGhlc2UgYml0cyBjYW4gYmUg
T1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBvc3NpYmxlIHRleHQgZHJhd2luZyBtb2Rl
cy4KQEAgLTEzNCw3ICsxMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIENv
bG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotICAgICAgICAKKworICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihjb25z
dCBQYXR0ZXJuJik7CisgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJu
Jik7CisKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggMWExZTNiMi4uY2E2OTU0
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDksNiArNTAs
MTIgQEAgSW1hZ2U6On5JbWFnZSgpCiB7CiB9CiAKK0ltYWdlKiBJbWFnZTo6bnVsbEltYWdlKCkK
K3sKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKCk7CisgICAgcmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKK30KKwogYm9vbCBJbWFnZTo6c3Vw
cG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUodHlwZSk7IApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCmluZGV4IDNjNzM1ZDYuLmQ2NWU1MjYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKQEAgLTY5LDE4ICs2OSwxOSBAQCBjbGFzcyBTdHJpbmc7CiAvLyBUaGlzIGNs
YXNzIGdldHMgbm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29k
ZWQgZnJhbWVzIGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJ
bWFnZU9ic2VydmVyOwogCi1jbGFzcyBJbWFnZSA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIEltYWdl
IDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVk
SW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSAgICBJ
bWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCi0g
ICAgc3RhdGljIEltYWdlKiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIqID0gMCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0
IGNoYXIqIG5hbWUpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
KTsgCiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgCisKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwogICAgIGJvb2wg
aXNOdWxsKCkgY29uc3Q7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFn
ZSByaWdodCBub3cKQEAgLTk2LDExICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2V0RGF0
YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwog
ICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICAKLSAgICAvLyBGSVhNRTogUERGL1NWRyB3aWxsIGJlIHVuZGVycmVw
b3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlIHRvIHBydW5lIGJlY2F1c2Ug
dGhlc2UgZnVuY3Rpb25zIGFyZSBub3QKLSAgICAvLyBpbXBsZW1lbnRlZCB5ZXQgZm9yIHRob3Nl
IGltYWdlIHR5cGVzLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBp
bmNyZW1lbnRhbCA9IGZhbHNlKSB7fTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXpl
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVk
RGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGRlY29kZWRTaXplKCkgY29uc3QgPSAwOwogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgeyBy
ZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAKQEAgLTEzNyw5ICsxMzYsMTAgQEAgcHVibGljOgogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKKyAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOworCiAgICAg
c3RhdGljIHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKTsKIAotcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0
b3IpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5k
ZXggZTY1MmUyYS4uZTVkYTNlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaApAQCAtMzMsMjUgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPG1lbW9yeT4KIAotI2lmICFQTEFURk9STShDRykKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykKLXR5cGVkZWYgc3RydWN0IENHSW1h
Z2UqIENHSW1hZ2VSZWY7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQ
aXhtYXA+Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQYWludGVyOwotUVRfRU5EX05BTUVT
UEFDRQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDQUlSTykKLXR5cGVkZWYgc3RydWN0IF9jYWly
b19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC02OSwxOSArNTAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAotI2lmIFBM
QVRGT1JNKENHKQotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UoKSBjb25zdCB7IHJldHVybiBp
bWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICBR
UGl4bWFwKiBwaXhtYXAoKSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
Q0cpIHx8IFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkKICAgICAgICAgSW1hZ2UqIGlt
YWdlKCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNsZWFySW1h
Z2UoKSB7IG1faW1hZ2UuY2xlYXIoKTsgfQogCkBAIC05MCwyMyArNTksMjEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkgY29uc3Q7CiAKLSAgICAgICAgCi0KICAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBt
X2RhdGE7CiAgICAgICAgIEludFNpemUgbV9zaXplOwogCiAgICAgICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2U+IG1faW1h
Z2U7CisgICAgICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAogI2lmIFBM
QVRGT1JNKENHKQogICAgICAgICBJbWFnZUJ1ZmZlcih2b2lkKiBpbWFnZURhdGEsIGNvbnN0IElu
dFNpemUmLCBzdGQ6OmF1dG9fcHRyPEdyYXBoaWNzQ29udGV4dD4pOwogI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IFFQaXhtYXAgJnB4KTsKKyAgICAgICAgSW1h
Z2VCdWZmZXIoY29uc3QgUVBpeG1hcCYpOwogICAgICAgICBtdXRhYmxlIFFQaXhtYXAgbV9waXht
YXA7CiAgICAgICAgIG11dGFibGUgUVBhaW50ZXIqIG1fcGFpbnRlcjsKICNlbGlmIFBMQVRGT1JN
KENBSVJPKQotICAgICAgICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOwor
ICAgICAgICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqKTsKICAgICAgICAgbXV0YWJsZSBj
YWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKICNlbmRpZgogICAgIH07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXR0ZXJuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
MjA0YjliCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0
ZXJuLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJJbWFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhdHRlcm46OlBhdHRlcm4oSW1hZ2UqIGlt
YWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICA6IG1fdGlsZUltYWdlKGltYWdl
KQorICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCisgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKK3sK
K30KKworUGF0dGVybjo6flBhdHRlcm4oKQoreworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2MwNjQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGF0dGVy
bl9oCisjZGVmaW5lIFBhdHRlcm5faAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgUExBVEZPUk0oQ0cpCit0eXBlZGVmIHN0cnVj
dCBDR1BhdHRlcm4qIENHUGF0dGVyblJlZjsKK3R5cGVkZWYgQ0dQYXR0ZXJuUmVmIFBsYXRmb3Jt
UGF0dGVyblB0cjsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cit0
eXBlZGVmIGNhaXJvX3BhdHRlcm5fdCogUGxhdGZvcm1QYXR0ZXJuUHRyOworI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CisgICAgY2xhc3Mg
SW1hZ2U7CisKKyAgICBjbGFzcyBQYXR0ZXJuIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKKwor
ICAgICAgICB2aXJ0dWFsIH5QYXR0ZXJuKCk7CisgICAgICAgIAorICAgICAgICBJbWFnZSogdGls
ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlSW1hZ2UuZ2V0KCk7IH0KKworICAgICAgICBQ
bGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOworICAgICAgICBib29sIG1fcmVwZWF0WDsKKyAgICAg
ICAgYm9vbCBtX3JlcGVhdFk7CisgICAgfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAKaW5kZXggYjA3ZTJhNC4uYWM1MGEyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAg
LTQ5NSw2ICs0OTUsMjMgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogICAg
IHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54MCksIHN0YXRpY19jYXN0
PGludD4obWF0cml4LnkwKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9r
ZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBjYWlyb19wYXR0ZXJuX3Qq
IHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgp
KTsKKyAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fp
cm9fc2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuKTsKKyAgICBj
YWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAg
ICAvLyBUaGUgQ2Fpcm8gY29kZXBhdGggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgc2VwYXJhdGUg
c3Ryb2tlL2ZpbGw/CisgICAgLy8gVGhlIGNvZGUgSSByZWZhY3RvcmVkIHRvIGNyZWF0ZSB0aGVz
ZSBtZXRob2RzIHdhcyBpZGVudGljYWwgZm9yIENhaXJvCisgICAgYXBwbHlTdHJva2VQYXR0ZXJu
KHBhdHRlcm4pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBh
IG5vLW9wIGJ1dCBJJ20gbm90IHN1cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44NmU1MTNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKKworI2luY2x1ZGUgPGNhaXJv
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0
ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtKSBjb25zdAoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltYWdl
KCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3Bh
dHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0
X21hdHJpeChwYXR0ZXJuLCAmcGF0dGVyblRyYW5zZm9ybSk7CisgICAgaWYgKG1fcmVwZWF0WCB8
fCBtX3JlcGVhdFkpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBD
QUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICByZXR1cm4gcGF0dGVybjsKK30KKworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRl
eCA4NmIxYTlhLi4zODhjNGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNs
dWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5o
PgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkNvbnRleHQuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpAQCAtNDg5LDcgKzQ5MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVy
CiAgICAgCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShw
bGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZv
cm1Db250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VC
dWZmZXItPmNnSW1hZ2UoKSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRl
eHQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+
aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9y
bUNvbnRleHQoKSwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgLXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KQEAgLTg5
Miw2ICs4OTMsMzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdp
bmdNb2RlKGludCBtb2RlKQogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJl
ZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0o
KSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENH
Q29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDAp
OworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UocGxhdGZvcm1Db250ZXh0KCksIHBh
dHRlcm5TcGFjZSk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOworCisg
ICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOworICAgIENHQ29udGV4dFNldFN0cm9r
ZVBhdHRlcm4ocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBo
YSk7CisgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQor
eworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAg
IHJldHVybjsKKworICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKHBsYXRm
b3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0
dGVyblNwYWNlKTsKKworICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBD
R0NvbnRleHRTZXRGaWxsUGF0dGVybihwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJu
LCAmcGF0dGVybkFscGhhKTsKKyAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZGQ1MjE5Mi4u
NjIwNzRhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNv
bnN0CiAgICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAgICBDR0ltYWdlUmVmIGNnSW1h
Z2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKICAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4g
Q0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlLnNldChuZXcgQml0bWFwSW1h
Z2UoY2dJbWFnZSkpOworICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0lt
YWdlKTsKICAgICB9CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CkBAIC0xNTMsOSArMTUz
LDggQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBo
YTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0gICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwpAQCAtMjA1LDkgKzIwNCw4IEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uCiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgc3JjUm93
cyArPSBzcmNCeXRlc1BlclJvdzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmgKaW5kZXggY2FkZGMwNS4uOTkzZjQ0NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTM4LDE0ICszOCwy
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQREZEb2N1bWVudEltYWdlIDog
cHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdl
KTsKKyAgICAgICAgfQogICAgICAgICB+UERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICAKICAg
ICAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAor
ICAgICAgICAvLyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBz
aXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVz
ZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwog
ICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAg
ICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRD
dXJyZW50UGFnZShpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZjdhNjkKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlv
blNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNv
bnRleHQpCit7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gc3RhdGljX2Nhc3Q8SW1h
Z2UqPihpbmZvKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIGlmICghcGxhdGZvcm1JbWFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4
dCkucm91bmRUb0RldmljZVBpeGVscygKKyAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VH
ZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkp
OworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdlKTsK
K30KKworc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQorewor
ICAgIHN0YXRpY19jYXN0PEltYWdlKj4oaW5mbyktPmRlcmVmKCk7Cit9CisKK0NHUGF0dGVyblJl
ZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5y
ZWN0KCk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9y
bTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnNjYWxlKDEsIC0xKTsKKyAgICBwYXR0ZXJuVHJhbnNm
b3JtLnRyYW5zbGF0ZSgwLCAtdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgLy8gSWYgRkxUX01B
WCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBpcyByZW5k
ZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbworICAgIC8vIHJlc3VsdCBpbiBu
b3RoaW5nIGJlaW5nIHJlbmRlcmVkLgorICAgIC8vIElOVF9NQVggaXMgYWxtb3N0IGNvcnJlY3Qs
IGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBvY2N1cmluZyBtYWtp
bmcgdGhlIGZpbGwKKyAgICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29ycmVjdGx5LiAKKyAg
ICAvLyBTbywganVzdCBwaWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0IHdvcmtzLiAKKyAg
ICBmbG9hdCB4U3RlcCA9IG1fcmVwZWF0WCA/IHRpbGVSZWN0LndpZHRoKCkgOiAoMTAwMDAwMDAw
LjBmKTsKKyAgICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdodCgpIDog
KDEwMDAwMDAwMC4wZik7CisKKyAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIHRp
bGUgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKKyAg
ICB0aWxlSW1hZ2UoKS0+cmVmKCk7CisKKyAgICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0
dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxi
YWNrIH07CisgICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZSh0aWxlSW1hZ2UoKSwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKKyAgICAgICAga0NHUGF0dGVyblRpbGlu
Z0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmluZGV4IDgxNmY5Y2IuLmEwZDI1
N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC01Miwy
NCArNTIsMjIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCiAg
ICAgbV90aWZmUmVwID0gMDsKIH0KIAotSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZShjb25zdCBjaGFyICpuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgc3RhdGljIEJpdG1hcEltYWdlIG51
bGxJbWFnZTsKLSAgICAKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZv
ckNsYXNzOltXZWJDb3JlQnVuZGxlRmluZGVyIGNsYXNzXV07CiAgICAgTlNTdHJpbmcgKmltYWdl
UGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpuYW1lXSBvZlR5cGU6QCJ0aWZmIl07CiAgICAgTlNEYXRhICpuYW1lZEltYWdlRGF0YSA9
IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTppbWFnZVBhdGhdOwogICAgIGlmIChuYW1l
ZEltYWdlRGF0YSkgewotICAgICAgICBJbWFnZSogaW1hZ2UgPSBuZXcgQml0bWFwSW1hZ2U7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGltYWdlLT5zZXREYXRhKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShuYW1lZEltYWdlRGF0
YSksIHRydWUpOwotICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgICAgIHJldHVybiBpbWFnZS5y
ZWxlYXNlKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gV2UgaGF2ZSByZXBvcnRzIGluZGljYXRp
bmcgcmVzb3VyY2UgbG9hZHMgYXJlIGZhaWxpbmcsIGJ1dCB3ZSBkb24ndCB5ZXQga25vdyB0aGUg
cm9vdCBjYXVzZShzKS4KICAgICAvLyBUd28gdGhlb3JpZXMgYXJlIGJhZCBpbnN0YWxscyAoaW1h
Z2UgZmlsZXMgYXJlIG1pc3NpbmcpLCBhbmQgdG9vLW1hbnktb3Blbi1maWxlcy4KICAgICAvLyBT
ZWUgcmRhcjovLzU2MDczODEKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
Jm51bGxJbWFnZTsKKyAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogfQogCiBDRkRhdGFS
ZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKaW5kZXggN2UyYzdmYy4uOTRmY2VkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcApAQCAtNTQ2LDggKzU0Niw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmNhbGNQcmVmV2lkdGhz
KCkKIAogSW1hZ2UqIFJlbmRlckltYWdlOjpudWxsSW1hZ2UoKQogewotICAgIHN0YXRpYyBCaXRt
YXBJbWFnZSBzaGFyZWROdWxsSW1hZ2U7Ci0gICAgcmV0dXJuICZzaGFyZWROdWxsSW1hZ2U7Cisg
ICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGU0MGJlNGIuLjQxMmYyY2MgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MzAsMTEgKzE0MzAsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4
LCBpbnQgdHksIGNvbnMKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBQYWludCB0
aGUgcmVzaXplciBjb250cm9sLgotICAgICAgICBzdGF0aWMgSW1hZ2UqIHJlc2l6ZUNvcm5lcklt
YWdlOworICAgICAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKICAg
ICAgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKICAgICAgICAgICAgIHJlc2l6ZUNvcm5lcklt
YWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIp
OwogICAgICAgICBJbnRQb2ludCBpbWFnZVBvaW50KHNjcm9sbENvcm5lci5yaWdodCgpIC0gcmVz
aXplQ29ybmVySW1hZ2UtPndpZHRoKCksIHNjcm9sbENvcm5lci5ib3R0b20oKSAtIHJlc2l6ZUNv
cm5lckltYWdlLT5oZWlnaHQoKSk7Ci0gICAgICAgIHAtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJ
bWFnZSwgaW1hZ2VQb2ludCk7CisgICAgICAgIHAtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFn
ZS5nZXQoKSwgaW1hZ2VQb2ludCk7CiAKICAgICAgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCiAgICAgICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJv
dHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4
IDc4ODU2YzUuLmNjY2U3ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTE3NSwx
NiArMTc1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZW5kZXJTdWJ0cmVlVG9J
bWFnZShtX2ZyYW1lQ2FjaGUuZ2V0KCksIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKTsKICAg
ICB9Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+Y2dJbWFnZSgp
OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+cGl4bWFwKCk7
Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5zdXJmYWNl
KCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYK
KyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNl
aXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmggYi9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCmluZGV4IDNlNjdhN2MuLjAzYmI1MjAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKKysrIGIvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuaApAQCAtNDIsNyArNDIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIAogICAgIGNsYXNzIFNWR0ltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJbWFnZShvYnNlcnZlcikpOwor
ICAgICAgICB9CiAgICAgICAgIH5TVkdJbWFnZSgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTU0LDkgKzU3LDE1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdl
ZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICAgICAgLy8gRklYTUU6IFNWR0ltYWdlcyBh
cmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAgICAg
ICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRl
ZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNy
ZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgCiBwcml2YXRlOgor
ICAgICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5j
cHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAK
aW5kZXggMDdmZjQ3Yy4uNDE2ZDVmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcApAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMg
dm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY29udGV4dCwgMCwgcGF0dGVybkltYWdlLT5zaXplKCkuaGVpZ2h0KCkpOwogICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEuMGYsIC0xLjBmKTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHBhdHRlcm5JbWFnZS0+
c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+Y2dJbWFnZSgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHBhdHRlcm5JbWFnZS0+
c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1tIGIvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQppbmRleCA3ZmNiZmU2Li5lYzZiMzQzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1t
CisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0KQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIFNWR1Jlc291cmNlTWFza2VyOjphcHBseU1hc2soR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJvdQogICAgIENJQ29udGV4dCog
Y2lHcmF5c2NhbGVDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aENHQ29udGV4dDpncmF5
U2NhbGVDb250ZXh0IG9wdGlvbnM6bmlsXTsKIAogICAgIC8vIFRyYW5zZm9ybSBjb2xvcml6ZWQg
bWFzayB0byBncmF5IHNjYWxlCi0gICAgQ0lJbWFnZSogY29sb3JNYXNrID0gW0NJSW1hZ2UgaW1h
Z2VXaXRoQ0dJbWFnZTptX21hc2stPmNnSW1hZ2UoKV07CisgICAgQ0lJbWFnZSogY29sb3JNYXNr
ID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTptX21hc2stPmltYWdlKCktPmdldENHSW1hZ2VS
ZWYoKV07CiAgICAgaWYgKCFjb2xvck1hc2spCiAgICAgICAgIHJldHVybjsKICAgICBDSUltYWdl
KiBncmF5U2NhbGVNYXNrID0gdHJhbnNmb3JtSW1hZ2VJbnRvR3JheXNjYWxlTWFzayhjb2xvck1h
c2spOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22755</attachid>
            <date>2008-08-12 13:53:30 -0700</date>
            <delta_ts>2008-08-12 15:10:59 -0700</delta_ts>
            <desc>Fourth pass, fixing a bogus ASSERT, color float conversions, and more Cairo build issues.</desc>
            <filename>Fourth-pass-fixing-a-bogus-ASSERT-color-float-conversions-and-more-Cairo-build-issues..patch</filename>
            <type>text/plain</type>
            <size>78341</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YzZjZjM4YTk5OWQxNTA4OWVhODI1M2QxN2JmNDBhMmViOWU2NGRkNwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ODlmYjBkLi40MjZmNzUyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5OCw2ICsxODk4LDcg
QEAKIAkJQTgwOUYxNDgwQjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0
NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKIAkJ
QTgwOUYxQUEwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTgwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQlBODA5
RjFBQjBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE5MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9OworCQlBODBB
MzhGRTBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQ
YXR0ZXJuQ0cuY3BwICovOyB9OwogCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFs
dWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JBMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovOyB9OwogCQlB
ODBFNkNFNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUE4MEU2Q0U2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ByaW1pdGl2ZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTI2OTksNiArMjcwMCw4IEBACiAJCUE4RjQ2QjgxMENCMjBBOUQwMDNBOTY3
MCAvKiBET01TVkdTdHJpbmdMaXN0LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUQ3OUFEMjBBQ0ExN0VCMDBGMDJGQzUgLyog
RE9NU1ZHU3RyaW5nTGlzdC5oICovOyB9OwogCQlBOEY0RkI5NDBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAq
LzsgfTsKIAkJQThGNEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGNEZCOTUw
QzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgfTsKKwkJQThGQTZFNUUwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovOyB9OwogCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQy
RTkgLyogTWltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLzsgfTsK
IAkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMjBENzQ1RTA1MDA2NDQyRTkg
LyogTWltZVR5cGUuaCAqLzsgfTsKIAkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovOyB9OwpA
QCAtMzE2MCw3ICszMTYzLDYgQEAKIAkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9
OwotCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmggKi87IH07CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cu
Y3BwICovOyB9OwogCQlCMjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC02MzkwLDYgKzYzOTIs
NyBAQAogCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE4MEI3MzdG
QjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUHJpbWl0aXZlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5MjksNiArNjkzMiw4IEBACiAJCUE4RUE4MDA2
MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0
RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclN1cHBv
cnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOUM2RTRFMTBENzQ1
RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1pbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlD
NkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNaW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NTM5LDcgKzc1NDQsNiBAQAogCQlCMjc1MzUyQjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemVDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1
MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIwOTUsNyArMTIwOTksNiBAQAogCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8q
IEdyYWRpZW50Q0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFw
aGljc0NvbnRleHRDRy5jcHAgKi8sCi0JCQkJQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovLAogCQkJCUIyQTEwQjkzMEIzODE4RDcw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlQ0cuY3BwICovLApAQCAtMTIxMDUsNiArMTIxMDgsNyBAQAogCQkJCUIyNzUz
NTM1MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCUE4MEEzOEZEMEU1MEND
ODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjIxMyw2ICsxMjIxNyw4IEBACiAJCQkJQjIz
NTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCUE4MjRC
NDY0MEUyRUYyRUEwMDgxQTdCNyAvKiBUZXh0UnVuLmggKi8sCiAJCQkJRTRBRkNGQTQwREFGMjlB
MzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNG
NDkgLyogUGF0dGVybi5oICovLAorCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQyNzMsNyArMTQyNzksNiBAQAogCQkJCUIyQzNEQTcwMEQwMDZDRDYw
MEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBE
MDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjc1MzU1RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QUIwQTE1Njk3
ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcx
RDQ1RDBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMTUzODksNiArMTUzOTQsNyBAQAogCQkJCTMxQzBGRjRCMEU0Q0VGREQwMDdENkZFNSAv
KiBET01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RkE2RTVEMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1NDQzLDkgKzE1NDQ5
LDYgQEAKIAkJCXByb2R1Y3RSZWZHcm91cCA9IDAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQ
cm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CiAJCQlwcm9qZWN0Um9vdCA9ICIi
OwotCQkJcHJvamVjdFJvb3RzID0gKAotCQkJCSIiLAotCQkJKTsKIAkJCXRhcmdldHMgPSAoCiAJ
CQkJOTNGMTk4QTUwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmUgKi8sCiAJCQkJREQwNDFGQkUw
OUQ5RERCRTAwMTBBRjJBIC8qIERlcml2ZWQgU291cmNlcyAqLywKQEAgLTE3MTc1LDYgKzE3MTc4
LDggQEAKIAkJCQkzMUMwRkYzRjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEEwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGNEQw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAK
aW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25D
b250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0b25Db250
cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihidXR0b25I
ZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFnZS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJbWFnZT4g
YnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIp
OworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoYnV0dG9u
SW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGJ1
dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1dHRvbi5n
ZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRl
eCA3NjIwNzBjLi5lNjNlZGI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVy
bi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwxODkgKzI2
LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9
PSAicmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9
IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
dHlwZSA9PSAibm8tcmVwZWF0IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibm8tcmVwZWF0
IikgewogICAgICAgICByZXBlYXRYID0gZmFsc2U7CiAgICAgICAgIHJlcGVhdFkgPSBmYWxzZTsK
LSAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0eXBlID09
ICJyZXBlYXQteCIpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInJlcGVhdC14IikgewogICAg
ICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVwZWF0WSA9IGZhbHNlOwotICAgICAgICBl
YyA9IDA7CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInJlcGVhdC15
IikgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAicmVwZWF0LXkiKSB7CiAgICAgICAgIHJlcGVh
dFggPSBmYWxzZTsKICAgICAgICAgcmVwZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBlYyA9IFNZTlRBWF9FUlI7CiB9CiAKLSNpZiBQTEFU
Rk9STShDRykKLQotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihDR0ltYWdlUmVmIGltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1f
cGxhdGZvcm1JbWFnZShpbWFnZSkKLSAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKLSAgICAsIG1fcmVw
ZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNs
ZWFuKG9yaWdpbkNsZWFuKQotewotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykKLQotQ2FudmFz
UGF0dGVybjo6Q2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgIDogbV9wbGF0Zm9ybUlt
YWdlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpKQotICAgICwgbV9jYWNoZWRJbWFn
ZSgwKQotICAgICwgbV9yZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkK
LSAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2luQ2xlYW4pCi17Ci19Ci0KLSNlbmRpZgotCi1DYW52
YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSwgYm9vbCBy
ZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX2NhY2hlZElt
YWdlKGNhY2hlZEltYWdlKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICwgbV9wbGF0Zm9ybUlt
YWdlKDApCi0jZW5kaWYKLSAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBlYXRZ
KHJlcGVhdFkpCitDYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKEltYWdlKiBpbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCisgICAgOiBtX3BhdHRl
cm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpCiAgICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNs
ZWFuKQogewotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCh0aGlzKTsKLX0KLQotQ2FudmFzUGF0dGVybjo6fkNhbnZhc1BhdHRlcm4oKQotewotI2lm
IFBMQVRGT1JNKENBSVJPKQotICAgIGlmIChtX3BsYXRmb3JtSW1hZ2UpCi0gICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShtX3BsYXRmb3JtSW1hZ2UpOwotI2VuZGlmCi0gICAgaWYgKG1fY2Fj
aGVkSW1hZ2UpCi0gICAgICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0K
LQotI2lmIFBMQVRGT1JNKENHKQotCi1zdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5wbGF0Zm9ybUltYWdlKCk7
Ci0gICAgaWYgKHBsYXRmb3JtSW1hZ2UpIHsKLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGlj
c0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgICAgIEZsb2F0
UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWln
aHQocGxhdGZvcm1JbWFnZSkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQs
IHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8p
LT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKGltYWdlLT5yZWN0KCkpOwotCi0gICAgaWYg
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQsIHJlY3QsIGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOwotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMgY29kZSB0byB1c2UgdGhlIHBsYXRmb3JtLWluZGVwZW5k
ZW50IAotICAgICAgICAvLyBkcmF3aW5nIEFQSSBpbiBhbGwgY2FzZXMuIFRoZW4sIHRoaXMgZGlk
RHJhdyBjYWxsIHdpbGwgaGFwcGVuIAotICAgICAgICAvLyBhdXRvbWF0aWNhbGx5LCBhbmQgd2Ug
Y2FuIHJlbW92ZSBpdC4KLSAgICAgICAgY2FjaGVkSW1hZ2UtPmRpZERyYXcoaW1hZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLmRyYXdJ
bWFnZShpbWFnZSwgcmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sodm9pZCogaW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbykt
PmRlcmVmKCk7Ci19Ci0KLUNHUGF0dGVyblJlZiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQYXR0ZXJu
KGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dSZWN0IHJlY3Q7
Ci0gICAgcmVjdC5vcmlnaW4ueCA9IDA7Ci0gICAgcmVjdC5vcmlnaW4ueSA9IDA7Ci0gICAgaWYg
KG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICByZWN0LnNpemUud2lkdGggPSBDR0ltYWdlR2V0
V2lkdGgobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9
IENHSW1hZ2VHZXRIZWlnaHQobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgSW1hZ2UqIGltYWdlID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZWN0LnNpemUud2lkdGggPSBp
bWFnZS0+d2lkdGgoKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IGltYWdlLT5oZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0KLSAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUoQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0
cmFuc2Zvcm0sIDEsIC0xKSwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIAotICAgIC8vIElm
IEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcg
aXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KLSAgICAvLyByZXN1
bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4KLSAgICAvLyBJTlRfTUFYIGlzIGFsbW9zdCBj
b3JyZWN0LCBidXQgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBudW1iZXIgd3JhcHBpbmcgb2NjdXJp
bmcgbWFraW5nIHRoZSBmaWxsCi0gICAgLy8gcGF0dGVybiBpcyBub3QgZmlsbGVkIGNvcnJlY3Rs
eS4gCi0gICAgLy8gU28sIGp1c3QgcGljayBhIHJlYWxseSBsYXJnZSBudW1iZXIgdGhhdCB3b3Jr
cy4gCi0gICAgZmxvYXQgeFN0ZXAgPSBtX3JlcGVhdFggPyByZWN0LnNpemUud2lkdGggOiAoMTAw
MDAwMDAwLjBmKTsKLSAgICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHJlY3Quc2l6ZS5oZWln
aHQgOiAoMTAwMDAwMDAwLjBmKTsKLQotICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0
ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJh
Y2sgfTsKLSAgICByZWYoKTsKLSAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRoaXMsIHJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKLSAgICAgICAga0NHUGF0dGVyblRpbGlu
Z0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwotfQotCi0jZWxpZiBQ
TEFURk9STShDQUlSTykKLQotY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQ
YXR0ZXJuKGNvbnN0IGNhaXJvX21hdHJpeF90JiBtKQotewotICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICBzdXJmYWNl
ID0gbV9wbGF0Zm9ybUltYWdlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJ
bWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2Nh
Y2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1
cmZhY2Uoc3VyZmFjZSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZt
KTsKLSAgICBpZiAobV9yZXBlYXRYIHx8IG1fcmVwZWF0WSkKLSAgICAgICAgY2Fpcm9fcGF0dGVy
bl9zZXRfZXh0ZW5kKHBhdHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwotICAgIHJldHVybiBw
YXR0ZXJuOwogfQogCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKaW5kZXggNjg5MWRhNi4u
NzljNzg3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAorKysgYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCkBAIC0yNiw3NiArMjYsMzQgQEAKICNpZm5kZWYg
Q2FudmFzUGF0dGVybl9oCiAjZGVmaW5lIENhbnZhc1BhdHRlcm5faAogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0jaWYgUExBVEZP
Uk0oQ0cpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0j
aW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBDYWNoZWRJbWFnZTsKKyAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBTdHJpbmc7CiAK
ICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAgY2xhc3MgQ2FudmFzUGF0dGVy
biA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1BhdHRlcm4+LCBwcml2YXRlIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKKyAgICBjbGFzcyBDYW52YXNQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8
Q2FudmFzUGF0dGVybj4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VS
ZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmLCBib29sJiByZXBlYXRYLCBib29sJiByZXBlYXRZ
LCBFeGNlcHRpb25Db2RlJik7CiAKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJl
cGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQ
YXR0ZXJuKHN1cmZhY2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVh
dGUoQ2FjaGVkSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3Jl
YXRlKEltYWdlKiBpbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2lu
Q2xlYW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
UGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAg
fQotICAgICAgICB2aXJ0dWFsIH5DYW52YXNQYXR0ZXJuKCk7Ci0KLSNpZiBQTEFURk9STShDRykK
LSAgICAgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybUltYWdlLmdldCgpOyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV90KiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdl
OyB9Ci0jZW5kaWYKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHUGF0
dGVyblJlZiBjcmVhdGVQYXR0ZXJuKGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVQYXR0ZXJuKGNv
bnN0IGNhaXJvX21hdHJpeF90Jik7Ci0jZW5kaWYKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFBh
dHRlcm4mIHBhdHRlcm4oKSB7IHJldHVybiBtX3BhdHRlcm47IH0KIAogICAgICAgICBib29sIG9y
aWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0
ZToKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgQ2FudmFzUGF0dGVybihDR0ltYWdlUmVmLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZWxpZiBQTEFU
Rk9STShDQUlSTykKLSAgICAgICAgQ2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZW5kaWYKLSAgICAg
ICAgQ2FudmFzUGF0dGVybihDYWNoZWRJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZ
LCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9wbGF0Zm9ybUltYWdl
OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogY29uc3Qg
bV9wbGF0Zm9ybUltYWdlOwotI2VuZGlmCi0gICAgICAgIENhY2hlZEltYWdlKiBjb25zdCBtX2Nh
Y2hlZEltYWdlOwotICAgICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgY29uc3Qg
Ym9vbCBtX3JlcGVhdFk7CisgICAgICAgIFBhdHRlcm4gbV9wYXR0ZXJuOwogICAgICAgICBib29s
IG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBlN2I2YjBkLi4wODQ3ZGFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTEyMSwxNCArMTEyMSwyMCBAQCBQYXNzUmVmUHRy
PENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihI
VE1MSW1hZ2VFbGVtZQogICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUocmVw
ZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSB0cnVlOwotICAgIGlmIChD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAg
ICBLVVJMIHVybChjYWNoZWRJbWFnZS0+dXJsKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKLSAgICAgICAgb3Jp
Z2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKG9yaWdpbi5nZXQoKSk7CisKKyAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgpKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGltYWdlLT5jYWNoZWRJbWFnZSgpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CisKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAg
ICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEltYWdlOjpudWxsSW1hZ2UoKSwgcmVwZWF0
WCwgcmVwZWF0WSwgdHJ1ZSk7CisKKyAgICBLVVJMIHVybChjYWNoZWRJbWFnZS0+dXJsKCkpOwor
ICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZSh1cmwpOworICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKG9yaWdpbi5nZXQoKSk7CisgICAgcmV0dXJuIENhbnZh
c1BhdHRlcm46OmNyZWF0ZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwg
b3JpZ2luQ2xlYW4pOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLApA
QCAtMTEzOSwyMyArMTE0NSw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtCiAgICAgQ2FudmFz
UGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShyZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVw
ZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gRklYTUU6
IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJ
LgotI2lmIFBMQVRGT1JNKENHKQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9w
dENGLCBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShpbWFnZS5n
ZXQoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLSNlbGlmIFBM
QVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhbnZhcy0+Y3Jl
YXRlUGxhdGZvcm1JbWFnZSgpOwotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgUmVmUHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBDYW52YXNQYXR0ZXJuOjpjcmVh
dGUoc3VyZmFjZSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLSAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0gICAgcmV0dXJuIHBhdHRlcm4ucmVs
ZWFzZSgpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotI2Vu
ZGlmCisgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1ZmZlcigpLT5p
bWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiBy
KQpAQCAtMTE3OCw0NyArMTE2OCwyMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAorICAg
IC8vIEZJWE1FOiBDYW4gdGhpcyBjaGVjayBiZSBtb3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4dD8g
b3IgcmVtb3ZlZD8KICNpZiBQTEFURk9STShDRykKICAgICAvLyBDaGVjayBmb3IgY2FzZSB3aGVy
ZSB0aGUgcGF0dGVybiBpcyBhbHJlYWR5IHNldC4KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0g
Q0dDb250ZXh0R2V0Q1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5t
X2FwcGxpZWRTdHJva2VQYXR0ZXJuCi0gICAgICAgICAgICAmJiBDR0FmZmluZVRyYW5zZm9ybUVx
dWFsVG9UcmFuc2Zvcm0obSwgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSkp
CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGMtPmdldENUTSgpOworICAgIGlmIChzdGF0ZSgp
Lm1fYXBwbGllZFN0cm9rZVBhdHRlcm4gJiYgY3RtID09IHN0YXRlKCkubV9zdHJva2VTdHlsZVBh
dHRlcm5UcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgogCiAgICAgQ2FudmFzUGF0
dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpOwogICAgIGlm
ICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3Jt
UGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0Zm9ybVBh
dHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3Bh
Y2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwotICAgIENHQ29udGV4dFNldFN0cm9r
ZUNvbG9yU3BhY2UoYy0+cGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7Ci0gICAgQ0dD
b2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOwotCi0gICAgY29uc3QgQ0dGbG9hdCBwYXR0
ZXJuQWxwaGEgPSAxOwotICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oYy0+cGxhdGZvcm1D
b250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7Ci0gICAgQ0dQYXR0ZXJu
UmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwotCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0
dGVyblRyYW5zZm9ybSA9IG07Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9
IHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpOwotICAgIGlmICghcGF0dGVybikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKLQot
ICAgIGNhaXJvX3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0
dGVybihtKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOworICAg
IGMtPmFwcGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwogCi0gICAgY2Fpcm9f
c2V0X3NvdXJjZShjciwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ry
b3kocGxhdGZvcm1QYXR0ZXJuKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3RtOwogI2VuZGlmCiAgICAgc3RhdGUoKS5tX2Fw
cGxpZWRTdHJva2VQYXR0ZXJuID0gdHJ1ZTsKIH0KQEAgLTEyMjksNDcgKzExOTQsMjIgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1v
dmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwogI2lmIFBMQVRGT1JNKENHKQog
ICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0Lgot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0NvbnRleHRHZXRDVE0oYy0+cGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIGlmIChzdGF0ZSgpLm1fYXBwbGllZEZpbGxQYXR0ZXJuCi0gICAgICAgICAg
ICAmJiBDR0FmZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0obSwgc3RhdGUoKS5tX2ZpbGxT
dHlsZVBhdHRlcm5UcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYW52YXNQYXR0
ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpOwotICAgIGlmICgh
cGF0dGVybikKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gYy0+Z2V0Q1RNKCk7CisgICAgaWYg
KHN0YXRlKCkubV9hcHBsaWVkRmlsbFBhdHRlcm4gJiYgY3RtID09IHN0YXRlKCkubV9maWxsU3R5
bGVQYXR0ZXJuVHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CisjZW5kaWYKIAotICAgIENHUGF0
dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKG0pOwotICAg
IGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbG9yU3Bh
Y2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKLSAgICBD
R0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNw
YWNlKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7Ci0KLSAgICBjb25z
dCBDR0Zsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4o
Yy0+cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7Ci0g
ICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwotCi0gICAgc3RhdGUoKS5tX2Zp
bGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBtOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQogICAgIENhbnZhc1BhdHRlcm4q
IHBhdHRlcm4gPSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCk7CiAgICAgaWYgKCFwYXR0
ZXJuKQogICAgICAgICByZXR1cm47CiAKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29u
dGV4dCgpOwotICAgIGNhaXJvX21hdHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChjciwg
Jm0pOworICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0dGVybigpKTsKIAotICAg
IGNhaXJvX3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVy
bihtKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2Fpcm9fc2V0X3NvdXJjZShjciwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJu
X2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBzdGF0ZSgp
Lm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0bTsKICNlbmRpZgogICAgIHN0YXRlKCku
bV9hcHBsaWVkRmlsbFBhdHRlcm4gPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCmluZGV4IDQwNzczNDQuLjE2OGI3MzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBib29sIG1fYXBwbGllZEZpbGxQYXR0ZXJuOwogICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAg
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Cisg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07
CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3Jt
OwogI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5j
cHAKaW5kZXggYmU1MDEzYS4uYmVlNGVmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZh
c1N0eWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCkBAIC0zNCw2ICsz
NCwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dD
b250ZXh0Lmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFQYWludGVy
PgogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTYwLDEyICs2NCwxNiBAQCBDYW52YXNTdHlsZTo6Q2Fu
dmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
Y29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCi0gICAgOiBtX3R5cGUoQ29sb3JTdHJp
bmdXaXRoQWxwaGEpLCBtX2NvbG9yKGNvbG9yKSwgbV9hbHBoYShhbHBoYSkKKyAgICA6IG1fdHlw
ZShDb2xvclN0cmluZ1dpdGhBbHBoYSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX2Fs
cGhhKGFscGhhKQogewogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxl
dmVsLCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShHcmF5TGV2ZWwpLCBtX2FscGhhKGFscGhh
KSwgbV9ncmF5TGV2ZWwoZ3JheUxldmVsKQorICAgIDogbV90eXBlKEdyYXlMZXZlbCkKKyAgICAs
IG1fYWxwaGEoYWxwaGEpCisgICAgLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCiB7CiB9CiAKQEAg
LTgwLDEwNCArODgsNDcgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0
IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNT
dHlsZShQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVudCkKLSAgICA6IG1fdHlwZShn
cmFkaWVudCA/IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpLCBtX2dyYWRpZW50KGdyYWRpZW50KQor
ICAgIDogbV90eXBlKGdyYWRpZW50ID8gR3JhZGllbnQgOiBDb2xvclN0cmluZykKKyAgICAsIG1f
Z3JhZGllbnQoZ3JhZGllbnQpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShQYXNz
UmVmUHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4pCi0gICAgOiBtX3R5cGUocGF0dGVybiA/IElt
YWdlUGF0dGVybiA6IENvbG9yU3RyaW5nKSwgbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgOiBtX3R5
cGUocGF0dGVybiA/IEltYWdlUGF0dGVybiA6IENvbG9yU3RyaW5nKQorICAgICwgbV9wYXR0ZXJu
KHBhdHRlcm4pCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRl
QWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQoreworICAgIFJHQkEzMiBy
Z2JPbmx5ID0gY29sb3IgJiAweDAwRkZGRkZGOworICAgIFJHQkEzMiByZ2JhID0gcmdiT25seSB8
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKG92ZXJyaWRlQWxwaGEpIDw8IDI0OworICAgIHJldHVybiBy
Z2JhOworfQorCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSNp
ZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlciogcCA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
Y2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbmRpZgogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKICAgICAgICAgICAg
IFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAgICAg
ICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRS
R0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAg
ICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29s
b3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAmIDB4RkYpIC8gMjU1
LjBmKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0g
cC0+cGVuKCk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKChRQ29sb3IoUVJnYihj
b2xvcikpKSk7Ci0gICAgICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFU
Rk9STShDQUlSTykKLSAgICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Ig
c2hvdWxkIGJlIGRlYWx0IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNyLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAy
NTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAot
ICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAg
ICgoY29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2VuZGlmCisgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CiAgICAgICAgICAgICBS
R0JBMzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAg
ICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0Nv
bnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdC
U3Ryb2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAg
KChjb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9y
ID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikg
LyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkK
LSAgICAgICAgICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgUUNv
bG9yIGNsciA9IFFDb2xvcihRUmdiKGNvbG9yKSk7Ci0gICAgICAgICAgICBjbHIuc2V0QWxwaGFG
KG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAg
ICAgICAgcC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
ICAgICAgICAvLyBGSVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBiZSBkZWFsdCB3
aXRoIHNlcGFyYXRlbHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwKLSAg
ICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAg
ICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAo
Y29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAm
IDB4RkYpIC8gMjU1LjBmKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvciwgbV9hbHBoYSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmF5TGV2ZWw6IHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNl
dEdyYXlTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWws
IG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRQ29sb3IgY2xyOwot
ICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAgICBjbHIu
c2V0UmdiRihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKTsK
LSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNl
dFBlbihjdXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxl
dmVsLCBtX2FscGhhKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3IobV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSR0JBOiB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50
IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0Nv
bnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9yZWQs
IG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAg
ICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgUUNvbG9yIGNscjsK
LSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEp
OwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAgcC0+
c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgICAgICAv
LyBGSVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBiZSBkZWFsdCB3aXRoIHNlcGFy
YXRlbHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgbV9yZWQsIG1fZ3Jl
ZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yKG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ01ZS0E6IHsKQEAgLTIwOCw3
NSArMTU5LDI1IEBAIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5RmlsbENvbG9yKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSNp
ZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlciogcCA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2VuZGlmCiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewotICAgICAgICAgICAgUkdCQTMyIGNvbG9y
ID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawotICAgICAgICAgICAgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBE
byB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4K
LSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2
KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAg
ICAgICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAmIDB4RkYpIC8gMjU1LjBmKTsKLSNlbGlmIFBM
QVRGT1JNKFFUKQotICAgICAgICAgICAgUUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7
Ci0gICAgICAgICAgICBRQ29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYihRUmdiKGNv
bG9yKSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAg
ICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIFJHQkEz
MiByZ2JhID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjaworICAgICAgICAgICAg
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIG1fY29sb3IpOworICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKHJnYmEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDb2xvclN0cmluZ1dpdGhBbHBoYTogewogICAgICAgICAgICAgUkdCQTMyIGNv
bG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawogICAgICAgICAgICAgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQ
SS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xv
cihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+
IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAw
eEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwK
LSAgICAgICAgICAgICAgICBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAg
ICAgUUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAgICBRQ29sb3Ig
Y2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYihRUmdiKGNvbG9yKSk7Ci0gICAgICAgICAgICBj
bHIuc2V0QWxwaGFGKG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9y
KGNscik7Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShj
b2xvciwgbV9hbHBoYSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
Y2FzZSBHcmF5TGV2ZWw6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2gg
cGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShD
RykKLSAgICAgICAgICAgIENHQ29udGV4dFNldEdyYXlGaWxsQ29sb3IoY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCksIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQot
ICAgICAgICAgICAgUUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAg
ICBRQ29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9ncmF5TGV2ZWwsIG1fZ3Jh
eUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2gu
c2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0j
ZW5kaWYKKyAgICAgICAgY2FzZSBHcmF5TGV2ZWw6CisgICAgICAgICAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3IoQ29sb3IobV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9h
bHBoYSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSR0JB
OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVw
ZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1f
cmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
ICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAgICAgICAgIFFD
b2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiRihtX3JlZCwgbV9ncmVlbiwgbV9ibHVl
LCBtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwotICAg
ICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICBjYXNl
IFJHQkE6CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IobV9yZWQsIG1f
Z3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
ICAgICAgICAgY2FzZSBDTVlLQTogewogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogI2lmIFBMQVRG
T1JNKENHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBi
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggOTA3Y2NjYy4uMGQ1NDUx
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0yNzUsNDggKzI3NSw0IEBAIElt
YWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6YnVmZmVyKCkgY29uc3QKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKENHKQotCi1DR0ltYWdlUmVm
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3QKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dFJlZikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0UmVmKTsKLQotICAgIHJl
dHVybiBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0UmVmKTsKLX0KLQotI2VsaWYg
UExBVEZPUk0oUVQpCi0KLVFQaXhtYXAgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3Jt
SW1hZ2UoKSBjb25zdAotewotICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IFFQaXhtYXAoKTsKLSAgICByZXR1cm4gKm1faW1hZ2VCdWZmZXItPnBpeG1hcCgpOwotfQotCi0j
ZWxpZiBQTEFURk9STShDQUlSTykKLQotY2Fpcm9fc3VyZmFjZV90KiBIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVy
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE5vdGUgdGhhdCB1bmxpa2UgQ0csIG91ciBy
ZXR1cm5lZCBpbWFnZSBpcyBub3QgYSBjb3B5IG9yCi0gICAgLy8gY29weS1vbi13cml0ZSwgYnV0
IHRoZSBvcmlnaW5hbC4gVGhpcyBpcyBmaW5lLCBzaW5jZSBpdCBpcyBvbmx5Ci0gICAgLy8gZXZl
ciB1c2VkIGFzIGEgc291cmNlLgotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX2ltYWdlQnVm
ZmVyLT5zdXJmYWNlKCkpOwotICAgIGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG1faW1hZ2VCdWZm
ZXItPnN1cmZhY2UoKSk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPnN1cmZhY2UoKTsKLX0K
LQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5oIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYTBiN2NjNS4uYTEx
ODM2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTMwLDE5ICszMCw2IEBACiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKLSNpZiBQTEFURk9S
TShDRykKLS8vIEZJWE1FOiBDRy1zcGVjaWZpYyBwYXJ0cyBuZWVkIHRvIG1vdmUgdG8gdGhlIHBs
YXRmb3JtIGRpcmVjdG9yeS4KLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVm
OwotdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKLSNlbGlmIFBMQVRGT1JNKFFU
KQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUGl4bWFwOwotY2xhc3MgUVBhaW50ZXI7Ci1R
VF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBQTEFURk9STShDQUlSTykKLXR5cGVkZWYgc3RydWN0IF9j
YWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDsKQEAgLTEwNSwxNSArOTIsOCBA
QCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7
CiAKLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7IAotI2lmIFBMQVRGT1JNKENHKQot
ICAgIENHSW1hZ2VSZWYgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0OwotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBpeG1hcCBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZVBsYXRmb3JtSW1hZ2Uo
KSBjb25zdDsKLSNlbmRpZgotICAgIAorICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsK
KwogICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXpl
JikgY29uc3Q7CiAgICAgSW50UG9pbnQgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5j
cHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKaW5kZXggMzRhMDY1Yi4uMmM3ZDRj
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcApAQCAtNDgsMjIgKzQ4LDIxIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQog
ICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBJbWFnZVJlc291cmNlKQorICAgICwgbV9pbWFnZSgw
KQogewotICAgIG1faW1hZ2UgPSAwOwogICAgIG1fc3RhdHVzID0gVW5rbm93bjsKIH0KIAogQ2Fj
aGVkSW1hZ2U6OkNhY2hlZEltYWdlKEltYWdlKiBpbWFnZSkKICAgICA6IENhY2hlZFJlc291cmNl
KFN0cmluZygpLCBJbWFnZVJlc291cmNlKQorICAgICwgbV9pbWFnZShpbWFnZSkKIHsKLSAgICBt
X2ltYWdlID0gaW1hZ2U7CiAgICAgbV9zdGF0dXMgPSBDYWNoZWQ7CiAgICAgbV9sb2FkaW5nID0g
ZmFsc2U7CiB9CiAKIENhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQogewotICAgIGRlbGV0ZSBt
X2ltYWdlOwogfQogICAgIAogdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChEb2NMb2FkZXIqIGRvY0xv
YWRlcikKQEAgLTkzLDE2ICs5MiwxNiBAQCB2b2lkIENhY2hlZEltYWdlOjphbGxSZWZlcmVuY2Vz
UmVtb3ZlZCgpCiAKIHN0YXRpYyBJbWFnZSogYnJva2VuSW1hZ2UoKQogewotICAgIHN0YXRpYyBJ
bWFnZSogYnJva2VuSW1hZ2U7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gYnJva2VuSW1hZ2U7
CiAgICAgaWYgKCFicm9rZW5JbWFnZSkKICAgICAgICAgYnJva2VuSW1hZ2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1pc3NpbmdJbWFnZSIpOwotICAgIHJldHVybiBicm9rZW5JbWFn
ZTsKKyAgICByZXR1cm4gYnJva2VuSW1hZ2UuZ2V0KCk7CiB9CiAKIHN0YXRpYyBJbWFnZSogbnVs
bEltYWdlKCkKIHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2UgbnVsbEltYWdlOwotICAgIHJldHVy
biAmbnVsbEltYWdlOworICAgIHN0YXRpYyBSZWZQdHI8Qml0bWFwSW1hZ2U+IG51bGxJbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gbnVsbEltYWdlLmdldCgpOwogfQog
CiBJbWFnZSogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgY29uc3QKQEAgLTExMSw3ICsxMTAsNyBAQCBJ
bWFnZSogQ2FjaGVkSW1hZ2U6OmltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJyb2tlbklt
YWdlKCk7CiAKICAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2U7CisgICAg
ICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogCiAgICAgcmV0dXJuIG51bGxJbWFnZSgpOwogfQpA
QCAtMTk1LDE0ICsxOTQsMTMgQEAgSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KGZsb2F0
IG11bHRpcGxpZXIpIGNvbnN0CiB2b2lkIENhY2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoKQog
ewogICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGls
ZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkKKyAgICB3aGlsZSAoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKICAgICAgICAgYy0+aW1hZ2VDaGFuZ2VkKHRo
aXMpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpjbGVhcigpCiB7CiAgICAgZGVzdHJveURlY29k
ZWREYXRhKCk7Ci0gICAgZGVsZXRlIG1faW1hZ2U7CiAgICAgbV9pbWFnZSA9IDA7CiAgICAgc2V0
RW5jb2RlZFNpemUoMCk7CiB9CkBAIC0yMTQsMTcgKzIxMiwxNyBAQCBpbmxpbmUgdm9pZCBDYWNo
ZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQogICAgICAgICByZXR1cm47CiAjaWYgUExBVEZPUk0oQ0cp
CiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24vcGRmIikgewot
ICAgICAgICBtX2ltYWdlID0gbmV3IFBERkRvY3VtZW50SW1hZ2U7CisgICAgICAgIG1faW1hZ2Ug
PSBQREZEb2N1bWVudEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgogI2lmIEVOQUJMRShTVkdfQVNfSU1BR0UpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5
cGUoKSA9PSAiaW1hZ2Uvc3ZnK3htbCIpIHsKLSAgICAgICAgbV9pbWFnZSA9IG5ldyBTVkdJbWFn
ZSh0aGlzKTsKKyAgICAgICAgbV9pbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUodGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX2ltYWdlID0gbmV3IEJpdG1hcEltYWdl
KHRoaXMpOworICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHRoaXMpOwogfQogCiB2
b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmggYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCmluZGV4IDBhM2QyNDguLjIxM2M5ZjAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKKysrIGIvV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuaApAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y3JlYXRlSW1hZ2UoKTsKICAgICB2b2lkIG5vdGlmeU9ic2VydmVycygpOwogCi0gICAgSW1hZ2Uq
IG1faW1hZ2U7CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCmluZGV4IGE2YjRkZTAuLjNhOTA4NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
QEAgLTM5OTksNyArMzk5OSwxMSBAQCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFtZUxvYWRl
cjo6Y3JlYXRlSGlzdG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCkKICAgICBpZiAob3JpZ2luYWxV
UkwuaXNFbXB0eSgpKQogICAgICAgICBvcmlnaW5hbFVSTCA9IGJsYW5rVVJMKCk7CiAgICAgCi0g
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gSGlzdG9yeUl0ZW06OmNyZWF0ZSh1cmwsIG1f
ZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpID8gbV9mcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKS0+dHJlZSgpLT5uYW1lKCkgOiAiIiwgZG9jTG9hZGVyID8gZG9j
TG9hZGVyLT50aXRsZSgpIDogIiIpOworICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUt
PnRyZWUoKS0+cGFyZW50KCk7CisgICAgU3RyaW5nIHBhcmVudCA9IHBhcmVudEZyYW1lID8gcGFy
ZW50RnJhbWUtPnRyZWUoKS0+bmFtZSgpIDogIiI7CisgICAgU3RyaW5nIHRpdGxlID0gZG9jTG9h
ZGVyID8gZG9jTG9hZGVyLT50aXRsZSgpIDogIiI7CisKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+
IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVybCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCks
IHBhcmVudCwgdGl0bGUpOwogICAgIGl0ZW0tPnNldE9yaWdpbmFsVVJMU3RyaW5nKG9yaWdpbmFs
VVJMLnN0cmluZygpKTsKICAgICAKICAgICAvLyBTYXZlIGZvcm0gc3RhdGUgaWYgdGhpcyBpcyBh
IFBPU1QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCmluZGV4IDhiM2Q1ZjkuLmYwNzBjYzkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAKKysrIGIvV2Vi
Q29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcApAQCAtNjYsMTIgKzY2LDEyIEBAIHZvaWQg
SWNvblJlY29yZDo6c2V0SW1hZ2VEYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKQog
ewogICAgIC8vIEl0J3Mgb2theSB0byBkZWxldGUgdGhlIHJhdyBpbWFnZSBoZXJlLiBBbnkgZXhp
c3RpbmcgY2xpZW50cyB1c2luZyB0aGlzIGljb24gd2lsbCBiZQogICAgIC8vIG1hbmFnaW5nIGFu
IGltYWdlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIGNvcHkgb2YgdGhpcyByYXcgaW1hZ2UgZGF0
YS4KLSAgICBtX2ltYWdlLnNldChuZXcgQml0bWFwSW1hZ2UoKSk7CisgICAgbV9pbWFnZSA9IEJp
dG1hcEltYWdlOjpjcmVhdGUoKTsKIAogICAgIC8vIENvcHkgdGhlIHByb3ZpZGVkIGRhdGEgaW50
byB0aGUgYnVmZmVyIG9mIHRoZSBuZXcgSW1hZ2Ugb2JqZWN0LgogICAgIGlmICghbV9pbWFnZS0+
c2V0RGF0YShkYXRhLCB0cnVlKSkgewogICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiTWFudWFs
IGltYWdlIGRhdGEgZm9yIGljb25VUkwgJyVzJyBGQUlMRUQgLSBpdCB3YXMgcHJvYmFibHkgaW52
YWxpZCBpbWFnZSBkYXRhIiwgbV9pY29uVVJMLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgbV9p
bWFnZS5zZXQoMCk7CisgICAgICAgIG1faW1hZ2UuY2xlYXIoKTsKICAgICB9CiAgICAgCiAgICAg
bV9kYXRhU2V0ID0gdHJ1ZTsKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJY29uUmVjb3JkOjpsb2Fk
SW1hZ2VGcm9tUmVzb3VyY2UoY29uc3QgY2hhciogcmVzb3VyY2UpCiAgICAgaWYgKCFyZXNvdXJj
ZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2ltYWdlLnNldChJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2UpKTsKKyAgICBtX2ltYWdlID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKHJlc291cmNlKTsKICAgICBtX2RhdGFTZXQgPSB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaCBiL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvblJlY29yZC5oCmluZGV4IDYxZDMxZmEuLmFhZWE3ODcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvblJlY29yZC5oCkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcg
bV9pY29uVVJMOwogICAgIHRpbWVfdCBtX3N0YW1wOwotICAgIE93blB0cjxJbWFnZT4gbV9pbWFn
ZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgCiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fcmV0YWluaW5nUGFnZVVSTHM7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCmluZGV4IDdjYWYzOWYuLmVjMzk0ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTkxLDEyICs5MSwxNCBAQCBjbGFzcyBCaXRtYXBJbWFn
ZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwogICAg
IGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBwdWJsaWM6Ci0jaWYgUExBVEZPUk0oQ0cp
Ci0gICAgQml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiwgSW1hZ2VPYnNlcnZlciogPSAwKTsKLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgIEJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2VfdCosIEltYWdl
T2JzZXJ2ZXIqID0gMCk7Ci0jZW5kaWYKLSAgICBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9
IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwSW1hZ2UobmF0aXZlSW1hZ2UsIG9ic2Vy
dmVyKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUo
SW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBCaXRtYXBJbWFnZShvYnNlcnZlcikpOworICAgIH0KICAgICB+Qml0bWFwSW1hZ2Uo
KTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KQEAgLTEzNSw2ICsxMzcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIGZyYW1lQXRJbmRl
eChjdXJyZW50RnJhbWUoKSk7IH0KIAogcHJvdGVjdGVkOgorICAgIEJpdG1hcEltYWdlKE5hdGl2
ZUltYWdlUHRyLCBJbWFnZU9ic2VydmVyKiA9IDApOworICAgIEJpdG1hcEltYWdlKEltYWdlT2Jz
ZXJ2ZXIqID0gMCk7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCB2b2lkIGRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRleCA1MmQyYmQ3Li4xMmJkZTNl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApAQCAtNTEsNiArNTEsMTYgQEAgUkdC
QTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogICAgIHJldHVybiBtYXgo
MCwgbWluKGEsIDI1NSkpIDw8IDI0IHwgbWF4KDAsIG1pbihyLCAyNTUpKSA8PCAxNiB8IG1heCgw
LCBtaW4oZywgMjU1KSkgPDwgOCB8IG1heCgwLCBtaW4oYiwgMjU1KSk7CiB9CiAKK2ludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIHJldHVybiBtYXgoMCwgbWluKHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOworfQorCitSR0JBMzIgbWFr
ZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sK
KyAgICByZXR1cm4gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkgPDwgMjQgfCBjb2xvckZsb2F0VG9S
R0JBQnl0ZShyKSA8PCAxNiB8IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpIDw8IDggfCBjb2xvckZs
b2F0VG9SR0JBQnl0ZShiKTsKK30KKwogc3RhdGljIGRvdWJsZSBjYWxjSHVlKGRvdWJsZSB0ZW1w
MSwgZG91YmxlIHRlbXAyLCBkb3VibGUgaHVlVmFsKQogewogICAgIGlmIChodWVWYWwgPCAwLjAp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggMTYwM2MxYS4uNWFlMzhhNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTYsNiArNTYsOSBAQCB0eXBlZGVmIHVuc2lnbmVk
IFJHQkEzMjsgICAgICAgIC8vIFJHQkEgcXVhZHJ1cGxldAogCiBSR0JBMzIgbWFrZVJHQihpbnQg
ciwgaW50IGcsIGludCBiKTsKIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSk7CisKK2ludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCk7CitSR0JBMzIgbWFrZVJH
QkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShkb3VibGUgaCwgZG91YmxlIHMsIGRvdWJsZSBsLCBkb3VibGUg
YSk7CiAKIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
CkBAIC02Niw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBDb2xvcihSR0JBMzIgY29sKSA6IG1fY29s
b3IoY29sKSwgbV92YWxpZCh0cnVlKSB7IH0KICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBi
KSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSksIG1fdmFsaWQodHJ1ZSkgeyB9CiAgICAgQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogbV9jb2xvcihtYWtlUkdCQShyLCBnLCBi
LCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9CisgICAgLy8gQ29sb3IgaXMgY3VycmVudGx5IGxpbWl0
ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21lIGRheSB3ZSdsbCBzdXBwb3J0IGJldHRlciBj
b2xvcnMKKyAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1f
Y29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpLCBtX3ZhbGlkKHRydWUpIHsg
fQogICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwogICAgIGV4cGxpY2l0IENvbG9y
KGNvbnN0IGNoYXIqKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdGVkSW1hZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuaAppbmRleCBkMzgyZjA2Li5iMzIxYjhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oCkBAIC01MSw2ICs1MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCisgICAgLy8g
QXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQgZGF0YSB3ZSBuZWVk
IHRvIHdvcnJ5IGFib3V0CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29s
IGluY3JlbWVudGFsID0gZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNp
emUoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5jcHAKaW5kZXggNzUwYzU4Yy4uYjljNzFmOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBHcmFkaWVudDo6
YWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgcGxhdGZv
cm1EZXN0cm95KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3Qg
R3JhZGllbnQ6OkNvbG9yU3RvcCAmYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCAmYikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYg
YSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKIHsKICAgICByZXR1cm4gYS5zdG9wIDwg
Yi5zdG9wOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCmluZGV4IDcwMTU5YjAu
LjBiMGQ4NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
I2lmIFBMQVRGT1JNKENHKQpAQCAtNzksMTEgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZvaWQgc2V0U3RvcHNTb3J0ZWQoYm9vbCBzKSB7IG1fc3RvcHNTb3J0ZWQgPSBz
OyB9CiAKLSNpZiBQTEFURk9STShDRykgfHwgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwotI2Vsc2UK
LSAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0jZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gMDsgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMTAxYWJmOC4uZTk0ZDNiMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC05Myw2
ICs5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBhdGg7CisgICAgY2xhc3MgUGF0dGVybjsKICAgICBj
bGFzcyBUZXh0UnVuOwogCiAgICAgLy8gVGhlc2UgYml0cyBjYW4gYmUgT1JlZCB0b2dldGhlciBm
b3IgYSB0b3RhbCBvZiA4IHBvc3NpYmxlIHRleHQgZHJhd2luZyBtb2Rlcy4KQEAgLTEzNCw3ICsx
MzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgICAg
ICAKKworICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJik7Cisg
ICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJik7CisKICAgICAgICAg
dm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwogICAgICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggMWExZTNiMi4uY2E2OTU0ZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJJbWFnZS5o
IgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDksNiArNTAsMTIgQEAgSW1hZ2U6On5J
bWFnZSgpCiB7CiB9CiAKK0ltYWdlKiBJbWFnZTo6bnVsbEltYWdlKCkKK3sKKyAgICBzdGF0aWMg
UmVmUHRyPEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgcmV0
dXJuIG51bGxJbWFnZS5nZXQoKTsKK30KKwogYm9vbCBJbWFnZTo6c3VwcG9ydHNUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUodHlwZSk7IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
CmluZGV4IDNjNzM1ZDYuLmQ2NWU1MjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAg
LTY5LDE4ICs2OSwxOSBAQCBjbGFzcyBTdHJpbmc7CiAvLyBUaGlzIGNsYXNzIGdldHMgbm90aWZp
ZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29kZWQgZnJhbWVzIGFuZCB3
aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJbWFnZU9ic2VydmVyOwog
Ci1jbGFzcyBJbWFnZSA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIEltYWdlIDogcHVibGljIFJlZkNv
dW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSAgICBJbWFnZShJbWFnZU9ic2Vy
dmVyKiA9IDApOwogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCi0gICAgc3RhdGljIEltYWdl
KiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOwog
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsgCiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisK
KyAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7
CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKQEAg
LTk2LDExICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2V0RGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgYm9v
bCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAKLSAgICAvLyBGSVhNRTogUERGL1NWRyB3aWxsIGJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQg
c2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25z
IGFyZSBub3QKLSAgICAvLyBpbXBsZW1lbnRlZCB5ZXQgZm9yIHRob3NlIGltYWdlIHR5cGVzLgot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZh
bHNlKSB7fTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3Jl
bWVudGFsID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkg
Y29uc3QgPSAwOwogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdl
dCgpOyB9CiAKQEAgLTEzNyw5ICsxMzYsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3Rl
ZDoKKyAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOworCiAgICAgc3RhdGljIHZvaWQgZmls
bFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKTsKIAotcHJv
dGVjdGVkOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0
Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggZTY1MmUyYS4uZTVk
YTNlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMzMsMjUg
KzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPG1lbW9yeT4K
IAotI2lmICFQTEFURk9STShDRykKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShDRykKLXR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQaXhtYXA+Ci1RVF9CRUdJ
Tl9OQU1FU1BBQ0UKLWNsYXNzIFFQYWludGVyOwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShDQUlSTykKLXR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJv
X3N1cmZhY2VfdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CkBAIC02OSwxOSArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgICAgICBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAotI2lmIFBMQVRGT1JNKENHKQotICAg
ICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UoKSBjb25zdCB7IHJldHVybiBpbWFnZSgpLT5nZXRDR0lt
YWdlUmVmKCk7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICBRUGl4bWFwKiBwaXhtYXAo
KSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JN
KENBSVJPKSB8fCBQTEFURk9STShRVCkKICAgICAgICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7Ci0j
ZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAwOyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1faW1hZ2Uu
Y2xlYXIoKTsgfQogCkBAIC05MCwyMyArNTksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CiAK
LSAgICAgICAgCi0KICAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX2RhdGE7CiAgICAgICAg
IEludFNpemUgbV9zaXplOwogCiAgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29u
dGV4dDsKLSAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgICAgIG11
dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAogI2lmIFBMQVRGT1JNKENHKQogICAg
ICAgICBJbWFnZUJ1ZmZlcih2b2lkKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmLCBzdGQ6OmF1
dG9fcHRyPEdyYXBoaWNzQ29udGV4dD4pOwogI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIElt
YWdlQnVmZmVyKGNvbnN0IFFQaXhtYXAgJnB4KTsKKyAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3Qg
UVBpeG1hcCYpOwogICAgICAgICBtdXRhYmxlIFFQaXhtYXAgbV9waXhtYXA7CiAgICAgICAgIG11
dGFibGUgUVBhaW50ZXIqIG1fcGFpbnRlcjsKICNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAg
ICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworICAgICAgICBJbWFnZUJ1
ZmZlcihjYWlyb19zdXJmYWNlX3QqKTsKICAgICAgICAgbXV0YWJsZSBjYWlyb19zdXJmYWNlX3Qq
IG1fc3VyZmFjZTsKICNlbmRpZgogICAgIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzg4YmQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BhdHRlcm46OlBhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGVh
dFgsIGJvb2wgcmVwZWF0WSkKKyAgICA6IG1fdGlsZUltYWdlKGltYWdlKQorICAgICwgbV9yZXBl
YXRYKHJlcGVhdFgpCisgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKK3sKKyAgICBBU1NFUlQoaW1h
Z2UpOworfQorCitQYXR0ZXJuOjp+UGF0dGVybigpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXR0ZXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjYzA2
NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5o
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQ
YXR0ZXJuX2gKKyNkZWZpbmUgUGF0dGVybl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBQTEFURk9STShDRykKK3R5cGVkZWYg
c3RydWN0IENHUGF0dGVybiogQ0dQYXR0ZXJuUmVmOwordHlwZWRlZiBDR1BhdHRlcm5SZWYgUGxh
dGZvcm1QYXR0ZXJuUHRyOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KK3R5cGVkZWYgY2Fpcm9fcGF0dGVybl90KiBQbGF0Zm9ybVBhdHRlcm5QdHI7CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBj
bGFzcyBJbWFnZTsKKworICAgIGNsYXNzIFBhdHRlcm4gOiBOb25jb3B5YWJsZSB7CisgICAgcHVi
bGljOgorICAgICAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkp
OworCisgICAgICAgIHZpcnR1YWwgflBhdHRlcm4oKTsKKyAgICAgICAgCisgICAgICAgIEltYWdl
KiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3RpbGVJbWFnZS5nZXQoKTsgfQorCisgICAg
ICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7CisgICAgICAgIGJvb2wgbV9yZXBlYXRYOwor
ICAgICAgICBib29sIG1fcmVwZWF0WTsKKyAgICB9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAppbmRleCBiMDdlMmE0Li5hYzUwYTIwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cApAQCAtNDk1LDYgKzQ5NSwyMyBAQCBJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigp
CiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4obWF0cml4LngwKSwgc3RhdGlj
X2Nhc3Q8aW50PihtYXRyaXgueTApKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIGNhaXJvX3BhdHRl
cm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0
Q1RNKCkpOworICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjYWlyb19zZXRfc291cmNlKHBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybVBhdHRlcm4pOwor
ICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQor
eworICAgIC8vIFRoZSBDYWlybyBjb2RlcGF0aCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCBzZXBh
cmF0ZSBzdHJva2UvZmlsbD8KKyAgICAvLyBUaGUgY29kZSBJIHJlZmFjdG9yZWQgdG8gY3JlYXRl
IHRoZXNlIG1ldGhvZHMgd2FzIGlkZW50aWNhbCBmb3IgQ2Fpcm8KKyAgICBhcHBseVN0cm9rZVBh
dHRlcm4ocGF0dGVybik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYgY29sKQogewogICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2Jh
Ymx5IGEgbm8tb3AgYnV0IEknbSBub3Qgc3VyZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKaW5kZXggYjEyNzg4OC4uMjhkNWMy
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKICNpbmNsdWRlIDxjYWlyby5oPgogCkBAIC03MCwxMSAr
NzEsNiBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1jYWlyb19zdXJmYWNlX3QqIEltYWdlQnVm
ZmVyOjpzdXJmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdXJmYWNlOwotfQotCiBJbWFn
ZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1hZ2UpIHsKQEAg
LTgyLDcgKzc4LDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgICAg
IC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUuCiAgICAgICAgIEFTU0VSVChjb250ZXh0
KCkpOwogICAgICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBz
dXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFn
ZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX3N1cmZhY2UpKSk7CisgICAgICAgIG1faW1hZ2Uu
c2V0KEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9zdXJmYWNl
KSkpOwogICAgIH0KICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44NmU1MTNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIK
KworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fcGF0
dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdAoreworICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IGltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
aWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNhaXJvX3BhdHRlcm5fdCog
cGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworICAg
IGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmcGF0dGVyblRyYW5zZm9ybSk7Cisg
ICAgaWYgKG1fcmVwZWF0WCB8fCBtX3JlcGVhdFkpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0
X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKKyAgICByZXR1cm4gcGF0dGVy
bjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAppbmRleCA4NmIxYTlhLi4zODhjNGIyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkNvbnRleHQu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDg5LDcgKzQ5MCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyCiAgICAgCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRm
b3JtQ29udGV4dCgpLCByZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBD
R0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4
dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJl
Y3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmNnSW1hZ2UoKSk7CisgICAgQ0dDb250ZXh0Q2xpcFRv
TWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXpl
KCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKICAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0Lmhl
aWdodCgpKTsKIH0KQEAgLTg5Miw2ICs4OTMsMzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQogICAgIH0KIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQor
eworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAg
IHJldHVybjsKKworICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UocGxh
dGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShw
YXR0ZXJuU3BhY2UpOworCisgICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOworICAg
IENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4ocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0
dGVybiwgJnBhdHRlcm5BbHBoYSk7CisgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRl
cm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQ
YXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBw
YXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9y
bVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJu
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENHQ29udGV4dFNldEZp
bGxDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOworICAgIENHQ29s
b3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKKworICAgIGNvbnN0IENHRmxvYXQgcGF0dGVy
bkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihwbGF0Zm9ybUNvbnRleHQo
KSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKKyAgICBDR1BhdHRlcm5SZWxlYXNl
KHBsYXRmb3JtUGF0dGVybik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKaW5kZXggZGQ1MjE5Mi4uNjIwNzRhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEltYWdl
QnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAg
ICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxl
YXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdl
LnNldChuZXcgQml0bWFwSW1hZ2UoY2dJbWFnZSkpOworICAgICAgICBtX2ltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKICAgICB9CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
CiB9CkBAIC0xNTMsOSArMTUzLDggQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVy
OjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBo
YTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXgg
KyAyXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0g
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwpAQCAtMjA1LDkgKzIwNCw4
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uCiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKaW5kZXggY2FkZGMwNS4uOTkzZjQ0
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmgKQEAgLTM4LDE0ICszOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQ
REZEb2N1bWVudEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBE
RkRvY3VtZW50SW1hZ2UoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJ
bWFnZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQREZEb2N1bWVudEltYWdlKTsKKyAgICAgICAgfQogICAgICAgICB+UERGRG9jdW1lbnRJbWFn
ZSgpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKIAorICAgICAgICAvLyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJy
ZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8g
cHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9
IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Owog
CiAgICAgcHJpdmF0ZToKKyAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmUxZjdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorCisjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5m
bywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdl
ID0gc3RhdGljX2Nhc3Q8SW1hZ2UqPihpbmZvKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIGlmICgh
cGxhdGZvcm1JbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFw
aGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKKyAgICAgICAgRmxvYXRS
ZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdo
dChwbGF0Zm9ybUltYWdlKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCByZWN0
LCBwbGF0Zm9ybUltYWdlKTsKK30KKworc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFj
ayh2b2lkKiBpbmZvKQoreworICAgIHN0YXRpY19jYXN0PEltYWdlKj4oaW5mbyktPmRlcmVmKCk7
Cit9CisKK0NHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgSW50UmVjdCB0aWxlUmVj
dCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnNjYWxlKDEsIC0xKTsK
KyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCAtdGlsZVJlY3QuaGVpZ2h0KCkpOwor
CisgICAgLy8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3Rl
cCwgbm90aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwor
ICAgIC8vIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgorICAgIC8vIElOVF9NQVgg
aXMgYWxtb3N0IGNvcnJlY3QsIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG51bWJlciB3cmFw
cGluZyBvY2N1cmluZyBtYWtpbmcgdGhlIGZpbGwKKyAgICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxs
ZWQgY29ycmVjdGx5LiAKKyAgICAvLyBTbywganVzdCBwaWNrIGEgcmVhbGx5IGxhcmdlIG51bWJl
ciB0aGF0IHdvcmtzLiAKKyAgICBmbG9hdCB4U3RlcCA9IG1fcmVwZWF0WCA/IHRpbGVSZWN0Lndp
ZHRoKCkgOiAoMTAwMDAwMDAwLjBmKTsKKyAgICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHRp
bGVSZWN0LmhlaWdodCgpIDogKDEwMDAwMDAwMC4wZik7CisKKyAgICAvLyBUaGUgcGF0dGVybiB3
aWxsIHJlbGVhc2UgdGhlIHRpbGUgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5S
ZWxlYXNlQ2FsbGJhY2sKKyAgICB0aWxlSW1hZ2UoKS0+cmVmKCk7CisKKyAgICBjb25zdCBDR1Bh
dHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBw
YXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CisgICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZSh0aWxl
SW1hZ2UoKSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKKyAgICAg
ICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFj
a3MpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bWFnZU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmlu
ZGV4IDgxNmY5Y2IuLmEwZDI1N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCkBAIC01MiwyNCArNTIsMjIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0
ZVBsYXRmb3JtRGF0YSgpCiAgICAgbV90aWZmUmVwID0gMDsKIH0KIAotSW1hZ2UqIEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgc3Rh
dGljIEJpdG1hcEltYWdlIG51bGxJbWFnZTsKLSAgICAKICAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOltXZWJDb3JlQnVuZGxlRmluZGVyIGNsYXNzXV07CiAg
ICAgTlNTdHJpbmcgKmltYWdlUGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOltOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpuYW1lXSBvZlR5cGU6QCJ0aWZmIl07CiAgICAgTlNEYXRh
ICpuYW1lZEltYWdlRGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTppbWFnZVBh
dGhdOwogICAgIGlmIChuYW1lZEltYWdlRGF0YSkgewotICAgICAgICBJbWFnZSogaW1hZ2UgPSBu
ZXcgQml0bWFwSW1hZ2U7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CiAgICAgICAgIGltYWdlLT5zZXREYXRhKFNoYXJlZEJ1ZmZlcjo6d3JhcE5T
RGF0YShuYW1lZEltYWdlRGF0YSksIHRydWUpOwotICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAg
ICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gV2UgaGF2
ZSByZXBvcnRzIGluZGljYXRpbmcgcmVzb3VyY2UgbG9hZHMgYXJlIGZhaWxpbmcsIGJ1dCB3ZSBk
b24ndCB5ZXQga25vdyB0aGUgcm9vdCBjYXVzZShzKS4KICAgICAvLyBUd28gdGhlb3JpZXMgYXJl
IGJhZCBpbnN0YWxscyAoaW1hZ2UgZmlsZXMgYXJlIG1pc3NpbmcpLCBhbmQgdG9vLW1hbnktb3Bl
bi1maWxlcy4KICAgICAvLyBTZWUgcmRhcjovLzU2MDczODEKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gJm51bGxJbWFnZTsKKyAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFn
ZSgpOwogfQogCiBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggN2UyYzdmYy4uOTRmY2VkOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNTQ2LDggKzU0Niw3IEBAIHZvaWQgUmVuZGVySW1h
Z2U6OmNhbGNQcmVmV2lkdGhzKCkKIAogSW1hZ2UqIFJlbmRlckltYWdlOjpudWxsSW1hZ2UoKQog
ewotICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBzaGFyZWROdWxsSW1hZ2U7Ci0gICAgcmV0dXJuICZz
aGFyZWROdWxsSW1hZ2U7CisgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGU0MGJl
NGIuLjQxMmYyY2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MzAsMTEgKzE0
MzAsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNz
Q29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnMKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAvLyBQYWludCB0aGUgcmVzaXplciBjb250cm9sLgotICAgICAgICBzdGF0aWMgSW1h
Z2UqIHJlc2l6ZUNvcm5lckltYWdlOworICAgICAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiByZXNp
emVDb3JuZXJJbWFnZTsKICAgICAgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKICAgICAgICAg
ICAgIHJlc2l6ZUNvcm5lckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0
QXJlYVJlc2l6ZUNvcm5lciIpOwogICAgICAgICBJbnRQb2ludCBpbWFnZVBvaW50KHNjcm9sbENv
cm5lci5yaWdodCgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPndpZHRoKCksIHNjcm9sbENvcm5lci5i
b3R0b20oKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7Ci0gICAgICAgIHAtPmRyYXdJ
bWFnZShyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VQb2ludCk7CisgICAgICAgIHAtPmRyYXdJbWFn
ZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgaW1hZ2VQb2ludCk7CiAKICAgICAgICAgLy8gRHJh
dyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJl
IGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCiAgICAgICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVk
ZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCmluZGV4IDc4ODU2YzUuLmNjY2U3ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKQEAgLTE3NSwxNiArMTc1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICByZW5kZXJTdWJ0cmVlVG9JbWFnZShtX2ZyYW1lQ2FjaGUuZ2V0KCksIG1fZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKTsKICAgICB9Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgcmV0dXJuIG1fZnJh
bWVDYWNoZS0+Y2dJbWFnZSgpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIG1fZnJh
bWVDYWNoZS0+cGl4bWFwKCk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICByZXR1cm4gbV9m
cmFtZUNhY2hlLT5zdXJmYWNlKCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci0jZW5kaWYKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdl
ZChib29sIGFsbERhdGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmggYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCmluZGV4IDNlNjdh
N2MuLjAzYmI1MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgK
KysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaApAQCAtNDIsNyArNDIsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIFNWR0ltYWdlIDogcHVibGljIElt
YWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJ
bWFnZShvYnNlcnZlcikpOworICAgICAgICB9CiAgICAgICAgIH5TVkdJbWFnZSgpOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTU0
LDkgKzU3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICAgICAgLy8g
RklYTUU6IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2ls
bCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMg
YXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVj
b2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1
bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAg
ICAgICAgCiBwcml2YXRlOgorICAgICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
ZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlclBhdHRlcm5DZy5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlclBhdHRlcm5DZy5jcHAKaW5kZXggMDdmZjQ3Yy4uNDE2ZDVmZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcApAQCAtMzgs
NyArMzgsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250
ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgcGF0dGVybkltYWdlLT5zaXplKCkuaGVp
Z2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEuMGYsIC0xLjBmKTsKLSAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHBhdHRlcm5JbWFnZS0+c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+Y2dJbWFnZSgpKTsKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHBhdHRlcm5JbWFnZS0+c2l6ZSgpKSksIHBhdHRlcm5JbWFnZS0+aW1hZ2UoKS0+Z2V0Q0dJ
bWFnZVJlZigpKTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1t
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQppbmRleCA3
ZmNiZmU2Li5lYzZiMzQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdS
ZXNvdXJjZU1hc2tlckNnLm1tCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291
cmNlTWFza2VyQ2cubW0KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFNWR1Jlc291cmNlTWFza2Vy
OjphcHBseU1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJv
dQogICAgIENJQ29udGV4dCogY2lHcmF5c2NhbGVDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0
V2l0aENHQ29udGV4dDpncmF5U2NhbGVDb250ZXh0IG9wdGlvbnM6bmlsXTsKIAogICAgIC8vIFRy
YW5zZm9ybSBjb2xvcml6ZWQgbWFzayB0byBncmF5IHNjYWxlCi0gICAgQ0lJbWFnZSogY29sb3JN
YXNrID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTptX21hc2stPmNnSW1hZ2UoKV07CisgICAg
Q0lJbWFnZSogY29sb3JNYXNrID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTptX21hc2stPmlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKV07CiAgICAgaWYgKCFjb2xvck1hc2spCiAgICAgICAgIHJl
dHVybjsKICAgICBDSUltYWdlKiBncmF5U2NhbGVNYXNrID0gdHJhbnNmb3JtSW1hZ2VJbnRvR3Jh
eXNjYWxlTWFzayhjb2xvck1hc2spOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22756</attachid>
            <date>2008-08-12 15:11:17 -0700</date>
            <delta_ts>2008-08-12 17:41:12 -0700</delta_ts>
            <desc>Fifth pass, try to fix the non-mac builds</desc>
            <filename>Fifth-pass-try-to-fix-the-non-mac-builds.patch</filename>
            <type>text/plain</type>
            <size>86464</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MWViNjQ3MmQ2MDZmZmQxNGZmNjhjMDU2ZWZlNWVjZWQ3YTIzMGJiYgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOGFmNGRi
My4uYzBhMjAwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTgzLDYgKzE1ODMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGVuLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9u
dERhdGEuY3BwIFwKQEAgLTE4NjAsNiArMTg2Miw3IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udENhY2hlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGFlM2VjNWYuLjJlNDI0ZDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzg5
LDYgKzc4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vS1VSTC5jcHAg
XApAQCAtOTUwLDYgKzk1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ludFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ludFNpemVRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0
aWxsSW1hZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVR
dC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGFlYzZjYTQuLjM1NmYyNzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzg5Myw2ICszODkzLDE0
IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXR0ZXJuLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQ
YXR0ZXJuLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCINCiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTQ3MjgsNiArNDczNiwyNiBAQAogCQkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xQYXR0ZXJuQ0cuY3BwIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2lu
MzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJ
CTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJ
CQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcUERGRG9jdW1lbnRJbWFnZS5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNDg5ZmIwZC4uNDI2Zjc1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE4OTgsNiArMTg5OCw3IEBACiAJCUE4MDlGMTQ4MEI3Mzc5M0IwMDJF
NEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAgKi87IH07CiAJCUE4MDlGMUFBMEI3MzdGQjYwMDJFNEQ3RiAv
KiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCAqLzsgfTsKIAkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0RDdGIC8qIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBOTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJQTgwQTM4RkUwRTUwQ0M4MjAwQTI1RUJDIC8qIFBh
dHRlcm5DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLzsgfTsKIAkJQTgw
RTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTUwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0
aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjk5LDYgKzI3MDAs
OCBAQAogCQlBOEY0NkI4MTBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZHU3RyaW5nTGlzdC5oIGlu
IENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODVENzlBRDIwQUNBMTdFQjAwRjAyRkM1IC8qIERPTVNWR1N0cmluZ0xpc3QuaCAqLzsgfTsK
IAkJQThGNEZCOTQwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjkzMEMxNjlFN0Iw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggKi87IH07CiAJCUE4RjRGQjk2MEMxNjlFODUw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRl
cm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2
RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVFMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUw
MDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJF
OSAvKiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi87IH07CiAJCUE5
QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEU1MEQ3NDVFMTgwMDY0NDJF
OSAvKiBNaW1lVHlwZUFycmF5LmNwcCAqLzsgfTsKQEAgLTMxNjAsNyArMzE2Myw2IEBACiAJCUIy
NzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnRDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovOyB9
OwogCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUQwQjA1MzgxNDAwMkNF
NjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovOyB9OwogCQlCMjc1MzU1RTBCMDUz
ODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAg
Ki87IH07CiAJCUIyNzUzNTVGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NjAwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50
Q0cuY3BwICovOyB9OwpAQCAtNjM5MCw2ICs2MzkyLDcgQEAKIAkJQTgwOUYxNDYwQjczNzkzQTAw
MkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjFB
OTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVC
QyAvKiBQYXR0ZXJuQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGF0dGVybkNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02OTI5LDYgKzY5MzIsOCBAQAogCQlBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNW
R1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVu
ZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5
RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaW1lVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBN
aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8q
IE1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzUzOSw3
ICs3NTQ0LDYgQEAKIAkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2ludENHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGbG9hdFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQ
b2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRQb2lu
dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDk1LDcgKzEyMDk5LDYg
QEAKIAkJCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAog
CQkJCUJDNTNDNjBBMERBNTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKIAkJCQlC
MkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAotCQkJ
CUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUuaCAqLywKIAkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAog
CQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKQEAg
LTEyMTA1LDYgKzEyMTA4LDcgQEAKIAkJCQlCMjc1MzUzNTBCMDUzODE0MDAyQ0U2NEYgLyogUGF0
aENHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJ
bWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50
SW1hZ2UuaCAqLywKKwkJCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2c7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMTIyMTMsNiArMTIyMTcsOCBAQAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4
dFJ1bi5oICovLAogCQkJCUU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmgg
Ki8sCisJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQlB
OEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGdyYXBoaWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0MjczLDcgKzE0
Mjc5LDYgQEAKIAkJCQlCMkMzREE3MDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBF
IC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI3NTM1NUQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJBMDE1QUIwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4Q0ZGN0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUQwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxBcHBsZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE1Mzg5LDYgKzE1Mzk0LDcgQEAK
IAkJCQkzMUMwRkY0QjBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEMwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEUw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xNTQ0Myw5ICsxNTQ0OSw2IEBACiAJCQlwcm9kdWN0UmVmR3JvdXAg
PSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGly
UGF0aCA9ICIiOwogCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXByb2plY3RSb290cyA9ICgKLQkJ
CQkiIiwKLQkJCSk7CiAJCQl0YXJnZXRzID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFC
QyAvKiBXZWJDb3JlICovLAogCQkJCUREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVk
IFNvdXJjZXMgKi8sCkBAIC0xNzE3NSw2ICsxNzE3OCw4IEBACiAJCQkJMzFDMEZGM0YwRTRDRUZB
QzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxQzBGRjRBMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJL
aXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlBOEZBNkU1RTBFNENGREVE
MDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBBMzhGRTBFNTBD
QzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApp
bmRleCBkMmYwMzNkLi4xNmVkZWJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtNzA5LDYgKzcwOSw3IEBA
IFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2Vi
Q29yZS4KICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL25ldHdv
cmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWwuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0
dG9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAKaW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0
b25Db250cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihi
dXR0b25IZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFn
ZS0+aXNOdWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJ
bWFnZT4gYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1
dHRvbiIpOworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2Uo
YnV0dG9uSW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZElt
YWdlKGJ1dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1
dHRvbi5nZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNw
cAppbmRleCA3NjIwNzBjLi40NGZhMjFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
UGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwx
ODkgKzI2LDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVy
bi5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwg
dHlwZSA9PSAicmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVw
ZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAodHlwZSA9PSAibm8tcmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gZmFsc2U7CiAg
ICAgICAgIHJlcGVhdFkgPSBmYWxzZTsKLSAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmICh0eXBlID09ICJyZXBlYXQteCIpIHsKICAgICAgICAgcmVwZWF0WCA9
IHRydWU7CiAgICAgICAgIHJlcGVhdFkgPSBmYWxzZTsKLSAgICAgICAgZWMgPSAwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh0eXBlID09ICJyZXBlYXQteSIpIHsKICAgICAgICAg
cmVwZWF0WCA9IGZhbHNlOwogICAgICAgICByZXBlYXRZID0gdHJ1ZTsKLSAgICAgICAgZWMgPSAw
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVjID0gU1lOVEFYX0VSUjsKIH0KIAotI2lm
IFBMQVRGT1JNKENHKQotCi1DYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENHSW1hZ2VSZWYg
aW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAg
IDogbV9wbGF0Zm9ybUltYWdlKGltYWdlKQotICAgICwgbV9jYWNoZWRJbWFnZSgwKQotICAgICwg
bV9yZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKLSAgICAsIG1fb3Jp
Z2luQ2xlYW4ob3JpZ2luQ2xlYW4pCi17Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1D
YW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX3BsYXRm
b3JtSW1hZ2UoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSkpCi0gICAgLCBtX2NhY2hl
ZEltYWdlKDApCi0gICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKLSAgICAsIG1fcmVwZWF0WShyZXBl
YXRZKQorQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgIDogbV9wYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikK
IHsKIH0KIAotI2VuZGlmCi0KLUNhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbikKLSAgICA6IG1fY2FjaGVkSW1hZ2UoY2FjaGVkSW1hZ2UpCi0jaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgLCBtX3BsYXRmb3JtSW1hZ2UoMCkKLSNlbmRpZgotICAgICwgbV9yZXBlYXRYKHJl
cGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKLSAgICAsIG1fb3JpZ2luQ2xlYW4ob3Jp
Z2luQ2xlYW4pCi17Ci0gICAgaWYgKGNhY2hlZEltYWdlKQotICAgICAgICBjYWNoZWRJbWFnZS0+
YWRkQ2xpZW50KHRoaXMpOwotfQotCi1DYW52YXNQYXR0ZXJuOjp+Q2FudmFzUGF0dGVybigpCi17
Ci0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkKLSAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fcGxhdGZvcm1JbWFnZSk7Ci0jZW5kaWYKLSAgICBpZiAo
bV9jYWNoZWRJbWFnZSkKLSAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OwotfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0KLXN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbyktPnBsYXRmb3JtSW1h
Z2UoKTsKLSAgICBpZiAocGxhdGZvcm1JbWFnZSkgewotICAgICAgICBDR1JlY3QgcmVjdCA9IEdy
YXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAotICAgICAgICAgICAg
RmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdl
dEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4o
aW5mbyktPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOwotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCByZWN0ID0gR3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoaW1hZ2UtPnJlY3QoKSk7Ci0KLSAg
ICBpZiAoaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkgewotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgcmVjdCwgaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhpcyBjb2RlIHRvIHVzZSB0aGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQgCi0gICAgICAgIC8vIGRyYXdpbmcgQVBJIGluIGFsbCBjYXNlcy4gVGhlbiwgdGhp
cyBkaWREcmF3IGNhbGwgd2lsbCBoYXBwZW4gCi0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFu
ZCB3ZSBjYW4gcmVtb3ZlIGl0LgotICAgICAgICBjYWNoZWRJbWFnZS0+ZGlkRHJhdyhpbWFnZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHQoY29udGV4dCku
ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQotewotICAgIHN0YXRpY19jYXN0PENhbnZhc1BhdHRlcm4qPihp
bmZvKS0+ZGVyZWYoKTsKLX0KLQotQ0dQYXR0ZXJuUmVmIENhbnZhc1BhdHRlcm46OmNyZWF0ZVBh
dHRlcm4oY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR1JlY3Qg
cmVjdDsKLSAgICByZWN0Lm9yaWdpbi54ID0gMDsKLSAgICByZWN0Lm9yaWdpbi55ID0gMDsKLSAg
ICBpZiAobV9wbGF0Zm9ybUltYWdlKSB7Ci0gICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IENHSW1h
Z2VHZXRXaWR0aChtX3BsYXRmb3JtSW1hZ2UuZ2V0KCkpOwotICAgICAgICByZWN0LnNpemUuaGVp
Z2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX3BsYXRmb3JtSW1hZ2UuZ2V0KCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2NhY2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBp
ZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJlY3Quc2l6ZS53aWR0
aCA9IGltYWdlLT53aWR0aCgpOwotICAgICAgICByZWN0LnNpemUuaGVpZ2h0ID0gaW1hZ2UtPmhl
aWdodCgpOwotICAgIH0KLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0g
PQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShDR0FmZmluZVRyYW5zZm9ybVNj
YWxlKHRyYW5zZm9ybSwgMSwgLTEpLCAwLCAtcmVjdC5zaXplLmhlaWdodCk7Ci0gICAgCi0gICAg
Ly8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90
aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwotICAgIC8v
IHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgotICAgIC8vIElOVF9NQVggaXMgYWxt
b3N0IGNvcnJlY3QsIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBv
Y2N1cmluZyBtYWtpbmcgdGhlIGZpbGwKLSAgICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29y
cmVjdGx5LiAKLSAgICAvLyBTbywganVzdCBwaWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0
IHdvcmtzLiAKLSAgICBmbG9hdCB4U3RlcCA9IG1fcmVwZWF0WCA/IHJlY3Quc2l6ZS53aWR0aCA6
ICgxMDAwMDAwMDAuMGYpOwotICAgIGZsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gcmVjdC5zaXpl
LmhlaWdodCA6ICgxMDAwMDAwMDAuMGYpOwotCi0gICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tz
IHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayB9OwotICAgIHJlZigpOwotICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUodGhpcywg
cmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAsIHlTdGVwLAotICAgICAgICBrQ0dQYXR0ZXJu
VGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNhbGxiYWNrcyk7Ci19Ci0KLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWlyb19wYXR0ZXJuX3QqIENhbnZhc1BhdHRlcm46OmNy
ZWF0ZVBhdHRlcm4oY29uc3QgY2Fpcm9fbWF0cml4X3QmIG0pCi17Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybUltYWdlKSB7Ci0gICAgICAgIHN1
cmZhY2UgPSBtX3BsYXRmb3JtSW1hZ2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9
IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCk7Ci0gICAgICAgIGlmICghaW1hZ2UpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIH0KLQotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9m
b3Jfc3VyZmFjZShzdXJmYWNlKTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVy
biwgJm0pOwotICAgIGlmIChtX3JlcGVhdFggfHwgbV9yZXBlYXRZKQotICAgICAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgcmV0
dXJuIHBhdHRlcm47Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
Q2FudmFzUGF0dGVybi5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAppbmRleCA2ODkx
ZGE2Li43OWM3ODcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCisr
KyBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKQEAgLTI2LDc2ICsyNiwzNCBAQAogI2lm
bmRlZiBDYW52YXNQYXR0ZXJuX2gKICNkZWZpbmUgQ2FudmFzUGF0dGVybl9oCiAKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBQ
TEFURk9STShDRykKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxpZiBQTEFURk9STShDQUlS
TykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIENhY2hlZEltYWdlOworICAgIGNsYXNzIEltYWdlOwogICAgIGNsYXNzIFN0cmlu
ZzsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBDYW52YXNQ
YXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzUGF0dGVybj4sIHByaXZhdGUgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgeworICAgIGNsYXNzIENhbnZhc1BhdHRlcm4gOiBwdWJsaWMgUmVmQ291
bnRlZDxDYW52YXNQYXR0ZXJuPiB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgdm9pZCBw
YXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJl
cGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoQ0dJbWFnZVJlZiBpbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGF0dGVybihpbWFnZSwgcmVwZWF0
WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKLSAgICAgICAgfQotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9y
aWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc1BhdHRlcm4oc3VyZmFjZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IGNyZWF0ZShDYWNoZWRJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBi
b29sIG9yaWdpbkNsZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNQYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAg
ICAgICB9Ci0gICAgICAgIHZpcnR1YWwgfkNhbnZhc1BhdHRlcm4oKTsKLQotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BsYXRmb3JtSW1hZ2UuZ2V0KCk7IH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBj
YWlyb19zdXJmYWNlX3QqIHBsYXRmb3JtSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
SW1hZ2U7IH0KLSNlbmRpZgotICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEltYWdlOyB9Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAg
Q0dQYXR0ZXJuUmVmIGNyZWF0ZVBhdHRlcm4oY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mKTsKLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIGNyZWF0ZVBhdHRl
cm4oY29uc3QgY2Fpcm9fbWF0cml4X3QmKTsKLSNlbmRpZgorICAgICAgICAKKyAgICAgICAgY29u
c3QgUGF0dGVybiYgcGF0dGVybigpIHsgcmV0dXJuIG1fcGF0dGVybjsgfQogCiAgICAgICAgIGJv
b2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9CiAKICAgICBw
cml2YXRlOgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBDYW52YXNQYXR0ZXJuKENHSW1hZ2VS
ZWYsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgICAgICBDYW52YXNQYXR0ZXJuKGNhaXJvX3N1cmZhY2VfdCos
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKLSNlbmRpZgot
ICAgICAgICBDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOworICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdlKiwg
Ym9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgIGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX3BsYXRmb3Jt
SW1hZ2U7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBj
b25zdCBtX3BsYXRmb3JtSW1hZ2U7Ci0jZW5kaWYKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNvbnN0
IG1fY2FjaGVkSW1hZ2U7Ci0gICAgICAgIGNvbnN0IGJvb2wgbV9yZXBlYXRYOwotICAgICAgICBj
b25zdCBib29sIG1fcmVwZWF0WTsKKyAgICAgICAgUGF0dGVybiBtX3BhdHRlcm47CiAgICAgICAg
IGJvb2wgbV9vcmlnaW5DbGVhbjsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCmluZGV4IGU3YjZiMGQuLjA4NDdkYWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xMTIxLDE0ICsxMTIxLDIwIEBAIFBhc3NS
ZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0
ZXJuKEhUTUxJbWFnZUVsZW1lCiAgICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlw
ZShyZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgYm9vbCBvcmlnaW5DbGVhbiA9IHRydWU7Ci0gICAg
aWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0g
ICAgICAgIEtVUkwgdXJsKGNhY2hlZEltYWdlLT51cmwoKSk7Ci0gICAgICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwotICAgICAg
ICBvcmlnaW5DbGVhbiA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5BY2Nlc3Mob3JpZ2luLmdldCgpKTsKKworICAgIGlmICghaW1hZ2UtPmNvbXBsZXRlKCkpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UtPmNhY2hlZEltYWdlKCks
IHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKKworICAgIENhY2hlZEltYWdlKiBjYWNo
ZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVkSW1hZ2UpCisg
ICAgICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoSW1hZ2U6Om51bGxJbWFnZSgpLCBy
ZXBlYXRYLCByZXBlYXRZLCB0cnVlKTsKKworICAgIEtVUkwgdXJsKGNhY2hlZEltYWdlLT51cmwo
KSk7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHVybCk7CisgICAgYm9vbCBvcmlnaW5DbGVhbiA9IG1fY2FudmFzLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3Mob3JpZ2luLmdldCgpKTsKKyAgICByZXR1cm4g
Q2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCByZXBlYXRYLCByZXBl
YXRZLCBvcmlnaW5DbGVhbik7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsCkBAIC0xMTM5LDIzICsxMTQ1LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW0KICAgICBD
YW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKHJlcGV0aXRpb25UeXBlLCByZXBlYXRY
LCByZXBlYXRZLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
KEFkb3B0Q0YsIGNhbnZhcy0+Y3JlYXRlUGxhdGZvcm1JbWFnZSgpKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGlt
YWdlLmdldCgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2FudmFz
LT5jcmVhdGVQbGF0Zm9ybUltYWdlKCk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IENhbnZhc1BhdHRlcm46
OmNyZWF0ZShzdXJmYWNlLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkp
OwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1cm4gcGF0dGVy
bi5yZWxlYXNlKCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+YnVmZmVy
KCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBGbG9hdFJl
Y3QmIHIpCkBAIC0xMTc4LDQ3ICsxMTY4LDIyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwog
CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250
ZXh0PyBvciByZW1vdmVkPwogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIENoZWNrIGZvciBjYXNl
IHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0NvbnRleHRHZXRDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChzdGF0
ZSgpLm1fYXBwbGllZFN0cm9rZVBhdHRlcm4KLSAgICAgICAgICAgICYmIENHQWZmaW5lVHJhbnNm
b3JtRXF1YWxUb1RyYW5zZm9ybShtLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNm
b3JtKSkKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gYy0+Z2V0Q1RNKCk7CisgICAgaWYgKHN0
YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX3N0cm9rZVN0
eWxlUGF0dGVyblRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAKICAgICBDYW52
YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCk7CiAg
ICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR1BhdHRlcm5SZWYgcGxh
dGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAgICBpZiAoIXBsYXRm
b3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIHBhdHRl
cm5TcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7Ci0gICAgQ0dDb250ZXh0U2V0
U3Ryb2tlQ29sb3JTcGFjZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNwYWNlKTsKLSAg
ICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7Ci0KLSAgICBjb25zdCBDR0Zsb2F0
IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjLT5wbGF0
Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKLSAgICBDR1Bh
dHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Ci0KLSAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5
bGVQYXR0ZXJuVHJhbnNmb3JtID0gbTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBDYW52YXNQYXR0ZXJuKiBwYXR0
ZXJuID0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCk7Ci0gICAgaWYgKCFwYXR0ZXJu
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGNhaXJvX21hdHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0p
OwotCi0gICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVh
dGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47
CisgICAgYy0+YXBwbHlTdHJva2VQYXR0ZXJuKHBhdHRlcm4tPnBhdHRlcm4oKSk7CiAKLSAgICBj
YWlyb19zZXRfc291cmNlKGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNhaXJvX3BhdHRlcm5f
ZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQorICAgIHN0YXRlKCku
bV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBjdG07CiAjZW5kaWYKICAgICBzdGF0ZSgp
Lm1fYXBwbGllZFN0cm9rZVBhdHRlcm4gPSB0cnVlOwogfQpAQCAtMTIyOSw0NyArMTE5NCwyMiBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAg
aWYgKCFjKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgY2hlY2sg
YmUgbW92ZWQgaW50byBHcmFwaGljc0NvbnRleHQ/IG9yIHJlbW92ZWQ/CiAjaWYgUExBVEZPUk0o
Q0cpCiAgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxyZWFkeSBz
ZXQuCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5wbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkRmlsbFBhdHRlcm4KLSAgICAg
ICAgICAgICYmIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtLCBzdGF0ZSgpLm1f
ZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhbnZh
c1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCk7Ci0gICAg
aWYgKCFwYXR0ZXJuKQorICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKKyAg
ICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2Zp
bGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgogCi0gICAg
Q0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7
Ci0gICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29s
b3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwot
ICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBwYXR0
ZXJuU3BhY2UpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKLQotICAg
IGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBDR0NvbnRleHRTZXRGaWxsUGF0
dGVybihjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhh
KTsKLSAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Ci0KLSAgICBzdGF0ZSgp
Lm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IG07Ci0jZWxpZiBQTEFURk9STShRVCkKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgQ2FudmFzUGF0
dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKICAgICBpZiAo
IXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4
KGNyLCAmbSk7CisgICAgYy0+YXBwbHlGaWxsUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwog
Ci0gICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQ
YXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNhaXJvX3Bh
dHRlcm5fZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQorICAgIHN0
YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3RtOwogI2VuZGlmCiAgICAgc3Rh
dGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKaW5kZXggNDA3NzM0NC4uMTY4YjczMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTk1LDggKzE5NSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAgICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybTsK
LSAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9y
bTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5z
Zm9ybTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm07CiAjZW5kaWYKICAgICAgICAgfTsKICAgICAgICAgUGF0aCBtX3BhdGg7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0
eWxlLmNwcAppbmRleCBiZTUwMTNhLi5iZWU0ZWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
Q2FudmFzU3R5bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKQEAgLTM0
LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0NvbnRleHQuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UVBh
aW50ZXI+CiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtNjAsMTIgKzY0LDE2IEBAIENhbnZhc1N0eWxl
OjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNT
dHlsZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShDb2xv
clN0cmluZ1dpdGhBbHBoYSksIG1fY29sb3IoY29sb3IpLCBtX2FscGhhKGFscGhhKQorICAgIDog
bV90eXBlKENvbG9yU3RyaW5nV2l0aEFscGhhKQorICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fYWxwaGEoYWxwaGEpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKQotICAgIDogbV90eXBlKEdyYXlMZXZlbCksIG1fYWxwaGEo
YWxwaGEpLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCisgICAgOiBtX3R5cGUoR3JheUxldmVsKQor
ICAgICwgbV9hbHBoYShhbHBoYSkKKyAgICAsIG1fZ3JheUxldmVsKGdyYXlMZXZlbCkKIHsKIH0K
IApAQCAtODAsMTA0ICs4OCw0NyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIH0KIAogQ2FudmFzU3R5bGU6OkNh
bnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50KQotICAgIDogbV90
eXBlKGdyYWRpZW50ID8gR3JhZGllbnQgOiBDb2xvclN0cmluZyksIG1fZ3JhZGllbnQoZ3JhZGll
bnQpCisgICAgOiBtX3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENvbG9yU3RyaW5nKQorICAg
ICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxl
KFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybikKLSAgICA6IG1fdHlwZShwYXR0ZXJu
ID8gSW1hZ2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpLCBtX3BhdHRlcm4ocGF0dGVybikKKyAgICA6
IG1fdHlwZShwYXR0ZXJuID8gSW1hZ2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpCisgICAgLCBtX3Bh
dHRlcm4ocGF0dGVybikKIHsKIH0KIAorc3RhdGljIGlubGluZSBSR0JBMzIgY29sb3JXaXRoT3Zl
cnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCit7CisgICAgUkdC
QTMyIHJnYk9ubHkgPSBjb2xvciAmIDB4MDBGRkZGRkY7CisgICAgUkdCQTMyIHJnYmEgPSByZ2JP
bmx5IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUob3ZlcnJpZGVBbHBoYSkgPDwgMjQ7CisgICAgcmV0
dXJuIHJnYmE7Cit9CisKIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50
ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotI2VuZGlmCiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewogICAgICAg
ICAgICAgUkdCQTMyIGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawog
ICAgICAgICAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAg
ICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAg
KChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikg
LyAyNTUuMGYpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRUGVuIGN1cnJlbnRQ
ZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoKFFDb2xvcihR
UmdiKGNvbG9yKSkpKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihjdXJyZW50UGVuKTsKLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLy8gRklYTUU6IGZpbGwgYW5kIHN0cm9rZSBj
b2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5Ci0gICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY3IsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0jZW5kaWYKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAg
ICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAg
ICAgICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAg
ICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgo
Y29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAw
eEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JN
KFFUKQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAg
ICBRQ29sb3IgY2xyID0gUUNvbG9yKFFSZ2IoY29sb3IpKTsKLSAgICAgICAgICAgIGNsci5zZXRB
bHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0g
ICAgICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxkIGJlIGRl
YWx0IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNy
LAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAg
ICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAg
ICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4g
MjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBtX2FscGhhKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdyYXlMZXZlbDogewotICAg
ICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250
ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2dyYXlM
ZXZlbCwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFDb2xvciBj
bHI7Ci0gICAgICAgICAgICBRUGVuIGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAg
IGNsci5zZXRSZ2JGKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxw
aGEpOwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAg
cC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9n
cmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2Fs
cGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJHQkE6
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBl
bmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAg
IENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBt
X3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAgICBRQ29sb3Ig
Y2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9h
bHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0gICAgICAgICAg
ICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxkIGJlIGRlYWx0IHdpdGgg
c2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBtX3JlZCwg
bV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDTVlLQTogewpAQCAt
MjA4LDc1ICsxNTksMjUgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50
ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZW5kaWYKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7Ci0gICAgICAgICAgICBSR0JBMzIg
Y29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCi0gICAgICAgICAgICBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENv
bG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBm
LAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1
c2goKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiKFFS
Z2IoY29sb3IpKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwotICAg
ICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICAgICAg
UkdCQTMyIHJnYmEgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCisgICAgICAg
ICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgbV9jb2xvcik7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CiAgICAgICAgICAgICBSR0JB
MzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAgICAg
ICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmls
bENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgoY29s
b3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4
KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1
LjBmLAotICAgICAgICAgICAgICAgIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
ICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAgICAgICAgIFFD
b2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiKFFSZ2IoY29sb3IpKTsKLSAgICAgICAg
ICAgIGNsci5zZXRBbHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0
Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5k
aWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVycmlkZUFs
cGhhKGNvbG9yLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIEdyYXlMZXZlbDogewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRG
T1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0o
UVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAg
ICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiRihtX2dyYXlMZXZlbCwg
bV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRC
cnVzaC5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNo
KTsKLSNlbmRpZgorICAgICAgICBjYXNlIEdyYXlMZXZlbDoKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVs
LCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFJHQkE6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0t
aW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgbV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkK
LSAgICAgICAgICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAgICAgICAg
ICAgUUNvbG9yIGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fcmVkLCBtX2dyZWVuLCBt
X2JsdWUsIG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9yKGNscik7
Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisgICAgICAg
IGNhc2UgUkdCQToKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcihtX3Jl
ZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQogICAgICAgICBjYXNlIENNWUtBOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhp
cyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCiAjaWYg
UExBVEZPUk0oQ0cpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCA5MDdjY2NjLi4w
ZDU0NTE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTI3NSw0OCArMjc1LDQg
QEAgSW1hZ2VCdWZmZXIqIEhUTUxDYW52YXNFbGVtZW50OjpidWZmZXIoKSBjb25zdAogICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogCi0jaWYgUExBVEZPUk0oQ0cpCi0KLUNHSW1h
Z2VSZWYgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAotewot
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0UmVmKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHRSZWYpOwotCi0g
ICAgcmV0dXJuIENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHRSZWYpOwotfQotCi0j
ZWxpZiBQTEFURk9STShRVCkKLQotUVBpeG1hcCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlUGxh
dGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyKQotICAgICAgICBy
ZXR1cm4gUVBpeG1hcCgpOwotICAgIHJldHVybiAqbV9pbWFnZUJ1ZmZlci0+cGl4bWFwKCk7Ci19
Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWlyb19zdXJmYWNlX3QqIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1hZ2VC
dWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gTm90ZSB0aGF0IHVubGlrZSBDRywg
b3VyIHJldHVybmVkIGltYWdlIGlzIG5vdCBhIGNvcHkgb3IKLSAgICAvLyBjb3B5LW9uLXdyaXRl
LCBidXQgdGhlIG9yaWdpbmFsLiBUaGlzIGlzIGZpbmUsIHNpbmNlIGl0IGlzIG9ubHkKLSAgICAv
LyBldmVyIHVzZWQgYXMgYSBzb3VyY2UuCi0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1faW1h
Z2VCdWZmZXItPnN1cmZhY2UoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9pbWFn
ZUJ1ZmZlci0+c3VyZmFjZSgpKTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci0+c3VyZmFjZSgp
OwotfQotCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBhMGI3Y2M1
Li5hMTE4MzY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMzAsMTkgKzMwLDYgQEAK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAotI2lmIFBM
QVRGT1JNKENHKQotLy8gRklYTUU6IENHLXNwZWNpZmljIHBhcnRzIG5lZWQgdG8gbW92ZSB0byB0
aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRl
eHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwotI2VsaWYgUExBVEZP
Uk0oUVQpCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQaXhtYXA7Ci1jbGFzcyBRUGFpbnRl
cjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwpAQCAtMTA1LDE1ICs5
Miw4IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBj
b25zdDsKIAotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsgCi0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgQ0dJbWFnZVJlZiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7Ci0jZWxpZiBQ
TEFURk9STShRVCkKLSAgICBRUGl4bWFwIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdDsKLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlUGxhdGZvcm1J
bWFnZSgpIGNvbnN0OwotI2VuZGlmCi0gICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNv
bnN0OworCiAgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVj
dCYpIGNvbnN0OwogICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9h
dFNpemUmKSBjb25zdDsKICAgICBJbnRQb2ludCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZElt
YWdlLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAppbmRleCAzNGEwNjViLi4y
YzdkNGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00OCwyMiArNDgsMjEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2lt
YWdlKDApCiB7Ci0gICAgbV9pbWFnZSA9IDA7CiAgICAgbV9zdGF0dXMgPSBVbmtub3duOwogfQog
CiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgIDogQ2FjaGVkUmVz
b3VyY2UoU3RyaW5nKCksIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2ltYWdlKGltYWdlKQogewot
ICAgIG1faW1hZ2UgPSBpbWFnZTsKICAgICBtX3N0YXR1cyA9IENhY2hlZDsKICAgICBtX2xvYWRp
bmcgPSBmYWxzZTsKIH0KIAogQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCiB7Ci0gICAgZGVs
ZXRlIG1faW1hZ2U7CiB9CiAgICAgCiB2b2lkIENhY2hlZEltYWdlOjpsb2FkKERvY0xvYWRlciog
ZG9jTG9hZGVyKQpAQCAtOTMsMTYgKzkyLDE2IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFsbFJlZmVy
ZW5jZXNSZW1vdmVkKCkKIAogc3RhdGljIEltYWdlKiBicm9rZW5JbWFnZSgpCiB7Ci0gICAgc3Rh
dGljIEltYWdlKiBicm9rZW5JbWFnZTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBicm9rZW5J
bWFnZTsKICAgICBpZiAoIWJyb2tlbkltYWdlKQogICAgICAgICBicm9rZW5JbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlIik7Ci0gICAgcmV0dXJuIGJyb2tl
bkltYWdlOworICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKIH0KIAogc3RhdGljIEltYWdl
KiBudWxsSW1hZ2UoKQogewotICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBudWxsSW1hZ2U7Ci0gICAg
cmV0dXJuICZudWxsSW1hZ2U7CisgICAgc3RhdGljIFJlZlB0cjxCaXRtYXBJbWFnZT4gbnVsbElt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIHJldHVybiBudWxsSW1hZ2UuZ2V0KCk7
CiB9CiAKIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdApAQCAtMTExLDcgKzExMCw3
IEBAIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdAogICAgICAgICByZXR1cm4gYnJv
a2VuSW1hZ2UoKTsKIAogICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZTsK
KyAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiAKICAgICByZXR1cm4gbnVsbEltYWdlKCk7
CiB9CkBAIC0xOTUsMTQgKzE5NCwxMyBAQCBJbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3Qo
ZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHZvaWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9ic2VydmVy
cygpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAg
IHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQorICAgIHdoaWxlIChD
YWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQogICAgICAgICBjLT5pbWFnZUNoYW5n
ZWQodGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKIHsKICAgICBkZXN0cm95
RGVjb2RlZERhdGEoKTsKLSAgICBkZWxldGUgbV9pbWFnZTsKICAgICBtX2ltYWdlID0gMDsKICAg
ICBzZXRFbmNvZGVkU2l6ZSgwKTsKIH0KQEAgLTIxNCwxNyArMjEyLDE3IEBAIGlubGluZSB2b2lk
IENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBQTEFURk9S
TShDRykKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYi
KSB7Ci0gICAgICAgIG1faW1hZ2UgPSBuZXcgUERGRG9jdW1lbnRJbWFnZTsKKyAgICAgICAgbV9p
bWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCiAjaWYgRU5BQkxFKFNWR19BU19JTUFHRSkKICAgICBpZiAobV9yZXNwb25zZS5t
aW1lVHlwZSgpID09ICJpbWFnZS9zdmcreG1sIikgewotICAgICAgICBtX2ltYWdlID0gbmV3IFNW
R0ltYWdlKHRoaXMpOworICAgICAgICBtX2ltYWdlID0gU1ZHSW1hZ2U6OmNyZWF0ZSh0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1faW1hZ2UgPSBuZXcgQml0bWFw
SW1hZ2UodGhpcyk7CisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUodGhpcyk7CiB9
CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuaCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKaW5kZXggMGEzZDI0OC4uMjEz
YzlmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAorKysgYi9XZWJD
b3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjcmVhdGVJbWFnZSgpOwogICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzKCk7CiAKLSAgICBJ
bWFnZSogbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggYTZiNGRlMC4uM2E5MDg1MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtMzk5OSw3ICszOTk5LDExIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1l
TG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKQogICAgIGlmIChvcmln
aW5hbFVSTC5pc0VtcHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYmxhbmtVUkwoKTsKICAg
ICAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVy
bCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCksIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyBt
X2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT50cmVlKCktPm5hbWUoKSA6ICIiLCBkb2NMb2FkZXIg
PyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIik7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9m
cmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICBTdHJpbmcgcGFyZW50ID0gcGFyZW50RnJhbWUg
PyBwYXJlbnRGcmFtZS0+dHJlZSgpLT5uYW1lKCkgOiAiIjsKKyAgICBTdHJpbmcgdGl0bGUgPSBk
b2NMb2FkZXIgPyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIjsKKworICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50cmVlKCktPm5h
bWUoKSwgcGFyZW50LCB0aXRsZSk7CiAgICAgaXRlbS0+c2V0T3JpZ2luYWxVUkxTdHJpbmcob3Jp
Z2luYWxVUkwuc3RyaW5nKCkpOwogICAgIAogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSBpZiB0aGlz
IGlzIGEgUE9TVApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNw
cCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAKaW5kZXggOGIzZDVmOS4uZjA3
MGNjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAorKysg
Yi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCkBAIC02NiwxMiArNjYsMTIgQEAg
dm9pZCBJY29uUmVjb3JkOjpzZXRJbWFnZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEpCiB7CiAgICAgLy8gSXQncyBva2F5IHRvIGRlbGV0ZSB0aGUgcmF3IGltYWdlIGhlcmUuIEFu
eSBleGlzdGluZyBjbGllbnRzIHVzaW5nIHRoaXMgaWNvbiB3aWxsIGJlCiAgICAgLy8gbWFuYWdp
bmcgYW4gaW1hZ2UgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgY29weSBvZiB0aGlzIHJhdyBpbWFn
ZSBkYXRhLgotICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFnZSgpKTsKKyAgICBtX2ltYWdl
ID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogCiAgICAgLy8gQ29weSB0aGUgcHJvdmlkZWQgZGF0
YSBpbnRvIHRoZSBidWZmZXIgb2YgdGhlIG5ldyBJbWFnZSBvYmplY3QuCiAgICAgaWYgKCFtX2lt
YWdlLT5zZXREYXRhKGRhdGEsIHRydWUpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJN
YW51YWwgaW1hZ2UgZGF0YSBmb3IgaWNvblVSTCAnJXMnIEZBSUxFRCAtIGl0IHdhcyBwcm9iYWJs
eSBpbnZhbGlkIGltYWdlIGRhdGEiLCBtX2ljb25VUkwuYXNjaWkoKS5kYXRhKCkpOwotICAgICAg
ICBtX2ltYWdlLnNldCgwKTsKKyAgICAgICAgbV9pbWFnZS5jbGVhcigpOwogICAgIH0KICAgICAK
ICAgICBtX2RhdGFTZXQgPSB0cnVlOwpAQCAtODIsNyArODIsNyBAQCB2b2lkIEljb25SZWNvcmQ6
OmxvYWRJbWFnZUZyb21SZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSkKICAgICBpZiAoIXJl
c291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1faW1hZ2Uuc2V0KEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZSkpOworICAgIG1faW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIG1fZGF0YVNldCA9IHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5oIGIvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKaW5kZXggNjFkMzFmYS4uYWFlYTc4NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uUmVjb3JkLmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0
cmluZyBtX2ljb25VUkw7CiAgICAgdGltZV90IG1fc3RhbXA7Ci0gICAgT3duUHRyPEltYWdlPiBt
X2ltYWdlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICAKICAgICBIYXNoU2V0PFN0
cmluZz4gbV9yZXRhaW5pbmdQYWdlVVJMczsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKaW5kZXggN2NhZjM5Zi4uZWMzOTQ4MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtOTEsMTIgKzkxLDE0IEBAIGNsYXNzIEJpdG1h
cEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSNpZiBQTEFURk9S
TShDRykKLSAgICBCaXRtYXBJbWFnZShDR0ltYWdlUmVmLCBJbWFnZU9ic2VydmVyKiA9IDApOwot
I2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQml0bWFwSW1hZ2UoY2Fpcm9fc3VyZmFjZV90Kiwg
SW1hZ2VPYnNlcnZlciogPSAwKTsKLSNlbmRpZgotICAgIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2
ZXIqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNyZWF0ZShOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBJbWFnZShuYXRpdmVJbWFnZSwg
b2JzZXJ2ZXIpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNy
ZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDApCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG9ic2VydmVyKSk7CisgICAgfQogICAgIH5CaXRtYXBJ
bWFnZSgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpAQCAtMTM1LDYgKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gZnJhbWVB
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgQml0bWFwSW1hZ2Uo
TmF0aXZlSW1hZ2VQdHIsIEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAgQml0bWFwSW1hZ2UoSW1h
Z2VPYnNlcnZlciogPSAwKTsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDUyZDJiZDcuLjEy
YmRlM2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC01MSw2ICs1MSwxNiBA
QCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJu
IG1heCgwLCBtaW4oYSwgMjU1KSkgPDwgMjQgfCBtYXgoMCwgbWluKHIsIDI1NSkpIDw8IDE2IHwg
bWF4KDAsIG1pbihnLCAyNTUpKSA8PCA4IHwgbWF4KDAsIG1pbihiLCAyNTUpKTsKIH0KIAoraW50
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCit7CisgICAgcmV0dXJuIG1heCgwLCBtaW4o
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Cit9CisKK1JHQkEz
MiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBh
KQoreworICAgIHJldHVybiBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSA8PCAyNCB8IGNvbG9yRmxv
YXRUb1JHQkFCeXRlKHIpIDw8IDE2IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZykgPDwgOCB8IGNv
bG9yRmxvYXRUb1JHQkFCeXRlKGIpOworfQorCiBzdGF0aWMgZG91YmxlIGNhbGNIdWUoZG91Ymxl
IHRlbXAxLCBkb3VibGUgdGVtcDIsIGRvdWJsZSBodWVWYWwpCiB7CiAgICAgaWYgKGh1ZVZhbCA8
IDAuMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCAxNjAzYzFhLi41YWUzOGE0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC01Niw2ICs1Niw5IEBAIHR5cGVkZWYgdW5z
aWduZWQgUkdCQTMyOyAgICAgICAgLy8gUkdCQSBxdWFkcnVwbGV0CiAKIFJHQkEzMiBtYWtlUkdC
KGludCByLCBpbnQgZywgaW50IGIpOwogUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKKworaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0KTsKK1JHQkEzMiBt
YWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsK
IFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGRvdWJsZSBoLCBkb3VibGUgcywgZG91YmxlIGwsIGRv
dWJsZSBhKTsKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKQEAgLTY2LDYgKzY5LDggQEAgcHVibGljOgogICAgIENvbG9yKFJHQkEzMiBjb2wpIDog
bV9jb2xvcihjb2wpLCBtX3ZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQgZywg
aW50IGIpIDogbV9jb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgbV92YWxpZCh0cnVlKSB7IH0KICAg
ICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgOiBtX2NvbG9yKG1ha2VSR0JBKHIs
IGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICAvLyBDb2xvciBpcyBjdXJyZW50bHkg
bGltaXRlZCB0byAzMmJpdCBSR0JBLCBwZXJoYXBzIHNvbWUgZGF5IHdlJ2xsIHN1cHBvcnQgYmV0
dGVyIGNvbG9ycworICAgIENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
IDogbV9jb2xvcihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSksIG1fdmFsaWQodHJ1
ZSkgeyB9CiAgICAgZXhwbGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CiAgICAgZXhwbGljaXQg
Q29sb3IoY29uc3QgY2hhciopOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oCmluZGV4IGQzODJmMDYuLmIzMjFiOGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTUxLDYgKzUxLDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKKyAg
ICAvLyBBc3N1bWUgdGhhdCBnZW5lcmF0ZWQgY29udGVudCBoYXMgbm8gZGVjb2RlZCBkYXRhIHdl
IG5lZWQgdG8gd29ycnkgYWJvdXQKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcAppbmRleCA3NTBjNThjLi5iOWM3MWY4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIEdyYWRp
ZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBw
bGF0Zm9ybURlc3Ryb3koKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVTdG9wcyhj
b25zdCBHcmFkaWVudDo6Q29sb3JTdG9wICZhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wICZi
KQorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVTdG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBiKQogewogICAgIHJldHVybiBhLnN0
b3AgPCBiLnN0b3A7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKaW5kZXggNzAx
NTliMC4uMGIwZDg1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC03OSwxMSArNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsgbV9zdG9wc1NvcnRl
ZCA9IHM7IH0KIAotI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShDQUlSTykKICAgICAgICAg
dmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0j
ZWxzZQotICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLSNlbmRpZgogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxMDFhYmY4Li5lOTRk
M2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTkzLDYgKzkzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEltYWdlQnVmZmVy
OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKKyAgICBjbGFzcyBQYXR0ZXJuOwog
ICAgIGNsYXNzIFRleHRSdW47CiAKICAgICAvLyBUaGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0
aGVyIGZvciBhIHRvdGFsIG9mIDggcG9zc2libGUgdGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtMTM0
LDcgKzEzNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgQ29sb3IgZmlsbENv
bG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0g
ICAgICAgIAorCisgICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4m
KTsKKyAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsKKwogICAg
ICAgICB2b2lkIHNhdmUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlKCk7CiAgICAgICAgIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCAxYTFlM2IyLi5jYTY5NTRlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIklt
YWdlLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC00OSw2ICs1MCwxMiBAQCBJbWFn
ZTo6fkltYWdlKCkKIHsKIH0KIAorSW1hZ2UqIEltYWdlOjpudWxsSW1hZ2UoKQoreworICAgIHN0
YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAg
ICByZXR1cm4gbnVsbEltYWdlLmdldCgpOworfQorCiBib29sIEltYWdlOjpzdXBwb3J0c1R5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZSh0eXBlKTsgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKaW5kZXggM2M3MzVkNi4uZDY1ZTUyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aApAQCAtNjksMTggKzY5LDE5IEBAIGNsYXNzIFN0cmluZzsKIC8vIFRoaXMgY2xhc3MgZ2V0cyBu
b3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMgZGVjb2RlZCBmcmFtZXMg
YW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNsYXNzIEltYWdlT2JzZXJ2
ZXI7CiAKLWNsYXNzIEltYWdlIDogTm9uY29weWFibGUgeworY2xhc3MgSW1hZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgotICAgIEltYWdlKEltYWdl
T2JzZXJ2ZXIqID0gMCk7CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKLSAgICBzdGF0aWMg
SW1hZ2UqIGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSk7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAKIAogICAg
IHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAKKworICAgIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7CiAgICAgYm9vbCBpc051bGwoKSBj
b25zdDsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdlIHJpZ2h0IG5v
dwpAQCAtOTYsMTEgKzk3LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBzZXREYXRhKFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgdmlydHVh
bCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IHJldHVybiBmYWxzZTsg
fQotICAgIAotICAgIC8vIEZJWE1FOiBQREYvU1ZHIHdpbGwgYmUgdW5kZXJyZXBvcnRpbmcgZGVj
b2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUgdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5j
dGlvbnMgYXJlIG5vdAotICAgIC8vIGltcGxlbWVudGVkIHlldCBmb3IgdGhvc2UgaW1hZ2UgdHlw
ZXMuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFs
ID0gZmFsc2UpIHt9OwotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7
IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wg
aW5jcmVtZW50YWwgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNp
emUoKSBjb25zdCA9IDA7CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBtX2Rh
dGEuZ2V0KCk7IH0KIApAQCAtMTM3LDkgKzEzNiwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJv
dGVjdGVkOgorICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisKICAgICBzdGF0aWMgdm9p
ZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApOwog
Ci1wcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBlNjUyZTJh
Li5lNWRhM2VkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0z
MywyNSArMzMsNiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8bWVt
b3J5PgogCi0jaWYgIVBMQVRGT1JNKENHKQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFn
ZVJlZjsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UVBpeG1hcD4KLVFU
X0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBhaW50ZXI7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2Ug
Y2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTY5LDE5ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCi0jaWYgUExBVEZPUk0oQ0cp
Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGltYWdlKCktPmdl
dENHSW1hZ2VSZWYoKTsgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIFFQaXhtYXAqIHBp
eG1hcCgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykgfHwgUExB
VEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25z
dDsKLSNlbHNlCi0gICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLSNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9p
bWFnZS5jbGVhcigpOyB9CiAKQEAgLTkwLDIzICs1OSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25z
dDsKIAotICAgICAgICAKLQogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fZGF0YTsKICAg
ICAgICAgSW50U2l6ZSBtX3NpemU7CiAKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
bV9jb250ZXh0OwotICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgCiAjaWYgUExBVEZPUk0oQ0cp
CiAgICAgICAgIEltYWdlQnVmZmVyKHZvaWQqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYsIHN0
ZDo6YXV0b19wdHI8R3JhcGhpY3NDb250ZXh0Pik7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICAg
ICAgSW1hZ2VCdWZmZXIoY29uc3QgUVBpeG1hcCAmcHgpOworICAgICAgICBJbWFnZUJ1ZmZlcihj
b25zdCBRUGl4bWFwJik7CiAgICAgICAgIG11dGFibGUgUVBpeG1hcCBtX3BpeG1hcDsKICAgICAg
ICAgbXV0YWJsZSBRUGFpbnRlciogbV9wYWludGVyOwogI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0g
ICAgICAgIEltYWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7CisgICAgICAgIElt
YWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCopOwogICAgICAgICBtdXRhYmxlIGNhaXJvX3N1cmZh
Y2VfdCogbV9zdXJmYWNlOwogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODhiZDcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIDogbV90aWxlSW1hZ2UoaW1hZ2UpCisgICAgLCBt
X3JlcGVhdFgocmVwZWF0WCkKKyAgICAsIG1fcmVwZWF0WShyZXBlYXRZKQoreworICAgIEFTU0VS
VChpbWFnZSk7Cit9CisKK1BhdHRlcm46On5QYXR0ZXJuKCkKK3sKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
NjNiZmUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0
ZXJuLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBhdHRlcm5faAorI2RlZmluZSBQYXR0ZXJuX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKENHKQordHlw
ZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7Cit0eXBlZGVmIENHUGF0dGVyblJl
ZiBQbGF0Zm9ybVBhdHRlcm5QdHI7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxj
YWlyby5oPgordHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0cjsKKyNl
bGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFCcnVzaD4KK3R5cGVkZWYgUUJydXNoKiBQbGF0
Zm9ybVBhdHRlcm5QdHI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBJbWFnZTsKKworICAgIGNsYXNzIFBhdHRlcm4g
OiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBQYXR0ZXJuKEltYWdlKiwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFkpOworCisgICAgICAgIHZpcnR1YWwgflBhdHRlcm4oKTsK
KyAgICAgICAgCisgICAgICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3Rp
bGVJbWFnZS5nZXQoKTsgfQorCisgICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25z
dDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7Cisg
ICAgICAgIGJvb2wgbV9yZXBlYXRYOworICAgICAgICBib29sIG1fcmVwZWF0WTsKKyAgICB9Owor
Cit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBiMDdlMmE0Li5h
YzUwYTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNDk1LDYgKzQ5NSwyMyBAQCBJbnRQb2ludCBH
cmFwaGljc0NvbnRleHQ6Om9yaWdpbigpCiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0
PGludD4obWF0cml4LngwKSwgc3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueTApKTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0
ZXJuKQoreworICAgIGNhaXJvX3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmICghcGxhdGZvcm1QYXR0ZXJu
KQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19zZXRfc291cmNlKHBsYXRmb3JtQ29udGV4
dCgpLCBwbGF0Zm9ybVBhdHRlcm4pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwbGF0Zm9y
bVBhdHRlcm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihj
b25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIC8vIFRoZSBDYWlybyBjb2RlcGF0aCBkb2Vz
bid0IHNlZW0gdG8gc3VwcG9ydCBzZXBhcmF0ZSBzdHJva2UvZmlsbD8KKyAgICAvLyBUaGUgY29k
ZSBJIHJlZmFjdG9yZWQgdG8gY3JlYXRlIHRoZXNlIG1ldGhvZHMgd2FzIGlkZW50aWNhbCBmb3Ig
Q2Fpcm8KKyAgICBhcHBseVN0cm9rZVBhdHRlcm4ocGF0dGVybik7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQogewogICAg
IC8vIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5IGEgbm8tb3AgYnV0IEknbSBub3Qgc3VyZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAKaW5kZXggYjEyNzg4OC4uMjhkNWMyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKICNpbmNsdWRl
IDxjYWlyby5oPgogCkBAIC03MCwxMSArNzEsNiBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1j
YWlyb19zdXJmYWNlX3QqIEltYWdlQnVmZmVyOjpzdXJmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zdXJmYWNlOwotfQotCiBJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1faW1hZ2UpIHsKQEAgLTgyLDcgKzc4LDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVy
OjppbWFnZSgpIGNvbnN0CiAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJlIGRvbmUu
CiAgICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAgICAvLyBCaXRtYXBJbWFnZSB3aWxs
IHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgICAgIG1f
aW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX3N1cmZh
Y2UpKSk7CisgICAgICAgIG1faW1hZ2Uuc2V0KEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3Vy
ZmFjZV9yZWZlcmVuY2UobV9zdXJmYWNlKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9pbWFnZS5n
ZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
dGVybkNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNh
aXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU1MTNjCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fp
cm8uY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25z
dAoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltYWdlKCktPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zv
cl9zdXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJu
LCAmcGF0dGVyblRyYW5zZm9ybSk7CisgICAgaWYgKG1fcmVwZWF0WCB8fCBtX3JlcGVhdFkpCisg
ICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRFTkRfUkVQ
RUFUKTsKKyAgICByZXR1cm4gcGF0dGVybjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA4NmIxYTlhLi4zODhj
NGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgi
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR1BERkNvbnRleHQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpA
QCAtNDg5LDcgKzQ5MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyCiAgICAgCiAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0LngoKSwgcmVjdC55KCkg
KyByZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQo
KSwgMSwgLTEpOwotICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0KCksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmNnSW1hZ2Uo
KSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+Z2V0Q0dJ
bWFnZVJlZigpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgMSwg
LTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgLXJlY3Qu
eCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KQEAgLTg5Miw2ICs4OTMsMzYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2Rl
KQogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihj
b25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRl
cm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFw
bGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JTcGFjZVJlZiBw
YXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENHQ29udGV4
dFNldFN0cm9rZUNvbG9yU3BhY2UocGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7Cisg
ICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOworCisgICAgY29uc3QgQ0dGbG9h
dCBwYXR0ZXJuQWxwaGEgPSAxOworICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4ocGxhdGZv
cm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7CisgICAgQ0dQYXR0
ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVy
blJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRD
VE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAg
IENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJu
KDApOworICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4dCgpLCBw
YXR0ZXJuU3BhY2UpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKKwor
ICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRTZXRGaWxs
UGF0dGVybihwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhh
KTsKKyAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Cit9CisKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZGQ1MjE5Mi4uNjIwNzRhZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xMDIs
NyArMTAyLDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIEFT
U0VSVChjb250ZXh0KCkpOwogICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAg
Ly8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0
cnVjdGlvbgotICAgICAgICBtX2ltYWdlLnNldChuZXcgQml0bWFwSW1hZ2UoY2dJbWFnZSkpOwor
ICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CkBAIC0xNTMsOSArMTUzLDggQEAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCkgY29uc3QKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3Nb
YmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
c3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwpAQCAtMjA1LDkgKzIwNCw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uCiAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihz
cmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmgKaW5kZXggY2FkZGMwNS4uOTkzZjQ0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTM4LDE0ICszOCwyMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBQREZEb2N1bWVudEltYWdlIDogcHVibGljIEltYWdlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdlKTsKKyAgICAgICAgfQog
ICAgICAgICB+UERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBi
b29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAorICAgICAgICAvLyBGSVhN
RTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBi
ZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJl
IG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2Rl
ZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUERGRG9jdW1l
bnRJbWFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZjdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTAsMCArMSw3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGF0dGVybi5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxp
Y2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBw
YXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
Q0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2UqPihpbmZvKS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgIGlmICghcGxhdGZvcm1JbWFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rldmlj
ZVBpeGVscygKKyAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9y
bUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdlKTsKK30KKworc3RhdGljIHZv
aWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQoreworICAgIHN0YXRpY19jYXN0
PEltYWdlKj4oaW5mbyktPmRlcmVmKCk7Cit9CisKK0NHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0
Cit7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBwYXR0ZXJu
VHJhbnNmb3JtLnNjYWxlKDEsIC0xKTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZSgw
LCAtdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgLy8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBi
ZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJh
Y3Rpb25zIG9mIEZMVF9NQVggYWxzbworICAgIC8vIHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJl
bmRlcmVkLgorICAgIC8vIElOVF9NQVggaXMgYWxtb3N0IGNvcnJlY3QsIGJ1dCB0aGVyZSBzZWVt
cyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBvY2N1cmluZyBtYWtpbmcgdGhlIGZpbGwKKyAg
ICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29ycmVjdGx5LiAKKyAgICAvLyBTbywganVzdCBw
aWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0IHdvcmtzLiAKKyAgICBmbG9hdCB4U3RlcCA9
IG1fcmVwZWF0WCA/IHRpbGVSZWN0LndpZHRoKCkgOiAoMTAwMDAwMDAwLjBmKTsKKyAgICBmbG9h
dCB5U3RlcCA9IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdodCgpIDogKDEwMDAwMDAwMC4wZik7
CisKKyAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIHRpbGUgd2hlbiBpdCdzIGRv
bmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKKyAgICB0aWxlSW1hZ2UoKS0+
cmVmKCk7CisKKyAgICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9
IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CisgICAgcmV0
dXJuIENHUGF0dGVybkNyZWF0ZSh0aWxlSW1hZ2UoKSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHhTdGVwLCB5U3RlcCwKKyAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2lu
ZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKaW5kZXggYTA3NDcyMC4uYjc0NTIwOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcApAQCAtMjYsOCArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRl
ICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIC8vIFRoaXMgZnVuY3Rp
b24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CiBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNl
SW50b0FycmF5KGNvbnN0IGNoYXIqKTsKQEAgLTQyLDEyICs0MCwxMyBAQCB2b2lkIEJpdG1hcElt
YWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKIHsKIH0KIAotSW1hZ2UqIEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgVmVjdG9y
PGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKLSAgICBCaXRtYXBJbWFn
ZSogaW1nID0gbmV3IEJpdG1hcEltYWdlOworICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gaW1nID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyci5kYXRhKCksIGFyci5zaXplKCkpOwogICAgIGltZy0+
c2V0RGF0YShidWZmZXIsIHRydWUpOwotICAgIHJldHVybiBpbWc7CisgICAgcmV0dXJuIGltZy5y
ZWxlYXNlKCk7CiB9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ltYWdlTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggODE2ZjljYi4uYTBkMjU3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KQEAgLTUyLDI0ICs1MiwyMiBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZh
bGlkYXRlUGxhdGZvcm1EYXRhKCkKICAgICBtX3RpZmZSZXAgPSAwOwogfQogCi1JbWFnZSogSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCitQYXNzUmVmUHRyPElt
YWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkKIHsKLSAg
ICBzdGF0aWMgQml0bWFwSW1hZ2UgbnVsbEltYWdlOwotICAgIAogICAgIE5TQnVuZGxlICpidW5k
bGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3Nd
XTsKICAgICBOU1N0cmluZyAqaW1hZ2VQYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm5hbWVdIG9mVHlwZTpAInRpZmYiXTsKICAgICBO
U0RhdGEgKm5hbWVkSW1hZ2VEYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmlt
YWdlUGF0aF07CiAgICAgaWYgKG5hbWVkSW1hZ2VEYXRhKSB7Ci0gICAgICAgIEltYWdlKiBpbWFn
ZSA9IG5ldyBCaXRtYXBJbWFnZTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgaW1hZ2UtPnNldERhdGEoU2hhcmVkQnVmZmVyOjp3
cmFwTlNEYXRhKG5hbWVkSW1hZ2VEYXRhKSwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBpbWFnZTsK
KyAgICAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBX
ZSBoYXZlIHJlcG9ydHMgaW5kaWNhdGluZyByZXNvdXJjZSBsb2FkcyBhcmUgZmFpbGluZywgYnV0
IHdlIGRvbid0IHlldCBrbm93IHRoZSByb290IGNhdXNlKHMpLgogICAgIC8vIFR3byB0aGVvcmll
cyBhcmUgYmFkIGluc3RhbGxzIChpbWFnZSBmaWxlcyBhcmUgbWlzc2luZyksIGFuZCB0b28tbWFu
eS1vcGVuLWZpbGVzLgogICAgIC8vIFNlZSByZGFyOi8vNTYwNzM4MQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAmbnVsbEltYWdlOworICAgIHJldHVybiBJbWFnZTo6bnVs
bEltYWdlKCk7CiB9CiAKIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0
aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE3OTEwCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKwor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UUJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDdlMmM3ZmMuLjk0
ZmNlZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTU0Niw4ICs1NDYsNyBAQCB2
b2lkIFJlbmRlckltYWdlOjpjYWxjUHJlZldpZHRocygpCiAKIEltYWdlKiBSZW5kZXJJbWFnZTo6
bnVsbEltYWdlKCkKIHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2Ugc2hhcmVkTnVsbEltYWdlOwot
ICAgIHJldHVybiAmc2hhcmVkTnVsbEltYWdlOworICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCBlNDBiZTRiLi40MTJmMmNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC0xNDMwLDExICsxNDMwLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250
cm9scyhHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KLSAgICAg
ICAgc3RhdGljIEltYWdlKiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICAgICAgc3RhdGljIFJlZlB0
cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CiAgICAgICAgIGlmICghcmVzaXplQ29ybmVySW1h
Z2UpCiAgICAgICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKTsKICAgICAgICAgSW50UG9pbnQgaW1hZ2VQ
b2ludChzY3JvbGxDb3JuZXIucmlnaHQoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBz
Y3JvbGxDb3JuZXIuYm90dG9tKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOwotICAg
ICAgICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUG9pbnQpOworICAgICAg
ICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGltYWdlUG9pbnQpOwogCiAg
ICAgICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgogICAgICAgICAvLyBDbGlwcGlu
ZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA3ODg1NmM1Li5jY2NlN2U2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0xNzUsMTYgKzE3NSw3IEBAIE5hdGl2ZUltYWdlUHRy
IFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdldCgpLCBt
X2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSk7CiAgICAgfQotI2lmIFBMQVRGT1JNKENHKQotICAg
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmNnSW1hZ2UoKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnBpeG1hcCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0g
ICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c3VyZmFjZSgpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogYm9vbCBTVkdJbWFn
ZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
aAppbmRleCAzZTY3YTdjLi4wM2JiNTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKQEAgLTQy
LDcgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBTVkdJbWFn
ZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgcHVibGljOgotICAgICAgICBTVkdJbWFnZShJbWFnZU9i
c2VydmVyKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ltYWdlPiBjcmVhdGUoSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICAgICAgfQogICAgICAgICB+U1ZHSW1h
Z2UoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRT
aXplJik7CkBAIC01NCw5ICs1NywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwog
CisgICAgICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQg
c2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCisgICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhl
c2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisK
ICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJl
dHVybiAwOyB9CiAgICAgICAgIAogcHJpdmF0ZToKKyAgICAgICAgU1ZHSW1hZ2UoSW1hZ2VPYnNl
cnZlciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIGIvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCmluZGV4IGM0MjA3ZTAu
LjVlZjZkNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50
U2VydmVyUGF0dGVybkNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9T
VkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAKQEAgLTI0LDkgKzI0LDExIEBACiAjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKKwogI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSw3
ICs2Nyw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqCiAKICAgICBtX293bmVyRWxlbWVudC0+
YnVpbGRQYXR0ZXJuKHRhcmdldFJlY3QpOwogCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9
IHRpbGUoKS0+c3VyZmFjZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSB0aWxlKCkt
PmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jYWlyby9TVkdSZXNvdXJjZU1hc2tlckNhaXJvLmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2NhaXJvL1NWR1Jlc291cmNlTWFza2VyQ2Fpcm8uY3BwCmluZGV4IDc4ZWE3NmIuLmYyZGQyMTMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2Vy
Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFz
a2VyQ2Fpcm8uY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1
ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCkBAIC0zMCw4ICsz
MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gpCiB7CisgICAgaWYgKCFtX21hc2spCisgICAgICAgIG1fbWFzay5zZXQobV9vd25lckVs
ZW1lbnQtPmRyYXdNYXNrZXJDb250ZW50KGJvdW5kaW5nQm94LCBtX21hc2tSZWN0KS5yZWxlYXNl
KCkpOworICAgIGlmICghbV9tYXNrKQorICAgICAgICByZXR1cm47CisKICAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSA9IG1fbWFzay0+c3VyZmFjZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9
IG1fbWFzay0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAo
IXN1cmZhY2UpCiAgICAgICAgIHJldHVybjsKICAgICBjYWlyb19wYXR0ZXJuX3QqIG1hc2sgPSBj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcAppbmRleCAwN2Zm
NDdjLi40MTZkNWZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWlu
dFNlcnZlclBhdHRlcm5DZy5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB2b2lkIHBhdHRl
cm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCAwLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVD
VE0oY29udGV4dCwgMS4wZiwgLTEuMGYpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LCBDR1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcGF0dGVybkltYWdlLT5zaXplKCkpKSwg
cGF0dGVybkltYWdlLT5jZ0ltYWdlKCkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LCBDR1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcGF0dGVybkltYWdlLT5zaXplKCkpKSwg
cGF0dGVybkltYWdlLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwogICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0gYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9T
VkdSZXNvdXJjZU1hc2tlckNnLm1tCmluZGV4IDdmY2JmZTYuLmVjNmIzNDMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0KKysrIGIvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQpAQCAtMTEyLDcgKzEx
Miw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5TWFzayhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91CiAgICAgQ0lDb250ZXh0KiBjaUdyYXlzY2Fs
ZUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoQ0dDb250ZXh0OmdyYXlTY2FsZUNvbnRl
eHQgb3B0aW9uczpuaWxdOwogCiAgICAgLy8gVHJhbnNmb3JtIGNvbG9yaXplZCBtYXNrIHRvIGdy
YXkgc2NhbGUKLSAgICBDSUltYWdlKiBjb2xvck1hc2sgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0lt
YWdlOm1fbWFzay0+Y2dJbWFnZSgpXTsKKyAgICBDSUltYWdlKiBjb2xvck1hc2sgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOm1fbWFzay0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpXTsKICAg
ICBpZiAoIWNvbG9yTWFzaykKICAgICAgICAgcmV0dXJuOwogICAgIENJSW1hZ2UqIGdyYXlTY2Fs
ZU1hc2sgPSB0cmFuc2Zvcm1JbWFnZUludG9HcmF5c2NhbGVNYXNrKGNvbG9yTWFzayk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22760</attachid>
            <date>2008-08-12 17:41:35 -0700</date>
            <delta_ts>2008-08-12 18:10:15 -0700</delta_ts>
            <desc>Fifth pass, try to fix the non-mac builds</desc>
            <filename>Fifth-pass-try-to-fix-the-non-mac-builds.patch</filename>
            <type>text/plain</type>
            <size>86413</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NGQ2NjRiMzVhNzhhMDVjYWVmYTkyZWI2NTRiNTkyNDIxOTE2YWJmNQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOGFmNGRi
My4uYzBhMjAwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTgzLDYgKzE1ODMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGVuLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9u
dERhdGEuY3BwIFwKQEAgLTE4NjAsNiArMTg2Miw3IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udENhY2hlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGFlM2VjNWYuLjJlNDI0ZDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzg5
LDYgKzc4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vS1VSTC5jcHAg
XApAQCAtOTUwLDYgKzk1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ludFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ludFNpemVRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0
aWxsSW1hZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVR
dC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGFlYzZjYTQuLjM1NmYyNzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzg5Myw2ICszODkzLDE0
IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXR0ZXJuLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQ
YXR0ZXJuLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCINCiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTQ3MjgsNiArNDczNiwyNiBAQAogCQkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xQYXR0ZXJuQ0cuY3BwIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2lu
MzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJ
CTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJ
CQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcUERGRG9jdW1lbnRJbWFnZS5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNDg5ZmIwZC4uNDI2Zjc1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE4OTgsNiArMTg5OCw3IEBACiAJCUE4MDlGMTQ4MEI3Mzc5M0IwMDJF
NEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAgKi87IH07CiAJCUE4MDlGMUFBMEI3MzdGQjYwMDJFNEQ3RiAv
KiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCAqLzsgfTsKIAkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0RDdGIC8qIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBOTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJQTgwQTM4RkUwRTUwQ0M4MjAwQTI1RUJDIC8qIFBh
dHRlcm5DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLzsgfTsKIAkJQTgw
RTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTUwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0
aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjk5LDYgKzI3MDAs
OCBAQAogCQlBOEY0NkI4MTBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZHU3RyaW5nTGlzdC5oIGlu
IENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODVENzlBRDIwQUNBMTdFQjAwRjAyRkM1IC8qIERPTVNWR1N0cmluZ0xpc3QuaCAqLzsgfTsK
IAkJQThGNEZCOTQwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjkzMEMxNjlFN0Iw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggKi87IH07CiAJCUE4RjRGQjk2MEMxNjlFODUw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRl
cm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2
RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVFMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUw
MDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJF
OSAvKiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi87IH07CiAJCUE5
QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEU1MEQ3NDVFMTgwMDY0NDJF
OSAvKiBNaW1lVHlwZUFycmF5LmNwcCAqLzsgfTsKQEAgLTMxNjAsNyArMzE2Myw2IEBACiAJCUIy
NzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnRDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovOyB9
OwogCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUQwQjA1MzgxNDAwMkNF
NjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovOyB9OwogCQlCMjc1MzU1RTBCMDUz
ODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAg
Ki87IH07CiAJCUIyNzUzNTVGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NjAwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50
Q0cuY3BwICovOyB9OwpAQCAtNjM5MCw2ICs2MzkyLDcgQEAKIAkJQTgwOUYxNDYwQjczNzkzQTAw
MkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjFB
OTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVC
QyAvKiBQYXR0ZXJuQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGF0dGVybkNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02OTI5LDYgKzY5MzIsOCBAQAogCQlBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNW
R1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVu
ZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5
RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaW1lVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBN
aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8q
IE1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzUzOSw3
ICs3NTQ0LDYgQEAKIAkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2ludENHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGbG9hdFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQ
b2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRQb2lu
dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDk1LDcgKzEyMDk5LDYg
QEAKIAkJCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAog
CQkJCUJDNTNDNjBBMERBNTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKIAkJCQlC
MkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAotCQkJ
CUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUuaCAqLywKIAkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAog
CQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKQEAg
LTEyMTA1LDYgKzEyMTA4LDcgQEAKIAkJCQlCMjc1MzUzNTBCMDUzODE0MDAyQ0U2NEYgLyogUGF0
aENHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJ
bWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50
SW1hZ2UuaCAqLywKKwkJCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2c7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMTIyMTMsNiArMTIyMTcsOCBAQAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4
dFJ1bi5oICovLAogCQkJCUU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmgg
Ki8sCisJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQlB
OEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGdyYXBoaWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0MjczLDcgKzE0
Mjc5LDYgQEAKIAkJCQlCMkMzREE3MDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBF
IC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI3NTM1NUQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJBMDE1QUIwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4Q0ZGN0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUQwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxBcHBsZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE1Mzg5LDYgKzE1Mzk0LDcgQEAK
IAkJCQkzMUMwRkY0QjBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEMwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEUw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xNTQ0Myw5ICsxNTQ0OSw2IEBACiAJCQlwcm9kdWN0UmVmR3JvdXAg
PSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGly
UGF0aCA9ICIiOwogCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXByb2plY3RSb290cyA9ICgKLQkJ
CQkiIiwKLQkJCSk7CiAJCQl0YXJnZXRzID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFC
QyAvKiBXZWJDb3JlICovLAogCQkJCUREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVk
IFNvdXJjZXMgKi8sCkBAIC0xNzE3NSw2ICsxNzE3OCw4IEBACiAJCQkJMzFDMEZGM0YwRTRDRUZB
QzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxQzBGRjRBMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJL
aXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlBOEZBNkU1RTBFNENGREVE
MDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBBMzhGRTBFNTBD
QzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApp
bmRleCBkMmYwMzNkLi4xNmVkZWJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtNzA5LDYgKzcwOSw3IEBA
IFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2Vi
Q29yZS4KICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL25ldHdv
cmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWwuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0
dG9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5jcHAKaW5kZXggN2RmMmUwZC4uZDAwMjIwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVC
dXR0b25Db250cm9sbGVyLmNwcApAQCAtMTk1LDEzICsxOTUsMTEgQEAgdm9pZCBEZWxldGVCdXR0
b25Db250cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlXaWR0aCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uV2lkdGgpICsgInB4Iik7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBTdHJpbmc6Om51bWJlcihi
dXR0b25IZWlnaHQpICsgInB4Iik7CiAKLSAgICBJbWFnZSogYnV0dG9uSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1dHRvbiIpOwotICAgIGlmIChidXR0b25JbWFn
ZS0+aXNOdWxsKCkpIHsKLSAgICAgICAgZGVsZXRlIGJ1dHRvbkltYWdlOworICAgIFJlZlB0cjxJ
bWFnZT4gYnV0dG9uSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImRlbGV0ZUJ1
dHRvbiIpOworICAgIGlmIChidXR0b25JbWFnZS0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgYnV0dG9uLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2Uo
YnV0dG9uSW1hZ2UpKTsKKworICAgIGJ1dHRvbi0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZElt
YWdlKGJ1dHRvbkltYWdlLmdldCgpKSk7CiAKICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGJ1
dHRvbi5nZXQoKSwgZWMpOwogICAgIEFTU0VSVChlYyA9PSAwKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNw
cAppbmRleCA3NjIwNzBjLi40NGZhMjFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
UGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC0yNiwx
ODkgKzI2LDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVy
bi5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJlcGVhdFksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwg
dHlwZSA9PSAicmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gdHJ1ZTsKICAgICAgICAgcmVw
ZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAodHlwZSA9PSAibm8tcmVwZWF0IikgewogICAgICAgICByZXBlYXRYID0gZmFsc2U7CiAg
ICAgICAgIHJlcGVhdFkgPSBmYWxzZTsKLSAgICAgICAgZWMgPSAwOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmICh0eXBlID09ICJyZXBlYXQteCIpIHsKICAgICAgICAgcmVwZWF0WCA9
IHRydWU7CiAgICAgICAgIHJlcGVhdFkgPSBmYWxzZTsKLSAgICAgICAgZWMgPSAwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh0eXBlID09ICJyZXBlYXQteSIpIHsKICAgICAgICAg
cmVwZWF0WCA9IGZhbHNlOwogICAgICAgICByZXBlYXRZID0gdHJ1ZTsKLSAgICAgICAgZWMgPSAw
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVjID0gU1lOVEFYX0VSUjsKIH0KIAotI2lm
IFBMQVRGT1JNKENHKQotCi1DYW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENHSW1hZ2VSZWYg
aW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAg
IDogbV9wbGF0Zm9ybUltYWdlKGltYWdlKQotICAgICwgbV9jYWNoZWRJbWFnZSgwKQotICAgICwg
bV9yZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKLSAgICAsIG1fb3Jp
Z2luQ2xlYW4ob3JpZ2luQ2xlYW4pCi17Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1D
YW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX3BsYXRm
b3JtSW1hZ2UoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSkpCi0gICAgLCBtX2NhY2hl
ZEltYWdlKDApCi0gICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKLSAgICAsIG1fcmVwZWF0WShyZXBl
YXRZKQorQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVw
ZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQorICAgIDogbV9wYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikK
IHsKIH0KIAotI2VuZGlmCi0KLUNhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5D
bGVhbikKLSAgICA6IG1fY2FjaGVkSW1hZ2UoY2FjaGVkSW1hZ2UpCi0jaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgLCBtX3BsYXRmb3JtSW1hZ2UoMCkKLSNlbmRpZgotICAgICwgbV9yZXBlYXRYKHJl
cGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKLSAgICAsIG1fb3JpZ2luQ2xlYW4ob3Jp
Z2luQ2xlYW4pCi17Ci0gICAgaWYgKGNhY2hlZEltYWdlKQotICAgICAgICBjYWNoZWRJbWFnZS0+
YWRkQ2xpZW50KHRoaXMpOwotfQotCi1DYW52YXNQYXR0ZXJuOjp+Q2FudmFzUGF0dGVybigpCi17
Ci0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkKLSAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fcGxhdGZvcm1JbWFnZSk7Ci0jZW5kaWYKLSAgICBpZiAo
bV9jYWNoZWRJbWFnZSkKLSAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OwotfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0KLXN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbyktPnBsYXRmb3JtSW1h
Z2UoKTsKLSAgICBpZiAocGxhdGZvcm1JbWFnZSkgewotICAgICAgICBDR1JlY3QgcmVjdCA9IEdy
YXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAotICAgICAgICAgICAg
RmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdl
dEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4o
aW5mbyktPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZSgpOwotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCByZWN0ID0gR3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoaW1hZ2UtPnJlY3QoKSk7Ci0KLSAg
ICBpZiAoaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkgewotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgcmVjdCwgaW1hZ2UtPmdldENHSW1hZ2VSZWYoKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhpcyBjb2RlIHRvIHVzZSB0aGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQgCi0gICAgICAgIC8vIGRyYXdpbmcgQVBJIGluIGFsbCBjYXNlcy4gVGhlbiwgdGhp
cyBkaWREcmF3IGNhbGwgd2lsbCBoYXBwZW4gCi0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFu
ZCB3ZSBjYW4gcmVtb3ZlIGl0LgotICAgICAgICBjYWNoZWRJbWFnZS0+ZGlkRHJhdyhpbWFnZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHQoY29udGV4dCku
ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQotewotICAgIHN0YXRpY19jYXN0PENhbnZhc1BhdHRlcm4qPihp
bmZvKS0+ZGVyZWYoKTsKLX0KLQotQ0dQYXR0ZXJuUmVmIENhbnZhc1BhdHRlcm46OmNyZWF0ZVBh
dHRlcm4oY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR1JlY3Qg
cmVjdDsKLSAgICByZWN0Lm9yaWdpbi54ID0gMDsKLSAgICByZWN0Lm9yaWdpbi55ID0gMDsKLSAg
ICBpZiAobV9wbGF0Zm9ybUltYWdlKSB7Ci0gICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IENHSW1h
Z2VHZXRXaWR0aChtX3BsYXRmb3JtSW1hZ2UuZ2V0KCkpOwotICAgICAgICByZWN0LnNpemUuaGVp
Z2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX3BsYXRmb3JtSW1hZ2UuZ2V0KCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2NhY2hlZEltYWdlLT5pbWFnZSgpOwotICAgICAgICBp
ZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJlY3Quc2l6ZS53aWR0
aCA9IGltYWdlLT53aWR0aCgpOwotICAgICAgICByZWN0LnNpemUuaGVpZ2h0ID0gaW1hZ2UtPmhl
aWdodCgpOwotICAgIH0KLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0g
PQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShDR0FmZmluZVRyYW5zZm9ybVNj
YWxlKHRyYW5zZm9ybSwgMSwgLTEpLCAwLCAtcmVjdC5zaXplLmhlaWdodCk7Ci0gICAgCi0gICAg
Ly8gSWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90
aGluZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwotICAgIC8v
IHJlc3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgotICAgIC8vIElOVF9NQVggaXMgYWxt
b3N0IGNvcnJlY3QsIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBv
Y2N1cmluZyBtYWtpbmcgdGhlIGZpbGwKLSAgICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29y
cmVjdGx5LiAKLSAgICAvLyBTbywganVzdCBwaWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0
IHdvcmtzLiAKLSAgICBmbG9hdCB4U3RlcCA9IG1fcmVwZWF0WCA/IHJlY3Quc2l6ZS53aWR0aCA6
ICgxMDAwMDAwMDAuMGYpOwotICAgIGZsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gcmVjdC5zaXpl
LmhlaWdodCA6ICgxMDAwMDAwMDAuMGYpOwotCi0gICAgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tz
IHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayB9OwotICAgIHJlZigpOwotICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUodGhpcywg
cmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAsIHlTdGVwLAotICAgICAgICBrQ0dQYXR0ZXJu
VGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNhbGxiYWNrcyk7Ci19Ci0KLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWlyb19wYXR0ZXJuX3QqIENhbnZhc1BhdHRlcm46OmNy
ZWF0ZVBhdHRlcm4oY29uc3QgY2Fpcm9fbWF0cml4X3QmIG0pCi17Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybUltYWdlKSB7Ci0gICAgICAgIHN1
cmZhY2UgPSBtX3BsYXRmb3JtSW1hZ2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9
IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCk7Ci0gICAgICAgIGlmICghaW1hZ2UpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIH0KLQotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4gPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9m
b3Jfc3VyZmFjZShzdXJmYWNlKTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVy
biwgJm0pOwotICAgIGlmIChtX3JlcGVhdFggfHwgbV9yZXBlYXRZKQotICAgICAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQocGF0dGVybiwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Ci0gICAgcmV0
dXJuIHBhdHRlcm47Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
Q2FudmFzUGF0dGVybi5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAppbmRleCA2ODkx
ZGE2Li43OWM3ODcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCisr
KyBiL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKQEAgLTI2LDc2ICsyNiwzNCBAQAogI2lm
bmRlZiBDYW52YXNQYXR0ZXJuX2gKICNkZWZpbmUgQ2FudmFzUGF0dGVybl9oCiAKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBQ
TEFURk9STShDRykKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxpZiBQTEFURk9STShDQUlS
TykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIENhY2hlZEltYWdlOworICAgIGNsYXNzIEltYWdlOwogICAgIGNsYXNzIFN0cmlu
ZzsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBDYW52YXNQ
YXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzUGF0dGVybj4sIHByaXZhdGUgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgeworICAgIGNsYXNzIENhbnZhc1BhdHRlcm4gOiBwdWJsaWMgUmVmQ291
bnRlZDxDYW52YXNQYXR0ZXJuPiB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgdm9pZCBw
YXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlcGVhdFgsIGJvb2wmIHJl
cGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoQ0dJbWFnZVJlZiBpbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGF0dGVybihpbWFnZSwgcmVwZWF0
WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKLSAgICAgICAgfQotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9y
aWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc1BhdHRlcm4oc3VyZmFjZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IGNyZWF0ZShDYWNoZWRJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBi
b29sIG9yaWdpbkNsZWFuKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBv
cmlnaW5DbGVhbikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNQYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAg
ICAgICB9Ci0gICAgICAgIHZpcnR1YWwgfkNhbnZhc1BhdHRlcm4oKTsKLQotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BsYXRmb3JtSW1hZ2UuZ2V0KCk7IH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBj
YWlyb19zdXJmYWNlX3QqIHBsYXRmb3JtSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
SW1hZ2U7IH0KLSNlbmRpZgotICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEltYWdlOyB9Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAg
Q0dQYXR0ZXJuUmVmIGNyZWF0ZVBhdHRlcm4oY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mKTsKLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIGNyZWF0ZVBhdHRl
cm4oY29uc3QgY2Fpcm9fbWF0cml4X3QmKTsKLSNlbmRpZgorICAgICAgICAKKyAgICAgICAgY29u
c3QgUGF0dGVybiYgcGF0dGVybigpIHsgcmV0dXJuIG1fcGF0dGVybjsgfQogCiAgICAgICAgIGJv
b2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9CiAKICAgICBw
cml2YXRlOgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBDYW52YXNQYXR0ZXJuKENHSW1hZ2VS
ZWYsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgICAgICBDYW52YXNQYXR0ZXJuKGNhaXJvX3N1cmZhY2VfdCos
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKLSNlbmRpZgot
ICAgICAgICBDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOworICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdlKiwg
Ym9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgIGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX3BsYXRmb3Jt
SW1hZ2U7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBj
b25zdCBtX3BsYXRmb3JtSW1hZ2U7Ci0jZW5kaWYKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNvbnN0
IG1fY2FjaGVkSW1hZ2U7Ci0gICAgICAgIGNvbnN0IGJvb2wgbV9yZXBlYXRYOwotICAgICAgICBj
b25zdCBib29sIG1fcmVwZWF0WTsKKyAgICAgICAgUGF0dGVybiBtX3BhdHRlcm47CiAgICAgICAg
IGJvb2wgbV9vcmlnaW5DbGVhbjsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCmluZGV4IGU3YjZiMGQuLjViMzMwZTMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xMTIxLDE0ICsxMTIxLDE1IEBAIFBhc3NS
ZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0
ZXJuKEhUTUxJbWFnZUVsZW1lCiAgICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlw
ZShyZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgYm9vbCBvcmlnaW5DbGVhbiA9IHRydWU7Ci0gICAg
aWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0g
ICAgICAgIEtVUkwgdXJsKGNhY2hlZEltYWdlLT51cmwoKSk7Ci0gICAgICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwotICAgICAg
ICBvcmlnaW5DbGVhbiA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5BY2Nlc3Mob3JpZ2luLmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46
OmNyZWF0ZShpbWFnZS0+Y2FjaGVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xl
YW4pOworCisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdl
KCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdl
KCkpCisgICAgICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoSW1hZ2U6Om51bGxJbWFn
ZSgpLCByZXBlYXRYLCByZXBlYXRZLCB0cnVlKTsKKworICAgIEtVUkwgdXJsKGNhY2hlZEltYWdl
LT51cmwoKSk7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKHVybCk7CisgICAgYm9vbCBvcmlnaW5DbGVhbiA9IG1fY2FudmFzLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3Mob3JpZ2luLmdldCgpKTsKKyAgICBy
ZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCByZXBlYXRY
LCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CiB9CiAKIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsCkBAIC0xMTM5LDIzICsxMTQwLDcgQEAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRNTENhbnZhc0VsZW0K
ICAgICBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKHJlcGV0aXRpb25UeXBlLCBy
ZXBlYXRYLCByZXBlYXRZLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlKEFkb3B0Q0YsIGNhbnZhcy0+Y3JlYXRlUGxhdGZvcm1JbWFnZSgpKTsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3Jl
YXRlKGltYWdlLmdldCgpLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkp
OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0g
Y2FudmFzLT5jcmVhdGVQbGF0Zm9ybUltYWdlKCk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IENhbnZhc1Bh
dHRlcm46OmNyZWF0ZShzdXJmYWNlLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNs
ZWFuKCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1cm4g
cGF0dGVybi5yZWxlYXNlKCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci0jZW5kaWYKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+
YnVmZmVyKCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4o
KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBG
bG9hdFJlY3QmIHIpCkBAIC0xMTc4LDQ3ICsxMTYzLDIyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhp
Y3NDb250ZXh0PyBvciByZW1vdmVkPwogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIENoZWNrIGZv
ciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIENHQWZmaW5lVHJh
bnNmb3JtIG0gPSBDR0NvbnRleHRHZXRDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlm
IChzdGF0ZSgpLm1fYXBwbGllZFN0cm9rZVBhdHRlcm4KLSAgICAgICAgICAgICYmIENHQWZmaW5l
VHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJu
VHJhbnNmb3JtKSkKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gYy0+Z2V0Q1RNKCk7CisgICAg
aWYgKHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX3N0
cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOworI2VuZGlmCiAKICAg
ICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJu
KCk7CiAgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR1BhdHRlcm5S
ZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAgICBpZiAo
IXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb2xvclNwYWNlUmVm
IHBhdHRlcm5TcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7Ci0gICAgQ0dDb250
ZXh0U2V0U3Ryb2tlQ29sb3JTcGFjZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNwYWNl
KTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7Ci0KLSAgICBjb25zdCBD
R0Zsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihj
LT5wbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKLSAg
ICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Ci0KLSAgICBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gbTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBDYW52YXNQYXR0ZXJu
KiBwYXR0ZXJuID0gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCk7Ci0gICAgaWYgKCFw
YXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3Jt
Q29udGV4dCgpOwotICAgIGNhaXJvX21hdHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChj
ciwgJm0pOwotCi0gICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJu
LT5jcmVhdGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICBy
ZXR1cm47CisgICAgYy0+YXBwbHlTdHJva2VQYXR0ZXJuKHBhdHRlcm4tPnBhdHRlcm4oKSk7CiAK
LSAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNhaXJvX3Bh
dHRlcm5fZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQorICAgIHN0
YXRlKCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBjdG07CiAjZW5kaWYKICAgICBz
dGF0ZSgpLm1fYXBwbGllZFN0cm9rZVBhdHRlcm4gPSB0cnVlOwogfQpAQCAtMTIyOSw0NyArMTE4
OSwyMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlGaWxsUGF0dGVybigp
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMg
Y2hlY2sgYmUgbW92ZWQgaW50byBHcmFwaGljc0NvbnRleHQ/IG9yIHJlbW92ZWQ/CiAjaWYgUExB
VEZPUk0oQ0cpCiAgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxy
ZWFkeSBzZXQuCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkRmlsbFBhdHRlcm4K
LSAgICAgICAgICAgICYmIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybShtLCBzdGF0
ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCk7
Ci0gICAgaWYgKCFwYXR0ZXJuKQorICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0o
KTsKKyAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUo
KS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgog
Ci0gICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRl
cm4obSk7Ci0gICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAg
IENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJu
KDApOwotICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGMtPnBsYXRmb3JtQ29udGV4dCgp
LCBwYXR0ZXJuU3BhY2UpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsK
LQotICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKLSAgICBDR0NvbnRleHRTZXRG
aWxsUGF0dGVybihjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVy
bkFscGhhKTsKLSAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Ci0KLSAgICBz
dGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IG07Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgQ2Fu
dmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKICAg
ICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gYy0+
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRf
bWF0cml4KGNyLCAmbSk7CisgICAgYy0+YXBwbHlGaWxsUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJu
KCkpOwogCi0gICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5j
cmVhdGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwbGF0Zm9ybVBhdHRlcm4pOwotICAgIGNh
aXJvX3BhdHRlcm5fZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOworI2lmIFBMQVRGT1JNKENHKQor
ICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3RtOwogI2VuZGlmCiAg
ICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggNDA3NzM0NC4uMTY4YjczMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTk1LDggKzE5NSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oQ0cp
Ci0gICAgICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5z
Zm9ybTsKLSAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG1fZmlsbFN0eWxlUGF0dGVyblRy
YW5zZm9ybTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3N0cm9rZVN0eWxlUGF0dGVy
blRyYW5zZm9ybTsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2ZpbGxTdHlsZVBhdHRl
cm5UcmFuc2Zvcm07CiAjZW5kaWYKICAgICAgICAgfTsKICAgICAgICAgUGF0aCBtX3BhdGg7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1sL0Nh
bnZhc1N0eWxlLmNwcAppbmRleCBiZTUwMTNhLi5iZWU0ZWY0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvQ2FudmFzU3R5bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAK
QEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbnRleHQuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtNjAsMTIgKzY0LDE2IEBAIENhbnZh
c1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwpCiB9CiAKIENhbnZhc1N0eWxlOjpD
YW52YXNTdHlsZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlw
ZShDb2xvclN0cmluZ1dpdGhBbHBoYSksIG1fY29sb3IoY29sb3IpLCBtX2FscGhhKGFscGhhKQor
ICAgIDogbV90eXBlKENvbG9yU3RyaW5nV2l0aEFscGhhKQorICAgICwgbV9jb2xvcihjb2xvcikK
KyAgICAsIG1fYWxwaGEoYWxwaGEpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShm
bG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQotICAgIDogbV90eXBlKEdyYXlMZXZlbCksIG1f
YWxwaGEoYWxwaGEpLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCisgICAgOiBtX3R5cGUoR3JheUxl
dmVsKQorICAgICwgbV9hbHBoYShhbHBoYSkKKyAgICAsIG1fZ3JheUxldmVsKGdyYXlMZXZlbCkK
IHsKIH0KIApAQCAtODAsMTA0ICs4OCw0NyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIH0KIAogQ2FudmFzU3R5
bGU6OkNhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50KQotICAg
IDogbV90eXBlKGdyYWRpZW50ID8gR3JhZGllbnQgOiBDb2xvclN0cmluZyksIG1fZ3JhZGllbnQo
Z3JhZGllbnQpCisgICAgOiBtX3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENvbG9yU3RyaW5n
KQorICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZh
c1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybikKLSAgICA6IG1fdHlwZShw
YXR0ZXJuID8gSW1hZ2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpLCBtX3BhdHRlcm4ocGF0dGVybikK
KyAgICA6IG1fdHlwZShwYXR0ZXJuID8gSW1hZ2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpCisgICAg
LCBtX3BhdHRlcm4ocGF0dGVybikKIHsKIH0KIAorc3RhdGljIGlubGluZSBSR0JBMzIgY29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCit7Cisg
ICAgUkdCQTMyIHJnYk9ubHkgPSBjb2xvciAmIDB4MDBGRkZGRkY7CisgICAgUkdCQTMyIHJnYmEg
PSByZ2JPbmx5IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUob3ZlcnJpZGVBbHBoYSkgPDwgMjQ7Cisg
ICAgcmV0dXJuIHJnYmE7Cit9CisKIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3Io
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8
UVBhaW50ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZWxpZiBQTEFURk9STShD
QUlSTykKLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotI2Vu
ZGlmCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewog
ICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBi
bGFjawogICAgICAgICAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENH
Q29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAg
ICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAg
ICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChj
b2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYg
MHhGRikgLyAyNTUuMGYpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRUGVuIGN1
cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoKFFD
b2xvcihRUmdiKGNvbG9yKSkpKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihjdXJyZW50UGVuKTsK
LSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgLy8gRklYTUU6IGZpbGwgYW5kIHN0
cm9rZSBjb2xvciBzaG91bGQgYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5Ci0gICAgICAgICAgICBj
YWlyb19zZXRfc291cmNlX3JnYmEoY3IsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikg
JiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikg
LyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCi0gICAg
ICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7Ci0jZW5kaWYKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAg
ICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxh
Y2sKICAgICAgICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50
IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0Nv
bnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAg
ICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAg
ICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29s
b3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICBtX2FscGhhKTsKLSNlbGlmIFBM
QVRGT1JNKFFUKQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAg
ICAgICAgICBRQ29sb3IgY2xyID0gUUNvbG9yKFFSZ2IoY29sb3IpKTsKLSAgICAgICAgICAgIGNs
ci5zZXRBbHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNs
cik7Ci0gICAgICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShD
QUlSTykKLSAgICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxk
IGJlIGRlYWx0IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2JhKGNyLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYs
Ci0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAg
ICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29s
b3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBtX2FscGhhKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdyYXlMZXZlbDog
ewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVu
ZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAg
Q0dDb250ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBt
X2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFD
b2xvciBjbHI7Ci0gICAgICAgICAgICBRUGVuIGN1cnJlbnRQZW4gPSBwLT5wZW4oKTsKLSAgICAg
ICAgICAgIGNsci5zZXRSZ2JGKG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWws
IG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAg
ICAgICAgcC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZl
bCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VuZGlmCisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVs
LCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFJHQkE6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0t
aW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCBtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFU
KQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAgICBR
Q29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9yZWQsIG1fZ3JlZW4sIG1fYmx1
ZSwgbV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKGNscik7Ci0gICAg
ICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hvdWxkIGJlIGRlYWx0
IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBt
X3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKLSNlbmRpZgorICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBo
YSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDTVlLQTog
ewpAQCAtMjA4LDc1ICsxNTksMjUgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3Io
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8
UVBhaW50ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0jZW5kaWYKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7Ci0gICAgICAgICAgICBS
R0JBMzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCi0gICAgICAg
ICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0Nv
bnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdC
RmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICgo
Y29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+
PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8g
MjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYp
OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0g
cC0+YnJ1c2goKTsKLSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0
UmdiKFFSZ2IoY29sb3IpKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIp
OwotICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAg
ICAgICAgUkdCQTMyIHJnYmEgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCisg
ICAgICAgICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgbV9jb2xvcik7CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IocmdiYSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CiAgICAgICAgICAg
ICBSR0JBMzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAg
ICAgICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGlj
c0NvbnRleHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAg
ICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKChjb2xv
ciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIChjb2xvciAmIDB4RkYp
IC8gMjU1LjBmLAotICAgICAgICAgICAgICAgIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQp
Ci0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAgICAg
ICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiKFFSZ2IoY29sb3IpKTsKLSAg
ICAgICAgICAgIGNsci5zZXRBbHBoYUYobV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1
c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7
Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVy
cmlkZUFscGhhKGNvbG9yLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIEdyYXlMZXZlbDogewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHRo
aXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lm
IFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpOwotI2VsaWYgUExB
VEZPUk0oUVQpCi0gICAgICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsK
LSAgICAgICAgICAgIFFDb2xvciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiRihtX2dyYXlM
ZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSAgICAgICAgICAgIGN1
cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAgcC0+c2V0QnJ1c2goY3VycmVu
dEJydXNoKTsKLSNlbmRpZgorICAgICAgICBjYXNlIEdyYXlMZXZlbDoKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3Jh
eUxldmVsLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFJHQkE6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxh
dGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykK
LSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgbV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9S
TShRVCkKLSAgICAgICAgICAgIFFCcnVzaCBjdXJyZW50QnJ1c2ggPSBwLT5icnVzaCgpOwotICAg
ICAgICAgICAgUUNvbG9yIGNscjsKLSAgICAgICAgICAgIGNsci5zZXRSZ2JGKG1fcmVkLCBtX2dy
ZWVuLCBtX2JsdWUsIG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9y
KGNscik7Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisg
ICAgICAgIGNhc2UgUkdCQToKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQogICAgICAgICBjYXNlIENNWUtBOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
RG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEku
CiAjaWYgUExBVEZPUk0oQ0cpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCA5MDdj
Y2NjLi4wZDU0NTE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTI3NSw0OCAr
Mjc1LDQgQEAgSW1hZ2VCdWZmZXIqIEhUTUxDYW52YXNFbGVtZW50OjpidWZmZXIoKSBjb25zdAog
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogCi0jaWYgUExBVEZPUk0oQ0cpCi0K
LUNHSW1hZ2VSZWYgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25z
dAotewotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCk7Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0UmVmID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
UmVmKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHRSZWYp
OwotCi0gICAgcmV0dXJuIENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHRSZWYpOwot
fQotCi0jZWxpZiBQTEFURk9STShRVCkKLQotUVBpeG1hcCBIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyKQotICAg
ICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHJldHVybiAqbV9pbWFnZUJ1ZmZlci0+cGl4bWFw
KCk7Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotCi1jYWlyb19zdXJmYWNlX3QqIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gTm90ZSB0aGF0IHVubGlr
ZSBDRywgb3VyIHJldHVybmVkIGltYWdlIGlzIG5vdCBhIGNvcHkgb3IKLSAgICAvLyBjb3B5LW9u
LXdyaXRlLCBidXQgdGhlIG9yaWdpbmFsLiBUaGlzIGlzIGZpbmUsIHNpbmNlIGl0IGlzIG9ubHkK
LSAgICAvLyBldmVyIHVzZWQgYXMgYSBzb3VyY2UuCi0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1faW1hZ2VCdWZmZXItPnN1cmZhY2UoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uo
bV9pbWFnZUJ1ZmZlci0+c3VyZmFjZSgpKTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpOwotfQotCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBh
MGI3Y2M1Li5hMTE4MzY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMzAsMTkgKzMw
LDYgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAot
I2lmIFBMQVRGT1JNKENHKQotLy8gRklYTUU6IENHLXNwZWNpZmljIHBhcnRzIG5lZWQgdG8gbW92
ZSB0byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBD
R0NvbnRleHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwotI2VsaWYg
UExBVEZPUk0oUVQpCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQaXhtYXA7Ci1jbGFzcyBR
UGFpbnRlcjsKLVFUX0VORF9OQU1FU1BBQ0UKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRl
ZiBzdHJ1Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwpAQCAtMTA1
LDE1ICs5Miw4IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSBjb25zdDsKIAotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsgCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgQ0dJbWFnZVJlZiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3Q7Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGl4bWFwIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25z
dDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlUGxh
dGZvcm1JbWFnZSgpIGNvbnN0OwotI2VuZGlmCi0gICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
cigpIGNvbnN0OworCiAgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZs
b2F0UmVjdCYpIGNvbnN0OwogICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25z
dCBGbG9hdFNpemUmKSBjb25zdDsKICAgICBJbnRQb2ludCBjb252ZXJ0TG9naWNhbFRvRGV2aWNl
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAppbmRleCAzNGEw
NjViLi4yYzdkNGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAK
KysrIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00OCwyMiArNDgsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgU3Ry
aW5nJiB1cmwpCiAgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIEltYWdlUmVzb3VyY2UpCisgICAg
LCBtX2ltYWdlKDApCiB7Ci0gICAgbV9pbWFnZSA9IDA7CiAgICAgbV9zdGF0dXMgPSBVbmtub3du
OwogfQogCiBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgIDogQ2Fj
aGVkUmVzb3VyY2UoU3RyaW5nKCksIEltYWdlUmVzb3VyY2UpCisgICAgLCBtX2ltYWdlKGltYWdl
KQogewotICAgIG1faW1hZ2UgPSBpbWFnZTsKICAgICBtX3N0YXR1cyA9IENhY2hlZDsKICAgICBt
X2xvYWRpbmcgPSBmYWxzZTsKIH0KIAogQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCiB7Ci0g
ICAgZGVsZXRlIG1faW1hZ2U7CiB9CiAgICAgCiB2b2lkIENhY2hlZEltYWdlOjpsb2FkKERvY0xv
YWRlciogZG9jTG9hZGVyKQpAQCAtOTMsMTYgKzkyLDE2IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFs
bFJlZmVyZW5jZXNSZW1vdmVkKCkKIAogc3RhdGljIEltYWdlKiBicm9rZW5JbWFnZSgpCiB7Ci0g
ICAgc3RhdGljIEltYWdlKiBicm9rZW5JbWFnZTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBi
cm9rZW5JbWFnZTsKICAgICBpZiAoIWJyb2tlbkltYWdlKQogICAgICAgICBicm9rZW5JbWFnZSA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlIik7Ci0gICAgcmV0dXJu
IGJyb2tlbkltYWdlOworICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKIH0KIAogc3RhdGlj
IEltYWdlKiBudWxsSW1hZ2UoKQogewotICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBudWxsSW1hZ2U7
Ci0gICAgcmV0dXJuICZudWxsSW1hZ2U7CisgICAgc3RhdGljIFJlZlB0cjxCaXRtYXBJbWFnZT4g
bnVsbEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIHJldHVybiBudWxsSW1hZ2Uu
Z2V0KCk7CiB9CiAKIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdApAQCAtMTExLDcg
KzExMCw3IEBAIEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKSBjb25zdAogICAgICAgICByZXR1
cm4gYnJva2VuSW1hZ2UoKTsKIAogICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9p
bWFnZTsKKyAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiAKICAgICByZXR1cm4gbnVsbElt
YWdlKCk7CiB9CkBAIC0xOTUsMTQgKzE5NCwxMyBAQCBJbnRSZWN0IENhY2hlZEltYWdlOjppbWFn
ZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKIHZvaWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9i
c2VydmVycygpCiB7CiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMp
OwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQorICAgIHdo
aWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQogICAgICAgICBjLT5pbWFn
ZUNoYW5nZWQodGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKIHsKICAgICBk
ZXN0cm95RGVjb2RlZERhdGEoKTsKLSAgICBkZWxldGUgbV9pbWFnZTsKICAgICBtX2ltYWdlID0g
MDsKICAgICBzZXRFbmNvZGVkU2l6ZSgwKTsKIH0KQEAgLTIxNCwxNyArMjEyLDE3IEBAIGlubGlu
ZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBQ
TEFURk9STShDRykKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJhcHBsaWNhdGlv
bi9wZGYiKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBuZXcgUERGRG9jdW1lbnRJbWFnZTsKKyAgICAg
ICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKFNWR19BU19JTUFHRSkKICAgICBpZiAobV9yZXNw
b25zZS5taW1lVHlwZSgpID09ICJpbWFnZS9zdmcreG1sIikgewotICAgICAgICBtX2ltYWdlID0g
bmV3IFNWR0ltYWdlKHRoaXMpOworICAgICAgICBtX2ltYWdlID0gU1ZHSW1hZ2U6OmNyZWF0ZSh0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIG1faW1hZ2UgPSBuZXcg
Qml0bWFwSW1hZ2UodGhpcyk7CisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUodGhp
cyk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkSW1hZ2UuaCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKaW5kZXggMGEzZDI0
OC4uMjEzYzlmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAorKysg
Yi9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjcmVhdGVJbWFnZSgpOwogICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzKCk7CiAK
LSAgICBJbWFnZSogbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYTZiNGRlMC4uM2E5MDg1MiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcApAQCAtMzk5OSw3ICszOTk5LDExIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+
IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKQogICAgIGlm
IChvcmlnaW5hbFVSTC5pc0VtcHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYmxhbmtVUkwo
KTsKICAgICAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3Jl
YXRlKHVybCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCksIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkgPyBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT50cmVlKCktPm5hbWUoKSA6ICIiLCBkb2NM
b2FkZXIgPyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIik7CisgICAgRnJhbWUqIHBhcmVudEZyYW1l
ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICBTdHJpbmcgcGFyZW50ID0gcGFyZW50
RnJhbWUgPyBwYXJlbnRGcmFtZS0+dHJlZSgpLT5uYW1lKCkgOiAiIjsKKyAgICBTdHJpbmcgdGl0
bGUgPSBkb2NMb2FkZXIgPyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIjsKKworICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50cmVl
KCktPm5hbWUoKSwgcGFyZW50LCB0aXRsZSk7CiAgICAgaXRlbS0+c2V0T3JpZ2luYWxVUkxTdHJp
bmcob3JpZ2luYWxVUkwuc3RyaW5nKCkpOwogICAgIAogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSBp
ZiB0aGlzIGlzIGEgUE9TVApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVj
b3JkLmNwcCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAKaW5kZXggOGIzZDVm
OS4uZjA3MGNjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNw
cAorKysgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCkBAIC02NiwxMiArNjYs
MTIgQEAgdm9pZCBJY29uUmVjb3JkOjpzZXRJbWFnZURhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGRhdGEpCiB7CiAgICAgLy8gSXQncyBva2F5IHRvIGRlbGV0ZSB0aGUgcmF3IGltYWdlIGhl
cmUuIEFueSBleGlzdGluZyBjbGllbnRzIHVzaW5nIHRoaXMgaWNvbiB3aWxsIGJlCiAgICAgLy8g
bWFuYWdpbmcgYW4gaW1hZ2UgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgY29weSBvZiB0aGlzIHJh
dyBpbWFnZSBkYXRhLgotICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFnZSgpKTsKKyAgICBt
X2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogCiAgICAgLy8gQ29weSB0aGUgcHJvdmlk
ZWQgZGF0YSBpbnRvIHRoZSBidWZmZXIgb2YgdGhlIG5ldyBJbWFnZSBvYmplY3QuCiAgICAgaWYg
KCFtX2ltYWdlLT5zZXREYXRhKGRhdGEsIHRydWUpKSB7CiAgICAgICAgIExPRyhJY29uRGF0YWJh
c2UsICJNYW51YWwgaW1hZ2UgZGF0YSBmb3IgaWNvblVSTCAnJXMnIEZBSUxFRCAtIGl0IHdhcyBw
cm9iYWJseSBpbnZhbGlkIGltYWdlIGRhdGEiLCBtX2ljb25VUkwuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICBtX2ltYWdlLnNldCgwKTsKKyAgICAgICAgbV9pbWFnZS5jbGVhcigpOwogICAgIH0K
ICAgICAKICAgICBtX2RhdGFTZXQgPSB0cnVlOwpAQCAtODIsNyArODIsNyBAQCB2b2lkIEljb25S
ZWNvcmQ6OmxvYWRJbWFnZUZyb21SZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSkKICAgICBp
ZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIG1faW1hZ2Uuc2V0
KEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZSkpOworICAgIG1faW1hZ2UgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIG1fZGF0YVNldCA9IHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5oIGIv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKaW5kZXggNjFkMzFmYS4uYWFlYTc4NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFN0cmluZyBtX2ljb25VUkw7CiAgICAgdGltZV90IG1fc3RhbXA7Ci0gICAgT3duUHRyPElt
YWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICAKICAgICBIYXNo
U2V0PFN0cmluZz4gbV9yZXRhaW5pbmdQYWdlVVJMczsKICAgICAgICAgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggN2NhZjM5Zi4uZWMzOTQ4MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtOTEsMTIgKzkxLDE0IEBAIGNsYXNz
IEJpdG1hcEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVk
SW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSNpZiBQ
TEFURk9STShDRykKLSAgICBCaXRtYXBJbWFnZShDR0ltYWdlUmVmLCBJbWFnZU9ic2VydmVyKiA9
IDApOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQml0bWFwSW1hZ2UoY2Fpcm9fc3VyZmFj
ZV90KiwgSW1hZ2VPYnNlcnZlciogPSAwKTsKLSNlbmRpZgotICAgIEJpdG1hcEltYWdlKEltYWdl
T2JzZXJ2ZXIqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNyZWF0
ZShOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSAw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBJbWFnZShuYXRpdmVJ
bWFnZSwgb2JzZXJ2ZXIpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1h
Z2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG9ic2VydmVyKSk7CisgICAgfQogICAgIH5C
aXRtYXBJbWFnZSgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTM1LDYgKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4g
ZnJhbWVBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgQml0bWFw
SW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAgQml0bWFwSW1h
Z2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDUyZDJi
ZDcuLjEyYmRlM2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC01MSw2ICs1
MSwxNiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAg
cmV0dXJuIG1heCgwLCBtaW4oYSwgMjU1KSkgPDwgMjQgfCBtYXgoMCwgbWluKHIsIDI1NSkpIDw8
IDE2IHwgbWF4KDAsIG1pbihnLCAyNTUpKSA8PCA4IHwgbWF4KDAsIG1pbihiLCAyNTUpKTsKIH0K
IAoraW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCit7CisgICAgcmV0dXJuIG1heCgw
LCBtaW4oc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Cit9CisK
K1JHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBm
bG9hdCBhKQoreworICAgIHJldHVybiBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSA8PCAyNCB8IGNv
bG9yRmxvYXRUb1JHQkFCeXRlKHIpIDw8IDE2IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZykgPDwg
OCB8IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpOworfQorCiBzdGF0aWMgZG91YmxlIGNhbGNIdWUo
ZG91YmxlIHRlbXAxLCBkb3VibGUgdGVtcDIsIGRvdWJsZSBodWVWYWwpCiB7CiAgICAgaWYgKGh1
ZVZhbCA8IDAuMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCAxNjAzYzFhLi41YWUz
OGE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC01Niw2ICs1Niw5IEBAIHR5cGVk
ZWYgdW5zaWduZWQgUkdCQTMyOyAgICAgICAgLy8gUkdCQSBxdWFkcnVwbGV0CiAKIFJHQkEzMiBt
YWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwogUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKKworaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0KTsKK1JH
QkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9h
dCBhKTsKIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGRvdWJsZSBoLCBkb3VibGUgcywgZG91Ymxl
IGwsIGRvdWJsZSBhKTsKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKQEAgLTY2LDYgKzY5LDggQEAgcHVibGljOgogICAgIENvbG9yKFJHQkEzMiBj
b2wpIDogbV9jb2xvcihjb2wpLCBtX3ZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBp
bnQgZywgaW50IGIpIDogbV9jb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgbV92YWxpZCh0cnVlKSB7
IH0KICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkgOiBtX2NvbG9yKG1ha2VS
R0JBKHIsIGcsIGIsIGEpKSwgbV92YWxpZCh0cnVlKSB7IH0KKyAgICAvLyBDb2xvciBpcyBjdXJy
ZW50bHkgbGltaXRlZCB0byAzMmJpdCBSR0JBLCBwZXJoYXBzIHNvbWUgZGF5IHdlJ2xsIHN1cHBv
cnQgYmV0dGVyIGNvbG9ycworICAgIENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpIDogbV9jb2xvcihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSksIG1fdmFs
aWQodHJ1ZSkgeyB9CiAgICAgZXhwbGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CiAgICAgZXhw
bGljaXQgQ29sb3IoY29uc3QgY2hhciopOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5oCmluZGV4IGQzODJmMDYuLmIzMjFiOGQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTUxLDYgKzUxLDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAKKyAgICAvLyBBc3N1bWUgdGhhdCBnZW5lcmF0ZWQgY29udGVudCBoYXMgbm8gZGVjb2RlZCBk
YXRhIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAppbmRleCA3NTBjNThjLi5iOWM3MWY4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lk
IEdyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IENvbG9yJiBjb2xvcikK
ICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVT
dG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wICZhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wICZiKQorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVTdG9wcyhjb25zdCBHcmFkaWVudDo6
Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBiKQogewogICAgIHJldHVy
biBhLnN0b3AgPCBiLnN0b3A7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKaW5k
ZXggNzAxNTliMC4uMGIwZDg1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaApA
QCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC03OSwxMSArNzgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRTdG9wc1NvcnRlZChib29sIHMpIHsgbV9zdG9w
c1NvcnRlZCA9IHM7IH0KIAotI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShDQUlSTykKICAg
ICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
Jik7Ci0jZWxzZQotICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLSNlbmRpZgogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxMDFhYmY4
Li5lOTRkM2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTkzLDYgKzkzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEltYWdl
QnVmZmVyOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKKyAgICBjbGFzcyBQYXR0
ZXJuOwogICAgIGNsYXNzIFRleHRSdW47CiAKICAgICAvLyBUaGVzZSBiaXRzIGNhbiBiZSBPUmVk
IHRvZ2V0aGVyIGZvciBhIHRvdGFsIG9mIDggcG9zc2libGUgdGV4dCBkcmF3aW5nIG1vZGVzLgpA
QCAtMTM0LDcgKzEzNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgICAgIAorCisgICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBh
dHRlcm4mKTsKKyAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsK
KwogICAgICAgICB2b2lkIHNhdmUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlKCk7CiAgICAgICAg
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCAxYTFlM2IyLi5jYTY5NTRlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkltYWdlLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC00OSw2ICs1MCwxMiBA
QCBJbWFnZTo6fkltYWdlKCkKIHsKIH0KIAorSW1hZ2UqIEltYWdlOjpudWxsSW1hZ2UoKQorewor
ICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
KTsKKyAgICByZXR1cm4gbnVsbEltYWdlLmdldCgpOworfQorCiBib29sIEltYWdlOjpzdXBwb3J0
c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZSh0eXBlKTsgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKaW5kZXggM2M3MzVkNi4uZDY1ZTUyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaApAQCAtNjksMTggKzY5LDE5IEBAIGNsYXNzIFN0cmluZzsKIC8vIFRoaXMgY2xhc3Mg
Z2V0cyBub3RpZmllZCB3aGVuIGFuIGltYWdlIGNyZWF0ZXMgb3IgZGVzdHJveXMgZGVjb2RlZCBm
cmFtZXMgYW5kIHdoZW4gaXQgYWR2YW5jZXMgYW5pbWF0aW9uIGZyYW1lcy4KIGNsYXNzIEltYWdl
T2JzZXJ2ZXI7CiAKLWNsYXNzIEltYWdlIDogTm9uY29weWFibGUgeworY2xhc3MgSW1hZ2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFn
ZTsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogcHVibGljOgotICAgIEltYWdl
KEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKLSAgICBz
dGF0aWMgSW1hZ2UqIGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogPSAwKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSk7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOyAK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICAKKworICAgIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCk7CiAgICAgYm9vbCBpc051
bGwoKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIFNWR0ltYWdlIHJp
Z2h0IG5vdwpAQCAtOTYsMTEgKzk3LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBzZXREYXRhKFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAg
dmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIAotICAgIC8vIEZJWE1FOiBQREYvU1ZHIHdpbGwgYmUgdW5kZXJyZXBvcnRp
bmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUgdG8gcHJ1bmUgYmVjYXVzZSB0aGVz
ZSBmdW5jdGlvbnMgYXJlIG5vdAotICAgIC8vIGltcGxlbWVudGVkIHlldCBmb3IgdGhvc2UgaW1h
Z2UgdHlwZXMuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3Jl
bWVudGFsID0gZmFsc2UpIHt9OwotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVj
b2RlZFNpemUoKSBjb25zdCA9IDA7CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVy
biBtX2RhdGEuZ2V0KCk7IH0KIApAQCAtMTM3LDkgKzEzNiwxMCBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgorICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisKICAgICBzdGF0
aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3ApOwogCi1wcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBk
cmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvcikg
eyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBl
NjUyZTJhLi5lNWRhM2VkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CkBAIC0zMywyNSArMzMsNiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8bWVtb3J5PgogCi0jaWYgIVBMQVRGT1JNKENHKQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSog
Q0dJbWFnZVJlZjsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UVBpeG1h
cD4KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBhaW50ZXI7Ci1RVF9FTkRfTkFNRVNQQUNF
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENBSVJPKQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1
cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTY5LDE5ICs1MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCi0jaWYgUExBVEZP
Uk0oQ0cpCi0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIFFQaXht
YXAqIHBpeG1hcCgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykg
fHwgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQogICAgICAgICBJbWFnZSogaW1hZ2Uo
KSBjb25zdDsKLSNlbHNlCi0gICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KLSNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJJbWFnZSgp
IHsgbV9pbWFnZS5jbGVhcigpOyB9CiAKQEAgLTkwLDIzICs1OSwyMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdDsKIAotICAgICAgICAKLQogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fZGF0
YTsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gbV9jb250ZXh0OwotICAgICAgICBtdXRhYmxlIE93blB0cjxJbWFnZT4gbV9pbWFnZTsK
KyAgICAgICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgCiAjaWYgUExBVEZP
Uk0oQ0cpCiAgICAgICAgIEltYWdlQnVmZmVyKHZvaWQqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYsIHN0ZDo6YXV0b19wdHI8R3JhcGhpY3NDb250ZXh0Pik7CiAjZWxpZiBQTEFURk9STShRVCkK
LSAgICAgICAgSW1hZ2VCdWZmZXIoY29uc3QgUVBpeG1hcCAmcHgpOworICAgICAgICBJbWFnZUJ1
ZmZlcihjb25zdCBRUGl4bWFwJik7CiAgICAgICAgIG11dGFibGUgUVBpeG1hcCBtX3BpeG1hcDsK
ICAgICAgICAgbXV0YWJsZSBRUGFpbnRlciogbV9wYWludGVyOwogI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgICAgIEltYWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7CisgICAg
ICAgIEltYWdlQnVmZmVyKGNhaXJvX3N1cmZhY2VfdCopOwogICAgICAgICBtdXRhYmxlIGNhaXJv
X3N1cmZhY2VfdCogbV9zdXJmYWNlOwogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdHRlcm4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODhi
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworI2luY2x1ZGUgIkltYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0dGVybjo6UGF0dGVybihJbWFnZSogaW1hZ2Us
IGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgIDogbV90aWxlSW1hZ2UoaW1hZ2UpCisg
ICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKKyAgICAsIG1fcmVwZWF0WShyZXBlYXRZKQoreworICAg
IEFTU0VSVChpbWFnZSk7Cit9CisKK1BhdHRlcm46On5QYXR0ZXJuKCkKK3sKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mNjNiZmUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXR0ZXJuLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBhdHRlcm5faAorI2RlZmluZSBQYXR0ZXJuX2gKKworI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKENH
KQordHlwZWRlZiBzdHJ1Y3QgQ0dQYXR0ZXJuKiBDR1BhdHRlcm5SZWY7Cit0eXBlZGVmIENHUGF0
dGVyblJlZiBQbGF0Zm9ybVBhdHRlcm5QdHI7CisjZWxpZiBQTEFURk9STShDQUlSTykKKyNpbmNs
dWRlIDxjYWlyby5oPgordHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtUGF0dGVyblB0
cjsKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFCcnVzaD4KK3R5cGVkZWYgUUJydXNo
KiBQbGF0Zm9ybVBhdHRlcm5QdHI7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBJbWFnZTsKKworICAgIGNsYXNzIFBh
dHRlcm4gOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOworCisgICAgICAgIHZpcnR1YWwgflBhdHRl
cm4oKTsKKyAgICAgICAgCisgICAgICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVJbWFnZS5nZXQoKTsgfQorCisgICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1h
Z2U7CisgICAgICAgIGJvb2wgbV9yZXBlYXRYOworICAgICAgICBib29sIG1fcmVwZWF0WTsKKyAg
ICB9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBiMDdl
MmE0Li5hYzUwYTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNDk1LDYgKzQ5NSwyMyBAQCBJbnRQ
b2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigpCiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4obWF0cml4LngwKSwgc3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueTApKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJu
JiBwYXR0ZXJuKQoreworICAgIGNhaXJvX3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0
dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmICghcGxhdGZvcm1Q
YXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19zZXRfc291cmNlKHBsYXRmb3Jt
Q29udGV4dCgpLCBwbGF0Zm9ybVBhdHRlcm4pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShw
bGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0
dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIC8vIFRoZSBDYWlybyBjb2RlcGF0
aCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCBzZXBhcmF0ZSBzdHJva2UvZmlsbD8KKyAgICAvLyBU
aGUgY29kZSBJIHJlZmFjdG9yZWQgdG8gY3JlYXRlIHRoZXNlIG1ldGhvZHMgd2FzIGlkZW50aWNh
bCBmb3IgQ2Fpcm8KKyAgICBhcHBseVN0cm9rZVBhdHRlcm4ocGF0dGVybik7Cit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQog
ewogICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5IGEgbm8tb3AgYnV0IEknbSBub3Qgc3Vy
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKaW5kZXggYjEyNzg4OC4uMjhkNWMyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKICNp
bmNsdWRlIDxjYWlyby5oPgogCkBAIC03MCwxMSArNzEsNiBAQCBHcmFwaGljc0NvbnRleHQqIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwog
fQogCi1jYWlyb19zdXJmYWNlX3QqIEltYWdlQnVmZmVyOjpzdXJmYWNlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zdXJmYWNlOwotfQotCiBJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29u
c3QKIHsKICAgICBpZiAoIW1faW1hZ2UpIHsKQEAgLTgyLDcgKzc4LDcgQEAgSW1hZ2UqIEltYWdl
QnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBtdXN0IGJl
IGRvbmUuCiAgICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAgICAvLyBCaXRtYXBJbWFn
ZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAg
ICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSht
X3N1cmZhY2UpKSk7CisgICAgICAgIG1faW1hZ2Uuc2V0KEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fp
cm9fc3VyZmFjZV9yZWZlcmVuY2UobV9zdXJmYWNlKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9p
bWFnZS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0dGVybkNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
dGVybkNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU1MTNj
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0
ZXJuQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
KSBjb25zdAoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGltYWdlKCktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiA9IGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX2Zvcl9zdXJmYWNlKHN1cmZhY2UpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChw
YXR0ZXJuLCAmcGF0dGVyblRyYW5zZm9ybSk7CisgICAgaWYgKG1fcmVwZWF0WCB8fCBtX3JlcGVh
dFkpCisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChwYXR0ZXJuLCBDQUlST19FWFRF
TkRfUkVQRUFUKTsKKyAgICByZXR1cm4gcGF0dGVybjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA4NmIxYTlh
Li4zODhjNGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQYXR0
ZXJuLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgogI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR1BERkNvbnRleHQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgpAQCAtNDg5LDcgKzQ5MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEltYWdlQnVmZmVyCiAgICAgCiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0LngoKSwgcmVj
dC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmNn
SW1hZ2UoKSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBpbWFnZUJ1ZmZlci0+aW1hZ2UoKS0+
Z2V0Q0dJbWFnZVJlZigpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQo
KSwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwg
LXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KQEAgLTg5Miw2ICs4OTMs
MzYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGlu
dCBtb2RlKQogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0
dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9y
bVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAg
aWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JTcGFj
ZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAgIENH
Q29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UocGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFj
ZSk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOworCisgICAgY29uc3Qg
Q0dGbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOworICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4o
cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7CisgICAg
Q0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQoreworICAgIENH
UGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsK
KworICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQ
YXR0ZXJuKDApOworICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4
dCgpLCBwYXR0ZXJuU3BhY2UpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNl
KTsKKworICAgIGNvbnN0IENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRT
ZXRGaWxsUGF0dGVybihwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVy
bkFscGhhKTsKKyAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7Cit9CisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZGQ1MjE5Mi4uNjIwNzRhZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBA
IC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAg
ICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBv
biBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlLnNldChuZXcgQml0bWFwSW1hZ2UoY2dJbWFn
ZSkpOworICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKICAg
ICB9CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CkBAIC0xNTMsOSArMTUzLDggQEAgUGFz
c1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwpAQCAtMjA1LDkgKzIwNCw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmgKaW5kZXggY2FkZGMwNS4uOTkzZjQ0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTM4LDE0ICszOCwyMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQREZEb2N1bWVudEltYWdlIDogcHVibGljIElt
YWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdlKTsKKyAgICAg
ICAgfQogICAgICAgICB+UERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICAKICAgICAgICAgdmly
dHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAorICAgICAgICAv
LyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQg
d2lsbCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlv
bnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUERG
RG9jdW1lbnRJbWFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRDdXJyZW50UGFn
ZShpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJu
Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZjdhNjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGF0dGVybi5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
dm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7
CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2UqPihpbmZv
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIGlmICghcGxhdGZvcm1JbWFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRU
b0RldmljZVBpeGVscygKKyAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChw
bGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdlKTsKK30KKworc3Rh
dGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQoreworICAgIHN0YXRp
Y19jYXN0PEltYWdlKj4oaW5mbyktPmRlcmVmKCk7Cit9CisKK0NHUGF0dGVyblJlZiBQYXR0ZXJu
OjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
IGNvbnN0Cit7CisgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVJbWFnZSgpLT5yZWN0KCk7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBw
YXR0ZXJuVHJhbnNmb3JtLnNjYWxlKDEsIC0xKTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5z
bGF0ZSgwLCAtdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgLy8gSWYgRkxUX01BWCBzaG91bGQg
YWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBpcyByZW5kZXJlZC4gVXNp
bmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbworICAgIC8vIHJlc3VsdCBpbiBub3RoaW5nIGJl
aW5nIHJlbmRlcmVkLgorICAgIC8vIElOVF9NQVggaXMgYWxtb3N0IGNvcnJlY3QsIGJ1dCB0aGVy
ZSBzZWVtcyB0byBiZSBzb21lIG51bWJlciB3cmFwcGluZyBvY2N1cmluZyBtYWtpbmcgdGhlIGZp
bGwKKyAgICAvLyBwYXR0ZXJuIGlzIG5vdCBmaWxsZWQgY29ycmVjdGx5LiAKKyAgICAvLyBTbywg
anVzdCBwaWNrIGEgcmVhbGx5IGxhcmdlIG51bWJlciB0aGF0IHdvcmtzLiAKKyAgICBmbG9hdCB4
U3RlcCA9IG1fcmVwZWF0WCA/IHRpbGVSZWN0LndpZHRoKCkgOiAoMTAwMDAwMDAwLjBmKTsKKyAg
ICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdodCgpIDogKDEwMDAwMDAw
MC4wZik7CisKKyAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIHRpbGUgd2hlbiBp
dCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKKyAgICB0aWxlSW1h
Z2UoKS0+cmVmKCk7CisKKyAgICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxi
YWNrcyA9IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07Cisg
ICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZSh0aWxlSW1hZ2UoKSwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKKyAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50
U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKaW5kZXggYTA3NDcyMC4uYjc0NTIwOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcApAQCAtMjYsOCArMjYs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIC8vIFRoaXMg
ZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CiBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKQEAgLTQyLDEyICs0MCwxMyBAQCB2b2lkIEJp
dG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKIHsKIH0KIAotSW1hZ2UqIEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQorUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAg
VmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKLSAgICBCaXRt
YXBJbWFnZSogaW1nID0gbmV3IEJpdG1hcEltYWdlOworICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4g
aW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyci5kYXRhKCksIGFyci5zaXplKCkpOwogICAg
IGltZy0+c2V0RGF0YShidWZmZXIsIHRydWUpOwotICAgIHJldHVybiBpbWc7CisgICAgcmV0dXJu
IGltZy5yZWxlYXNlKCk7CiB9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ltYWdlTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0KaW5kZXggODE2ZjljYi4uYTBkMjU3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTUyLDI0ICs1MiwyMiBAQCB2b2lkIEJpdG1hcEltYWdl
OjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKICAgICBtX3RpZmZSZXAgPSAwOwogfQogCi1JbWFn
ZSogSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCitQYXNzUmVm
UHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFtZSkK
IHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2UgbnVsbEltYWdlOwotICAgIAogICAgIE5TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVCdW5kbGVGaW5kZXIg
Y2xhc3NdXTsKICAgICBOU1N0cmluZyAqaW1hZ2VQYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm5hbWVdIG9mVHlwZTpAInRpZmYiXTsK
ICAgICBOU0RhdGEgKm5hbWVkSW1hZ2VEYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZG
aWxlOmltYWdlUGF0aF07CiAgICAgaWYgKG5hbWVkSW1hZ2VEYXRhKSB7Ci0gICAgICAgIEltYWdl
KiBpbWFnZSA9IG5ldyBCaXRtYXBJbWFnZTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgaW1hZ2UtPnNldERhdGEoU2hhcmVkQnVm
ZmVyOjp3cmFwTlNEYXRhKG5hbWVkSW1hZ2VEYXRhKSwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBp
bWFnZTsKKyAgICAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBXZSBoYXZlIHJlcG9ydHMgaW5kaWNhdGluZyByZXNvdXJjZSBsb2FkcyBhcmUgZmFpbGlu
ZywgYnV0IHdlIGRvbid0IHlldCBrbm93IHRoZSByb290IGNhdXNlKHMpLgogICAgIC8vIFR3byB0
aGVvcmllcyBhcmUgYmFkIGluc3RhbGxzIChpbWFnZSBmaWxlcyBhcmUgbWlzc2luZyksIGFuZCB0
b28tbWFueS1vcGVuLWZpbGVzLgogICAgIC8vIFNlZSByZGFyOi8vNTYwNzM4MQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAmbnVsbEltYWdlOworICAgIHJldHVybiBJbWFn
ZTo6bnVsbEltYWdlKCk7CiB9CiAKIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJl
c2VudGF0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0
dGVyblF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE3OTEwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdHRlcm4u
aCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUUJydXNoKiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDdlMmM3
ZmMuLjk0ZmNlZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTU0Niw4ICs1NDYs
NyBAQCB2b2lkIFJlbmRlckltYWdlOjpjYWxjUHJlZldpZHRocygpCiAKIEltYWdlKiBSZW5kZXJJ
bWFnZTo6bnVsbEltYWdlKCkKIHsKLSAgICBzdGF0aWMgQml0bWFwSW1hZ2Ugc2hhcmVkTnVsbElt
YWdlOwotICAgIHJldHVybiAmc2hhcmVkTnVsbEltYWdlOworICAgIHJldHVybiBJbWFnZTo6bnVs
bEltYWdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCBlNDBiZTRiLi40MTJmMmNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC0xNDMwLDExICsxNDMwLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZs
b3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25zCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4K
LSAgICAgICAgc3RhdGljIEltYWdlKiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICAgICAgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CiAgICAgICAgIGlmICghcmVzaXplQ29y
bmVySW1hZ2UpCiAgICAgICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKTsKICAgICAgICAgSW50UG9pbnQg
aW1hZ2VQb2ludChzY3JvbGxDb3JuZXIucmlnaHQoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0
aCgpLCBzY3JvbGxDb3JuZXIuYm90dG9tKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkp
OwotICAgICAgICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUG9pbnQpOwor
ICAgICAgICBwLT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGltYWdlUG9pbnQp
OwogCiAgICAgICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5
IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgogICAgICAgICAvLyBD
bGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBm
cmFtZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA3ODg1NmM1Li5jY2NlN2U2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0xNzUsMTYgKzE3NSw3IEBAIE5hdGl2ZUlt
YWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdl
dCgpLCBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSk7CiAgICAgfQotI2lmIFBMQVRGT1JNKENH
KQotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPmNnSW1hZ2UoKTsKLSNlbGlmIFBMQVRGT1JNKFFU
KQotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPnBpeG1hcCgpOwotI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCi0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c3VyZmFjZSgpOwotI2Vsc2UKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAgcmV0dXJuIG1fZnJhbWVD
YWNoZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogYm9vbCBT
VkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuaAppbmRleCAzZTY3YTdjLi4wM2JiNTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5oCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgK
QEAgLTQyLDcgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBT
VkdJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CiAgICAgcHVibGljOgotICAgICAgICBTVkdJbWFnZShJ
bWFnZU9ic2VydmVyKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ltYWdlPiBjcmVh
dGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHSW1hZ2Uob2JzZXJ2ZXIpKTsKKyAgICAgICAgfQogICAgICAgICB+
U1ZHSW1hZ2UoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25z
dCBJbnRTaXplJik7CkBAIC01NCw5ICs1NywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwogCisgICAgICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRl
Y29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCisgICAgICAgIC8vIHRvIHBydW5lIGJlY2F1
c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9
CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAw
OyB9CisKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90
KSB7IHJldHVybiAwOyB9CiAgICAgICAgIAogcHJpdmF0ZToKKyAgICAgICAgU1ZHSW1hZ2UoSW1h
Z2VPYnNlcnZlciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwIGIvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCmluZGV4IGM0
MjA3ZTAuLjVlZjZkNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NW
R1BhaW50U2VydmVyUGF0dGVybkNhaXJvLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9j
YWlyby9TVkdQYWludFNlcnZlclBhdHRlcm5DYWlyby5jcHAKQEAgLTI0LDkgKzI0LDExIEBACiAj
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIK
KwogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NSw3ICs2Nyw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqCiAKICAgICBtX293bmVyRWxl
bWVudC0+YnVpbGRQYXR0ZXJuKHRhcmdldFJlY3QpOwogCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBp
bWFnZSA9IHRpbGUoKS0+c3VyZmFjZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSB0
aWxlKCktPmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9jYWlyby9TVkdSZXNvdXJjZU1hc2tlckNhaXJvLmNwcCBiL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2VyQ2Fpcm8uY3BwCmluZGV4IDc4ZWE3NmIuLmYy
ZGQyMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNl
TWFza2VyQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291
cmNlTWFza2VyQ2Fpcm8uY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQog
I2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCkBAIC0z
MCw4ICszMSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHUmVzb3VyY2VNYXNr
ZXI6OmFwcGx5TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3gpCiB7CisgICAgaWYgKCFtX21hc2spCisgICAgICAgIG1fbWFzay5zZXQobV9v
d25lckVsZW1lbnQtPmRyYXdNYXNrZXJDb250ZW50KGJvdW5kaW5nQm94LCBtX21hc2tSZWN0KS5y
ZWxlYXNlKCkpOworICAgIGlmICghbV9tYXNrKQorICAgICAgICByZXR1cm47CisKICAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IG1fbWFzay0+c3VyZmFjZSgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSA9IG1fbWFzay0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAg
ICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybjsKICAgICBjYWlyb19wYXR0ZXJuX3QqIG1h
c2sgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9mb3Jfc3VyZmFjZShzdXJmYWNlKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCBi
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcAppbmRl
eCAwN2ZmNDdjLi40MTZkNWZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9T
VkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cv
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB2b2lk
IHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShj
b250ZXh0LCAwLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0
U2NhbGVDVE0oY29udGV4dCwgMS4wZiwgLTEuMGYpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBDR1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcGF0dGVybkltYWdlLT5zaXpl
KCkpKSwgcGF0dGVybkltYWdlLT5jZ0ltYWdlKCkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LCBDR1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcGF0dGVybkltYWdlLT5zaXpl
KCkpKSwgcGF0dGVybkltYWdlLT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwogICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0gYi9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9jZy9TVkdSZXNvdXJjZU1hc2tlckNnLm1tCmluZGV4IDdmY2JmZTYuLmVjNmIzNDMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0KKysr
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQpAQCAtMTEy
LDcgKzExMiw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5TWFzayhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91CiAgICAgQ0lDb250ZXh0KiBjaUdy
YXlzY2FsZUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoQ0dDb250ZXh0OmdyYXlTY2Fs
ZUNvbnRleHQgb3B0aW9uczpuaWxdOwogCiAgICAgLy8gVHJhbnNmb3JtIGNvbG9yaXplZCBtYXNr
IHRvIGdyYXkgc2NhbGUKLSAgICBDSUltYWdlKiBjb2xvck1hc2sgPSBbQ0lJbWFnZSBpbWFnZVdp
dGhDR0ltYWdlOm1fbWFzay0+Y2dJbWFnZSgpXTsKKyAgICBDSUltYWdlKiBjb2xvck1hc2sgPSBb
Q0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOm1fbWFzay0+aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigp
XTsKICAgICBpZiAoIWNvbG9yTWFzaykKICAgICAgICAgcmV0dXJuOwogICAgIENJSW1hZ2UqIGdy
YXlTY2FsZU1hc2sgPSB0cmFuc2Zvcm1JbWFnZUludG9HcmF5c2NhbGVNYXNrKGNvbG9yTWFzayk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22761</attachid>
            <date>2008-08-12 17:41:37 -0700</date>
            <delta_ts>2008-08-12 18:10:24 -0700</delta_ts>
            <desc>Split out HTML5 functional change into separate change</desc>
            <filename>Split-out-HTML5-functional-change-into-separate-change.patch</filename>
            <type>text/plain</type>
            <size>2092</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ODhmYmEzNTE2NTkyZDVlOWNjYTRmNWExYTlmYWE1ZWZmNmY1NTJmMwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2NhbnZhcy1wYXR0ZXJuLWZyb20taW5jcmVtZW50YWwt
aW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9jYW52YXMtcGF0dGVybi1m
cm9tLWluY3JlbWVudGFsLWltYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjVmYmViMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bWlzYy9jYW52YXMtcGF0dGVybi1mcm9tLWluY3JlbWVudGFsLWltYWdlLmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPGJvZHk+Cis8c2NyaXB0PgordmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImNhbnZhcyIpOwordmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworY3R4
LmZpbGxSZWN0KDAsMCwxNTAsMTUwKTsKK3ZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKK2ltZy5zcmMg
PSAncmVzb3VyY2VzL2ltYWdlLXNsb3cucGwnOwordmFyIHB0cm4KK3RyeSB7CisJcHRybiA9IGN0
eC5jcmVhdGVQYXR0ZXJuKGltZywgJ3JlcGVhdCcpOworCWRvY3VtZW50LndyaXRlKCJGQUlMIik7
Cit9IGNhdGNoIChlKSB7CisJaWYgKGUuY29kZSA9PSBET01FeGNlcHRpb24uSU5WQUxJRF9TVEFU
RV9FUlIpIHsKKwkJZG9jdW1lbnQud3JpdGUoIlBBU1MiKTsKKwl9IGVsc2UgeworCQlkb2N1bWVu
dC53cml0ZSgiRkFJTCAiICsgZSk7CisJfQorfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291
cmNlcy9pbWFnZS1zbG93LnBsIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNl
cy9pbWFnZS1zbG93LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4MGY3
M2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3Vy
Y2VzL2ltYWdlLXNsb3cucGwKQEAgLTAsMCArMSwxOSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisK
KyMgZmx1c2ggdGhlIGJ1ZmZlcnMgYWZ0ZXIgZWFjaCBwcmludAorc2VsZWN0IChTVERPVVQpOwor
JHwgPSAxOworCitwcmludCAiQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnXHJcbiI7CitwcmludCAi
RXhwaXJlczogVGh1LCAwMSBEZWMgMjAwMyAxNjowMDowMCBHTVRcclxuIjsKK3ByaW50ICJDYWNo
ZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZVxyXG4iOworcHJp
bnQgIlByYWdtYTogbm8tY2FjaGVcclxuIjsKK3ByaW50ICJcclxuIjsKKworc2xlZXAgMjsKKwor
b3BlbihGSUxFLCAiY29tcGFzcy5qcGciKTsKK3doaWxlICg8RklMRT4pIHsKKyAgcHJpbnQgJF87
Cit9CitjbG9zZShGSUxFKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKaW5kZXggNWIzMzBlMy4uNmUwOTZlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKQEAgLTExMjIsNiArMTEyMiwxMSBAQCBQYXNzUmVmUHRyPENhbnZhc1Bh
dHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MSW1hZ2VF
bGVtZQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAoIWltYWdlLT5j
b21wbGV0ZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5j
YWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZSgpKQogICAgICAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEltYWdl
OjpudWxsSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgdHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22762</attachid>
            <date>2008-08-12 18:13:08 -0700</date>
            <delta_ts>2008-08-13 14:59:48 -0700</delta_ts>
            <desc>Split out Color changes into separate commit</desc>
            <filename>Split-out-Color-changes-into-separate-commit.patch</filename>
            <type>text/plain</type>
            <size>10851</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZTliMjkzZGFmOTliMTU3MWFlNjMxZTJmOWNhNTVlNjYyZDQ1MGRjNwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAK
aW5kZXggYmU1MDEzYS4uYmVlNGVmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0
eWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCkBAIC0zNCw2ICszNCwx
MCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250
ZXh0Lmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFQYWludGVyPgog
I2luY2x1ZGUgPFFCcnVzaD4KQEAgLTYwLDEyICs2NCwxNiBAQCBDYW52YXNTdHlsZTo6Q2FudmFz
U3R5bGUoZmxvYXQgZ3JheUxldmVsKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29u
c3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCi0gICAgOiBtX3R5cGUoQ29sb3JTdHJpbmdX
aXRoQWxwaGEpLCBtX2NvbG9yKGNvbG9yKSwgbV9hbHBoYShhbHBoYSkKKyAgICA6IG1fdHlwZShD
b2xvclN0cmluZ1dpdGhBbHBoYSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX2FscGhh
KGFscGhhKQogewogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVs
LCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShHcmF5TGV2ZWwpLCBtX2FscGhhKGFscGhhKSwg
bV9ncmF5TGV2ZWwoZ3JheUxldmVsKQorICAgIDogbV90eXBlKEdyYXlMZXZlbCkKKyAgICAsIG1f
YWxwaGEoYWxwaGEpCisgICAgLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCiB7CiB9CiAKQEAgLTgw
LDEwNCArODgsNDcgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0s
IGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHls
ZShQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVudCkKLSAgICA6IG1fdHlwZShncmFk
aWVudCA/IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpLCBtX2dyYWRpZW50KGdyYWRpZW50KQorICAg
IDogbV90eXBlKGdyYWRpZW50ID8gR3JhZGllbnQgOiBDb2xvclN0cmluZykKKyAgICAsIG1fZ3Jh
ZGllbnQoZ3JhZGllbnQpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShQYXNzUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4pCi0gICAgOiBtX3R5cGUocGF0dGVybiA/IEltYWdl
UGF0dGVybiA6IENvbG9yU3RyaW5nKSwgbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgOiBtX3R5cGUo
cGF0dGVybiA/IEltYWdlUGF0dGVybiA6IENvbG9yU3RyaW5nKQorICAgICwgbV9wYXR0ZXJuKHBh
dHRlcm4pCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxw
aGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQoreworICAgIFJHQkEzMiByZ2JP
bmx5ID0gY29sb3IgJiAweDAwRkZGRkZGOworICAgIFJHQkEzMiByZ2JhID0gcmdiT25seSB8IGNv
bG9yRmxvYXRUb1JHQkFCeXRlKG92ZXJyaWRlQWxwaGEpIDw8IDI0OworICAgIHJldHVybiByZ2Jh
OworfQorCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSNpZiBQ
TEFURk9STShRVCkKLSAgICBRUGFpbnRlciogcCA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbmRpZgogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKICAgICAgICAgICAgIFJH
QkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJhbnQgYmxhY2sKICAgICAgICAg
ICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcik7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29u
dGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JT
dHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAo
KGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAv
IDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAmIDB4RkYpIC8gMjU1LjBm
KTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+
cGVuKCk7Ci0gICAgICAgICAgICBjdXJyZW50UGVuLnNldENvbG9yKChRQ29sb3IoUVJnYihjb2xv
cikpKSk7Ci0gICAgICAgICAgICBwLT5zZXRQZW4oY3VycmVudFBlbik7Ci0jZWxpZiBQTEFURk9S
TShDQUlSTykKLSAgICAgICAgICAgIC8vIEZJWE1FOiBmaWxsIGFuZCBzdHJva2UgY29sb3Igc2hv
dWxkIGJlIGRlYWx0IHdpdGggc2VwYXJhdGVseQotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9yZ2JhKGNyLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUu
MGYsCi0gICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAotICAg
ICAgICAgICAgICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgo
Y29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMGYpOwotI2VuZGlmCisgICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CiAgICAgICAgICAgICBSR0JB
MzIgY29sb3IgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyYW50IGJsYWNrCiAgICAgICAgICAg
ICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpOwotICAgICAgICAgICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ry
b2tlQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgKChj
b2xvciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+
IDgpICYgMHhGRikgLyAyNTUuMGYsCi0gICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAy
NTUuMGYsCi0gICAgICAgICAgICAgICAgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAg
ICAgICAgICAgIFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgUUNvbG9y
IGNsciA9IFFDb2xvcihRUmdiKGNvbG9yKSk7Ci0gICAgICAgICAgICBjbHIuc2V0QWxwaGFGKG1f
YWxwaGEpOwotICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAgICAg
ICAgcC0+c2V0UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAg
ICAgICAvLyBGSVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBiZSBkZWFsdCB3aXRo
IHNlcGFyYXRlbHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwKLSAgICAg
ICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAg
ICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29s
b3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAmIDB4
RkYpIC8gMjU1LjBmKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xvciwgbV9hbHBoYSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmF5TGV2ZWw6IHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3ND
b250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldEdy
YXlTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWwsIG1f
YWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICBRQ29sb3IgY2xyOwotICAg
ICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gcC0+cGVuKCk7Ci0gICAgICAgICAgICBjbHIuc2V0
UmdiRihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSAg
ICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldFBl
bihjdXJyZW50UGVuKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZV9yZ2JhKGNyLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVs
LCBtX2FscGhhKTsKLSNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
Q29sb3IobV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSR0JBOiB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdy
YXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRl
eHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9yZWQsIG1f
Z3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAg
IFFQZW4gY3VycmVudFBlbiA9IHAtPnBlbigpOwotICAgICAgICAgICAgUUNvbG9yIGNscjsKLSAg
ICAgICAgICAgIGNsci5zZXRSZ2JGKG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpOwot
ICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOwotICAgICAgICAgICAgcC0+c2V0
UGVuKGN1cnJlbnRQZW4pOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgICAgICAvLyBG
SVhNRTogZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIHNob3VsZCBiZSBkZWFsdCB3aXRoIHNlcGFyYXRl
bHkKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgbV9yZWQsIG1fZ3JlZW4s
IG1fYmx1ZSwgbV9hbHBoYSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKENvbG9yKG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ01ZS0E6IHsKQEAgLTIwOCw3NSAr
MTU5LDI1IEBAIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5RmlsbENvbG9yKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSNpZiBQ
TEFURk9STShRVCkKLSAgICBRUGFpbnRlciogcCA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2VuZGlmCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewotICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0g
MDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawotICAgICAgICAgICAgQ1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0
aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNp
ZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAm
IDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZGKSAv
IDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAgICAg
ICAgICAgICAgICAoKGNvbG9yID4+IDI0KSAmIDB4RkYpIC8gMjU1LjBmKTsKLSNlbGlmIFBMQVRG
T1JNKFFUKQotICAgICAgICAgICAgUUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0g
ICAgICAgICAgICBRQ29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYihRUmdiKGNvbG9y
KSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAg
IHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIFJHQkEzMiBy
Z2JhID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjaworICAgICAgICAgICAgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIG1fY29sb3IpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKHJnYmEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb2xvclN0cmluZ1dpdGhBbHBoYTogewogICAgICAgICAgICAgUkdCQTMyIGNvbG9y
ID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmFudCBibGFjawogICAgICAgICAgICAgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBE
byB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4K
LSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2
KSAmIDB4RkYpIC8gMjU1LjBmLAotICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkgJiAweEZG
KSAvIDI1NS4wZiwKLSAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wZiwKLSAg
ICAgICAgICAgICAgICBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICAgICAg
UUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAgICBRQ29sb3IgY2xy
OwotICAgICAgICAgICAgY2xyLnNldFJnYihRUmdiKGNvbG9yKSk7Ci0gICAgICAgICAgICBjbHIu
c2V0QWxwaGFGKG1fYWxwaGEpOwotICAgICAgICAgICAgY3VycmVudEJydXNoLnNldENvbG9yKGNs
cik7Ci0gICAgICAgICAgICBwLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2VuZGlmCisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb2xv
ciwgbV9hbHBoYSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBHcmF5TGV2ZWw6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxh
dGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykK
LSAgICAgICAgICAgIENHQ29udGV4dFNldEdyYXlGaWxsQ29sb3IoY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIG1fZ3JheUxldmVsLCBtX2FscGhhKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICAgICAgUUJydXNoIGN1cnJlbnRCcnVzaCA9IHAtPmJydXNoKCk7Ci0gICAgICAgICAgICBR
Q29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldFJnYkYobV9ncmF5TGV2ZWwsIG1fZ3JheUxl
dmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7Ci0gICAgICAgICAgICBjdXJyZW50QnJ1c2guc2V0
Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIHAtPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7Ci0jZW5k
aWYKKyAgICAgICAgY2FzZSBHcmF5TGV2ZWw6CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3IoQ29sb3IobV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9hbHBo
YSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSR0JBOiB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5k
ZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBD
R0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fcmVk
LCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAg
ICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gcC0+YnJ1c2goKTsKLSAgICAgICAgICAgIFFDb2xv
ciBjbHI7Ci0gICAgICAgICAgICBjbHIuc2V0UmdiRihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBt
X2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOwotICAgICAg
ICAgICAgcC0+c2V0QnJ1c2goY3VycmVudEJydXNoKTsKLSNlbmRpZgorICAgICAgICBjYXNlIFJH
QkE6CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3Jl
ZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAg
ICAgICAgY2FzZSBDTVlLQTogewogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3Vn
aCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogI2lmIFBMQVRGT1JN
KENHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRleCA1MmQyYmQ3Li4xMmJkZTNl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApAQCAtNTEsNiArNTEsMTYgQEAgUkdC
QTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQogICAgIHJldHVybiBtYXgo
MCwgbWluKGEsIDI1NSkpIDw8IDI0IHwgbWF4KDAsIG1pbihyLCAyNTUpKSA8PCAxNiB8IG1heCgw
LCBtaW4oZywgMjU1KSkgPDwgOCB8IG1heCgwLCBtaW4oYiwgMjU1KSk7CiB9CiAKK2ludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIHJldHVybiBtYXgoMCwgbWluKHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOworfQorCitSR0JBMzIgbWFr
ZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sK
KyAgICByZXR1cm4gY29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkgPDwgMjQgfCBjb2xvckZsb2F0VG9S
R0JBQnl0ZShyKSA8PCAxNiB8IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpIDw8IDggfCBjb2xvckZs
b2F0VG9SR0JBQnl0ZShiKTsKK30KKwogc3RhdGljIGRvdWJsZSBjYWxjSHVlKGRvdWJsZSB0ZW1w
MSwgZG91YmxlIHRlbXAyLCBkb3VibGUgaHVlVmFsKQogewogICAgIGlmIChodWVWYWwgPCAwLjAp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggMTYwM2MxYS4uNWFlMzhhNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTYsNiArNTYsOSBAQCB0eXBlZGVmIHVuc2lnbmVk
IFJHQkEzMjsgICAgICAgIC8vIFJHQkEgcXVhZHJ1cGxldAogCiBSR0JBMzIgbWFrZVJHQihpbnQg
ciwgaW50IGcsIGludCBiKTsKIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSk7CisKK2ludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCk7CitSR0JBMzIgbWFrZVJH
QkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShkb3VibGUgaCwgZG91YmxlIHMsIGRvdWJsZSBsLCBkb3VibGUg
YSk7CiAKIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
CkBAIC02Niw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBDb2xvcihSR0JBMzIgY29sKSA6IG1fY29s
b3IoY29sKSwgbV92YWxpZCh0cnVlKSB7IH0KICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBi
KSA6IG1fY29sb3IobWFrZVJHQihyLCBnLCBiKSksIG1fdmFsaWQodHJ1ZSkgeyB9CiAgICAgQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogbV9jb2xvcihtYWtlUkdCQShyLCBnLCBi
LCBhKSksIG1fdmFsaWQodHJ1ZSkgeyB9CisgICAgLy8gQ29sb3IgaXMgY3VycmVudGx5IGxpbWl0
ZWQgdG8gMzJiaXQgUkdCQSwgcGVyaGFwcyBzb21lIGRheSB3ZSdsbCBzdXBwb3J0IGJldHRlciBj
b2xvcnMKKyAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSA6IG1f
Y29sb3IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpLCBtX3ZhbGlkKHRydWUpIHsg
fQogICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IFN0cmluZyYpOwogICAgIGV4cGxpY2l0IENvbG9y
KGNvbnN0IGNoYXIqKTsKICAgICAK
</data>
<flag name="review"
          id="10098"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22763</attachid>
            <date>2008-08-12 18:13:12 -0700</date>
            <delta_ts>2008-08-13 15:11:56 -0700</delta_ts>
            <desc>Split out Image cleanup into separate commit</desc>
            <filename>Split-out-Image-cleanup-into-separate-commit.patch</filename>
            <type>text/plain</type>
            <size>26247</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZDUwMTY5ODA2ZjlmZThjMTliZDY3NDA0MzI4YmJiMjdhYTAwMzM5YgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDdkZjJlMGQuLmQwMDIyMGQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKQEAgLTE5NSwxMyArMTk1
LDExIEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRlRGVsZXRpb25VSSgpCiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKGJ1
dHRvbldpZHRoKSArICJweCIpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgU3RyaW5nOjpudW1iZXIoYnV0dG9uSGVpZ2h0KSArICJweCIpOwogCi0gICAgSW1hZ2Uq
IGJ1dHRvbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJkZWxldGVCdXR0b24i
KTsKLSAgICBpZiAoYnV0dG9uSW1hZ2UtPmlzTnVsbCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBidXR0
b25JbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IGJ1dHRvbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJkZWxldGVCdXR0b24iKTsKKyAgICBpZiAoYnV0dG9uSW1hZ2UtPmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGJ1dHRvbi0+c2V0Q2FjaGVk
SW1hZ2UobmV3IENhY2hlZEltYWdlKGJ1dHRvbkltYWdlKSk7CisKKyAgICBidXR0b24tPnNldENh
Y2hlZEltYWdlKG5ldyBDYWNoZWRJbWFnZShidXR0b25JbWFnZS5nZXQoKSkpOwogCiAgICAgY29u
dGFpbmVyLT5hcHBlbmRDaGlsZChidXR0b24uZ2V0KCksIGVjKTsKICAgICBBU1NFUlQoZWMgPT0g
MCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAgYi9XZWJDb3Jl
L2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKaW5kZXggMzRhMDY1Yi4uMmM3ZDRjMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmNwcApAQCAtNDgsMjIgKzQ4LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Q2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQogICAgIDogQ2FjaGVk
UmVzb3VyY2UodXJsLCBJbWFnZVJlc291cmNlKQorICAgICwgbV9pbWFnZSgwKQogewotICAgIG1f
aW1hZ2UgPSAwOwogICAgIG1fc3RhdHVzID0gVW5rbm93bjsKIH0KIAogQ2FjaGVkSW1hZ2U6OkNh
Y2hlZEltYWdlKEltYWdlKiBpbWFnZSkKICAgICA6IENhY2hlZFJlc291cmNlKFN0cmluZygpLCBJ
bWFnZVJlc291cmNlKQorICAgICwgbV9pbWFnZShpbWFnZSkKIHsKLSAgICBtX2ltYWdlID0gaW1h
Z2U7CiAgICAgbV9zdGF0dXMgPSBDYWNoZWQ7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiB9CiAK
IENhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQogewotICAgIGRlbGV0ZSBtX2ltYWdlOwogfQog
ICAgIAogdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikKQEAgLTkz
LDE2ICs5MiwxNiBAQCB2b2lkIENhY2hlZEltYWdlOjphbGxSZWZlcmVuY2VzUmVtb3ZlZCgpCiAK
IHN0YXRpYyBJbWFnZSogYnJva2VuSW1hZ2UoKQogewotICAgIHN0YXRpYyBJbWFnZSogYnJva2Vu
SW1hZ2U7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gYnJva2VuSW1hZ2U7CiAgICAgaWYgKCFi
cm9rZW5JbWFnZSkKICAgICAgICAgYnJva2VuSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoIm1pc3NpbmdJbWFnZSIpOwotICAgIHJldHVybiBicm9rZW5JbWFnZTsKKyAgICByZXR1
cm4gYnJva2VuSW1hZ2UuZ2V0KCk7CiB9CiAKIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCkKIHsK
LSAgICBzdGF0aWMgQml0bWFwSW1hZ2UgbnVsbEltYWdlOwotICAgIHJldHVybiAmbnVsbEltYWdl
OworICAgIHN0YXRpYyBSZWZQdHI8Qml0bWFwSW1hZ2U+IG51bGxJbWFnZSA9IEJpdG1hcEltYWdl
OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gbnVsbEltYWdlLmdldCgpOwogfQogCiBJbWFnZSogQ2Fj
aGVkSW1hZ2U6OmltYWdlKCkgY29uc3QKQEAgLTExMSw3ICsxMTAsNyBAQCBJbWFnZSogQ2FjaGVk
SW1hZ2U6OmltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJyb2tlbkltYWdlKCk7CiAKICAg
ICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2U7CisgICAgICAgIHJldHVybiBt
X2ltYWdlLmdldCgpOwogCiAgICAgcmV0dXJuIG51bGxJbWFnZSgpOwogfQpAQCAtMTk1LDE0ICsx
OTQsMTMgQEAgSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KGZsb2F0IG11bHRpcGxpZXIp
IGNvbnN0CiB2b2lkIENhY2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoKQogewogICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVz
b3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGMgPSB3Lm5leHQoKSkKICAgICAgICAgYy0+aW1hZ2VDaGFuZ2VkKHRoaXMpOwogfQogCiB2
b2lkIENhY2hlZEltYWdlOjpjbGVhcigpCiB7CiAgICAgZGVzdHJveURlY29kZWREYXRhKCk7Ci0g
ICAgZGVsZXRlIG1faW1hZ2U7CiAgICAgbV9pbWFnZSA9IDA7CiAgICAgc2V0RW5jb2RlZFNpemUo
MCk7CiB9CkBAIC0yMTQsMTcgKzIxMiwxNyBAQCBpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3Jl
YXRlSW1hZ2UoKQogICAgICAgICByZXR1cm47CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgaWYgKG1f
cmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24vcGRmIikgewotICAgICAgICBtX2lt
YWdlID0gbmV3IFBERkRvY3VtZW50SW1hZ2U7CisgICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVu
dEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogI2lmIEVO
QUJMRShTVkdfQVNfSU1BR0UpCiAgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiaW1h
Z2Uvc3ZnK3htbCIpIHsKLSAgICAgICAgbV9pbWFnZSA9IG5ldyBTVkdJbWFnZSh0aGlzKTsKKyAg
ICAgICAgbV9pbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUodGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYKLSAgICBtX2ltYWdlID0gbmV3IEJpdG1hcEltYWdlKHRoaXMpOworICAg
IG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHRoaXMpOwogfQogCiB2b2lkIENhY2hlZElt
YWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmggYi9XZWJDb3Jl
L2xvYWRlci9DYWNoZWRJbWFnZS5oCmluZGV4IDBhM2QyNDguLjIxM2M5ZjAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuaApAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlSW1hZ2Uo
KTsKICAgICB2b2lkIG5vdGlmeU9ic2VydmVycygpOwogCi0gICAgSW1hZ2UqIG1faW1hZ2U7Cisg
ICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcCBiL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29y
ZC5jcHAKaW5kZXggOGIzZDVmOS4uZjA3MGNjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uUmVjb3JkLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQu
Y3BwCkBAIC02NiwxMiArNjYsMTIgQEAgdm9pZCBJY29uUmVjb3JkOjpzZXRJbWFnZURhdGEoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpCiB7CiAgICAgLy8gSXQncyBva2F5IHRvIGRlbGV0
ZSB0aGUgcmF3IGltYWdlIGhlcmUuIEFueSBleGlzdGluZyBjbGllbnRzIHVzaW5nIHRoaXMgaWNv
biB3aWxsIGJlCiAgICAgLy8gbWFuYWdpbmcgYW4gaW1hZ2UgdGhhdCB3YXMgY3JlYXRlZCB3aXRo
IGEgY29weSBvZiB0aGlzIHJhdyBpbWFnZSBkYXRhLgotICAgIG1faW1hZ2Uuc2V0KG5ldyBCaXRt
YXBJbWFnZSgpKTsKKyAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogCiAgICAg
Ly8gQ29weSB0aGUgcHJvdmlkZWQgZGF0YSBpbnRvIHRoZSBidWZmZXIgb2YgdGhlIG5ldyBJbWFn
ZSBvYmplY3QuCiAgICAgaWYgKCFtX2ltYWdlLT5zZXREYXRhKGRhdGEsIHRydWUpKSB7CiAgICAg
ICAgIExPRyhJY29uRGF0YWJhc2UsICJNYW51YWwgaW1hZ2UgZGF0YSBmb3IgaWNvblVSTCAnJXMn
IEZBSUxFRCAtIGl0IHdhcyBwcm9iYWJseSBpbnZhbGlkIGltYWdlIGRhdGEiLCBtX2ljb25VUkwu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBtX2ltYWdlLnNldCgwKTsKKyAgICAgICAgbV9pbWFn
ZS5jbGVhcigpOwogICAgIH0KICAgICAKICAgICBtX2RhdGFTZXQgPSB0cnVlOwpAQCAtODIsNyAr
ODIsNyBAQCB2b2lkIEljb25SZWNvcmQ6OmxvYWRJbWFnZUZyb21SZXNvdXJjZShjb25zdCBjaGFy
KiByZXNvdXJjZSkKICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIG1faW1hZ2Uuc2V0KEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShyZXNvdXJjZSkp
OworICAgIG1faW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UocmVzb3VyY2UpOwog
ICAgIG1fZGF0YVNldCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvblJlY29yZC5oIGIvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKaW5kZXgg
NjFkMzFmYS4uYWFlYTc4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVj
b3JkLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgKQEAgLTk0LDcgKzk0
LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2ljb25VUkw7CiAgICAgdGltZV90IG1fc3Rh
bXA7Ci0gICAgT3duUHRyPEltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFn
ZTsKICAgICAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXRhaW5pbmdQYWdlVVJMczsKICAgICAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggN2NhZjM5Zi4u
ZWMzOTQ4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtOTEs
MTIgKzkxLDE0IEBAIGNsYXNzIEJpdG1hcEltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBmcmll
bmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIHB1YmxpYzoKLSNpZiBQTEFURk9STShDRykKLSAgICBCaXRtYXBJbWFnZShDR0ltYWdlUmVm
LCBJbWFnZU9ic2VydmVyKiA9IDApOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQml0bWFw
SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiwgSW1hZ2VPYnNlcnZlciogPSAwKTsKLSNlbmRpZgotICAg
IEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Qml0bWFwSW1hZ2U+IGNyZWF0ZShOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
aXRtYXBJbWFnZShuYXRpdmVJbWFnZSwgb2JzZXJ2ZXIpKTsKKyAgICB9CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IDAp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcEltYWdlKG9ic2VydmVy
KSk7CisgICAgfQogICAgIH5CaXRtYXBJbWFnZSgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBp
c0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTM1LDYgKzEzNyw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgeyByZXR1cm4gZnJhbWVBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCiBwcm90
ZWN0ZWQ6CisgICAgQml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIEltYWdlT2JzZXJ2ZXIqID0g
MCk7CisgICAgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKKwogI2lmIFBMQVRGT1JN
KFdJTikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmgKaW5kZXggZDM4MmYwNi4uYjMyMWI4ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaApAQCAtNTEsNiArNTEsMTAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KIAorICAgIC8vIEFzc3VtZSB0aGF0IGdlbmVyYXRlZCBjb250ZW50IGhhcyBubyBkZWNvZGVk
IGRhdGEgd2UgbmVlZCB0byB3b3JyeSBhYm91dAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVj
b2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCmluZGV4IDc1MGM1OGMuLmI5YzcxZjggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgQ29sb3ImIGNvbG9y
KQogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZVN0b3BzKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AgJmEsIGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AgJmIpCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3BzKGNvbnN0IEdyYWRpZW50
OjpDb2xvclN0b3AmIGEsIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGIpCiB7CiAgICAgcmV0
dXJuIGEuc3RvcCA8IGIuc3RvcDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaApp
bmRleCA3MDE1OWIwLi4wYjBkODUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5o
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShDRykKQEAgLTc5LDExICs3OCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldFN0b3BzU29ydGVkKGJvb2wgcykgeyBtX3N0
b3BzU29ydGVkID0gczsgfQogCi0jaWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKENBSVJPKQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmKTsKLSNlbHNlCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotI2VuZGlmCiAKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IDA7IH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggMWExZTNiMi4uY2E2OTU0ZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJJbWFnZS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDksNiArNTAsMTIgQEAg
SW1hZ2U6On5JbWFnZSgpCiB7CiB9CiAKK0ltYWdlKiBJbWFnZTo6bnVsbEltYWdlKCkKK3sKKyAg
ICBzdGF0aWMgUmVmUHRyPEltYWdlPiBudWxsSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7
CisgICAgcmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKK30KKwogYm9vbCBJbWFnZTo6c3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUodHlwZSk7IApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCmluZGV4IDNjNzM1ZDYuLmQ2NWU1MjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKQEAgLTY5LDE4ICs2OSwxOSBAQCBjbGFzcyBTdHJpbmc7CiAvLyBUaGlzIGNsYXNzIGdl
dHMgbm90aWZpZWQgd2hlbiBhbiBpbWFnZSBjcmVhdGVzIG9yIGRlc3Ryb3lzIGRlY29kZWQgZnJh
bWVzIGFuZCB3aGVuIGl0IGFkdmFuY2VzIGFuaW1hdGlvbiBmcmFtZXMuCiBjbGFzcyBJbWFnZU9i
c2VydmVyOwogCi1jbGFzcyBJbWFnZSA6IE5vbmNvcHlhYmxlIHsKK2NsYXNzIEltYWdlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIHB1YmxpYzoKLSAgICBJbWFnZShJ
bWFnZU9ic2VydmVyKiA9IDApOwogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCi0gICAgc3Rh
dGljIEltYWdlKiBsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsgCiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgCisKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwogICAgIGJvb2wgaXNOdWxs
KCkgY29uc3Q7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdo
dCBub3cKQEAgLTk2LDExICs5Nyw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2V0RGF0YShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIHZp
cnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAKLSAgICAvLyBGSVhNRTogUERGL1NWRyB3aWxsIGJlIHVuZGVycmVwb3J0aW5n
IGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlIHRvIHBydW5lIGJlY2F1c2UgdGhlc2Ug
ZnVuY3Rpb25zIGFyZSBub3QKLSAgICAvLyBpbXBsZW1lbnRlZCB5ZXQgZm9yIHRob3NlIGltYWdl
IHR5cGVzLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1l
bnRhbCA9IGZhbHNlKSB7fTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIGluY3JlbWVudGFsID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29k
ZWRTaXplKCkgY29uc3QgPSAwOwogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgeyByZXR1cm4g
bV9kYXRhLmdldCgpOyB9CiAKQEAgLTEzNyw5ICsxMzYsMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
IHByb3RlY3RlZDoKKyAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOworCiAgICAgc3RhdGlj
IHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
KTsKIAotcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsg
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggZTY1
MmUyYS4uZTVkYTNlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApA
QCAtMzMsMjUgKzMzLDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PG1lbW9yeT4KIAotI2lmICFQTEFURk9STShDRykKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDRykKLXR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENH
SW1hZ2VSZWY7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQaXhtYXA+
Ci1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQYWludGVyOwotUVRfRU5EX05BTUVTUEFDRQot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShDQUlSTykKLXR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJm
YWNlIGNhaXJvX3N1cmZhY2VfdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC02OSwxOSArNTAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQog
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAotI2lmIFBMQVRGT1JN
KENHKQotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UoKSBjb25zdCB7IHJldHVybiBpbWFnZSgp
LT5nZXRDR0ltYWdlUmVmKCk7IH0KLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICBRUGl4bWFw
KiBwaXhtYXAoKSBjb25zdDsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ0cpIHx8
IFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkKICAgICAgICAgSW1hZ2UqIGltYWdlKCkg
Y29uc3Q7Ci0jZWxzZQotICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7
IG1faW1hZ2UuY2xlYXIoKTsgfQogCkBAIC05MCwyMyArNTksMjEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkg
Y29uc3Q7CiAKLSAgICAgICAgCi0KICAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX2RhdGE7
CiAgICAgICAgIEludFNpemUgbV9zaXplOwogCiAgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQ+IG1fY29udGV4dDsKLSAgICAgICAgbXV0YWJsZSBPd25QdHI8SW1hZ2U+IG1faW1hZ2U7Cisg
ICAgICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIAogI2lmIFBMQVRGT1JN
KENHKQogICAgICAgICBJbWFnZUJ1ZmZlcih2b2lkKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUm
LCBzdGQ6OmF1dG9fcHRyPEdyYXBoaWNzQ29udGV4dD4pOwogI2VsaWYgUExBVEZPUk0oUVQpCi0g
ICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IFFQaXhtYXAgJnB4KTsKKyAgICAgICAgSW1hZ2VCdWZm
ZXIoY29uc3QgUVBpeG1hcCYpOwogICAgICAgICBtdXRhYmxlIFFQaXhtYXAgbV9waXhtYXA7CiAg
ICAgICAgIG11dGFibGUgUVBhaW50ZXIqIG1fcGFpbnRlcjsKICNlbGlmIFBMQVRGT1JNKENBSVJP
KQotICAgICAgICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworICAgICAg
ICBJbWFnZUJ1ZmZlcihjYWlyb19zdXJmYWNlX3QqKTsKICAgICAgICAgbXV0YWJsZSBjYWlyb19z
dXJmYWNlX3QqIG1fc3VyZmFjZTsKICNlbmRpZgogICAgIH07CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCBiMTI3ODg4
Li4yOGQ1YzIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+CiAKQEAg
LTcwLDExICs3MSw2IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBj
b25zdAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLWNhaXJvX3N1cmZhY2VfdCog
SW1hZ2VCdWZmZXI6OnN1cmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3N1cmZhY2U7Ci19
Ci0KIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogewogICAgIGlmICghbV9pbWFn
ZSkgewpAQCAtODIsNyArNzgsNyBAQCBJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QK
ICAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG11c3QgYmUgZG9uZS4KICAgICAgICAgQVNTRVJU
KGNvbnRleHQoKSk7CiAgICAgICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFz
c2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICAgICAgbV9pbWFnZS5zZXQobmV3IEJp
dG1hcEltYWdlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG1fc3VyZmFjZSkpKTsKKyAgICAgICAg
bV9pbWFnZS5zZXQoQml0bWFwSW1hZ2U6OmNyZWF0ZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSht
X3N1cmZhY2UpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZGQ1MjE5
Mi4uNjIwNzRhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgp
IGNvbnN0CiAgICAgICAgIEFTU0VSVChjb250ZXh0KCkpOwogICAgICAgICBDR0ltYWdlUmVmIGNn
SW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQg
aW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgICAgICBtX2ltYWdlLnNldChuZXcgQml0bWFw
SW1hZ2UoY2dJbWFnZSkpOworICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
Z0ltYWdlKTsKICAgICB9CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CkBAIC0xNTMsOSAr
MTUzLDggQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBh
bHBoYTsKICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKICAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwpAQCAtMjA1LDkgKzIwNCw4IEBAIHZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uCiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNS
b3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CiAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmgKaW5kZXggY2FkZGMwNS4uOTkzZjQ0NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTM4LDE0ICsz
OCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQREZEb2N1bWVudEltYWdl
IDogcHVibGljIEltYWdlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBERkRvY3VtZW50SW1hZ2Uo
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudElt
YWdlKTsKKyAgICAgICAgfQogICAgICAgICB+UERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICAK
ICAgICAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsK
IAorICAgICAgICAvLyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2Rl
ZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKKyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0
aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KwogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToK
KyAgICAgICAgUERGRG9jdW1lbnRJbWFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAgICAgdm9pZCBz
ZXRDdXJyZW50UGFnZShpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW1hZ2VHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VH
dGsuY3BwCmluZGV4IGEwNzQ3MjAuLmI3NDUyMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9JbWFnZUd0ay5jcHAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiAvLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNl
cyBmcm9tIFdlYktpdAogVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBj
aGFyKik7CkBAIC00MiwxMiArNDAsMTMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBs
YXRmb3JtRGF0YSgpCiB7CiB9CiAKLUltYWdlKiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Y29uc3QgY2hhciAqbmFtZSkKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQogewogICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBsb2Fk
UmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7Ci0gICAgQml0bWFwSW1hZ2UqIGltZyA9IG5ldyBCaXRt
YXBJbWFnZTsKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1hcEltYWdlOjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShhcnIuZGF0YSgpLCBhcnIuc2l6ZSgpKTsKICAgICBpbWctPnNldERhdGEoYnVmZmVyLCB0
cnVlKTsKLSAgICByZXR1cm4gaW1nOworICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwogfQorCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmluZGV4IDgxNmY5Y2Iu
LmEwZDI1N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdl
TWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBA
IC01MiwyNCArNTIsMjIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0
YSgpCiAgICAgbV90aWZmUmVwID0gMDsKIH0KIAotSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgc3RhdGljIEJpdG1hcElt
YWdlIG51bGxJbWFnZTsKLSAgICAKICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1
bmRsZUZvckNsYXNzOltXZWJDb3JlQnVuZGxlRmluZGVyIGNsYXNzXV07CiAgICAgTlNTdHJpbmcg
KmltYWdlUGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpuYW1lXSBvZlR5cGU6QCJ0aWZmIl07CiAgICAgTlNEYXRhICpuYW1lZEltYWdl
RGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmlsZTppbWFnZVBhdGhdOwogICAgIGlm
IChuYW1lZEltYWdlRGF0YSkgewotICAgICAgICBJbWFnZSogaW1hZ2UgPSBuZXcgQml0bWFwSW1h
Z2U7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7
CiAgICAgICAgIGltYWdlLT5zZXREYXRhKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShuYW1lZElt
YWdlRGF0YSksIHRydWUpOwotICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgICAgIHJldHVybiBp
bWFnZS5yZWxlYXNlKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gV2UgaGF2ZSByZXBvcnRzIGlu
ZGljYXRpbmcgcmVzb3VyY2UgbG9hZHMgYXJlIGZhaWxpbmcsIGJ1dCB3ZSBkb24ndCB5ZXQga25v
dyB0aGUgcm9vdCBjYXVzZShzKS4KICAgICAvLyBUd28gdGhlb3JpZXMgYXJlIGJhZCBpbnN0YWxs
cyAoaW1hZ2UgZmlsZXMgYXJlIG1pc3NpbmcpLCBhbmQgdG9vLW1hbnktb3Blbi1maWxlcy4KICAg
ICAvLyBTZWUgcmRhcjovLzU2MDczODEKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gJm51bGxJbWFnZTsKKyAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogfQogCiBD
RkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKaW5kZXggN2UyYzdmYy4uOTRmY2VkOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcApAQCAtNTQ2LDggKzU0Niw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmNhbGNQcmVm
V2lkdGhzKCkKIAogSW1hZ2UqIFJlbmRlckltYWdlOjpudWxsSW1hZ2UoKQogewotICAgIHN0YXRp
YyBCaXRtYXBJbWFnZSBzaGFyZWROdWxsSW1hZ2U7Ci0gICAgcmV0dXJuICZzaGFyZWROdWxsSW1h
Z2U7CisgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGU0MGJlNGIuLjQxMmYyY2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MzAsMTEgKzE0MzAsMTEgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogcCwg
aW50IHR4LCBpbnQgdHksIGNvbnMKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBQ
YWludCB0aGUgcmVzaXplciBjb250cm9sLgotICAgICAgICBzdGF0aWMgSW1hZ2UqIHJlc2l6ZUNv
cm5lckltYWdlOworICAgICAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFn
ZTsKICAgICAgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKICAgICAgICAgICAgIHJlc2l6ZUNv
cm5lckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNv
cm5lciIpOwogICAgICAgICBJbnRQb2ludCBpbWFnZVBvaW50KHNjcm9sbENvcm5lci5yaWdodCgp
IC0gcmVzaXplQ29ybmVySW1hZ2UtPndpZHRoKCksIHNjcm9sbENvcm5lci5ib3R0b20oKSAtIHJl
c2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7Ci0gICAgICAgIHAtPmRyYXdJbWFnZShyZXNpemVD
b3JuZXJJbWFnZSwgaW1hZ2VQb2ludCk7CisgICAgICAgIHAtPmRyYXdJbWFnZShyZXNpemVDb3Ju
ZXJJbWFnZS5nZXQoKSwgaW1hZ2VQb2ludCk7CiAKICAgICAgICAgLy8gRHJhdyBhIGZyYW1lIGFy
b3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxi
YXJzIHByZXNlbnQuCiAgICAgICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQg
YW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CmluZGV4IDc4ODU2YzUuLmNjY2U3ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAg
LTE3NSwxNiArMTc1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZW5kZXJTdWJ0
cmVlVG9JbWFnZShtX2ZyYW1lQ2FjaGUuZ2V0KCksIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KTsKICAgICB9Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+Y2dJ
bWFnZSgpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+cGl4
bWFwKCk7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5z
dXJmYWNlKCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0j
ZW5kaWYKKyAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERh
dGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgg
Yi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCmluZGV4IDNlNjdhN2MuLjAzYmI1MjAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKKysrIGIvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaApAQCAtNDIsNyArNDIsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAogICAgIGNsYXNzIFNWR0ltYWdlIDogcHVibGljIEltYWdlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHSW1hZ2U+IGNyZWF0ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJbWFnZShvYnNlcnZl
cikpOworICAgICAgICB9CiAgICAgICAgIH5TVkdJbWFnZSgpOwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTU0LDkgKzU3LDE1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBkYXRh
Q2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICAgICAgLy8gRklYTUU6IFNWR0lt
YWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUK
KyAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2aXJ0dWFsIE5hdGl2ZUlt
YWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgCiBwcml2
YXRlOgorICAgICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlclBh
dHRlcm5DYWlyby5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZl
clBhdHRlcm5DYWlyby5jcHAKaW5kZXggYzQyMDdlMC4uNWVmNmQ0NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2Fpcm8uY3BwCisr
KyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1BhaW50U2VydmVyUGF0dGVybkNhaXJv
LmNwcApAQCAtMjQsOSArMjQsMTEgQEAKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclBhdHRlcm4u
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgorCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDcgKzY3LDcgQEAgYm9vbCBTVkdQYWludFNl
cnZlclBhdHRlcm46OnNldHVwKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRl
ck9iamVjdCoKIAogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZFBhdHRlcm4odGFyZ2V0UmVjdCk7
CiAKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gdGlsZSgpLT5zdXJmYWNlKCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IHRpbGUoKS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NWR1Jlc291cmNlTWFza2Vy
Q2Fpcm8uY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJD
YWlyby5jcHAKaW5kZXggNzhlYTc2Yi4uZjJkZDIxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvY2Fpcm8vU1ZHUmVzb3VyY2VNYXNrZXJDYWlyby5jcHAKQEAgLTIxLDYgKzIx
LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAKQEAgLTMwLDggKzMxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKIHsKKyAgICBpZiAoIW1fbWFz
aykKKyAgICAgICAgbV9tYXNrLnNldChtX293bmVyRWxlbWVudC0+ZHJhd01hc2tlckNvbnRlbnQo
Ym91bmRpbmdCb3gsIG1fbWFza1JlY3QpLnJlbGVhc2UoKSk7CisgICAgaWYgKCFtX21hc2spCisg
ICAgICAgIHJldHVybjsKKwogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gbV9tYXNrLT5zdXJmYWNlKCk7
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gbV9tYXNrLT5pbWFnZSgpLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJu
OwogICAgIGNhaXJvX3BhdHRlcm5fdCogbWFzayA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2Zvcl9z
dXJmYWNlKHN1cmZhY2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwCmluZGV4IDA3ZmY0N2MuLjQxNmQ1ZmUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcAorKysg
Yi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAKQEAg
LTM4LDcgKzM4LDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENH
Q29udGV4dFJlZiBjb250ZXh0KQogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIHBhdHRlcm5JbWFnZS0+c2l6ZSgp
LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjBmLCAtMS4wZik7
Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKSkpLCBwYXR0ZXJuSW1hZ2UtPmNnSW1hZ2UoKSk7
CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBwYXR0ZXJuSW1hZ2UtPnNpemUoKSkpLCBwYXR0ZXJuSW1hZ2UtPmltYWdlKCktPmdl
dENHSW1hZ2VSZWYoKSk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUmVzb3VyY2VNYXNrZXJD
Zy5tbSBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1Jlc291cmNlTWFza2VyQ2cubW0KaW5k
ZXggN2ZjYmZlNi4uZWM2YjM0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cv
U1ZHUmVzb3VyY2VNYXNrZXJDZy5tbQorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdS
ZXNvdXJjZU1hc2tlckNnLm1tCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBTVkdSZXNvdXJjZU1h
c2tlcjo6YXBwbHlNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBib3UKICAgICBDSUNvbnRleHQqIGNpR3JheXNjYWxlQ29udGV4dCA9IFtDSUNvbnRleHQgY29u
dGV4dFdpdGhDR0NvbnRleHQ6Z3JheVNjYWxlQ29udGV4dCBvcHRpb25zOm5pbF07CiAKICAgICAv
LyBUcmFuc2Zvcm0gY29sb3JpemVkIG1hc2sgdG8gZ3JheSBzY2FsZQotICAgIENJSW1hZ2UqIGNv
bG9yTWFzayA9IFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6bV9tYXNrLT5jZ0ltYWdlKCldOwor
ICAgIENJSW1hZ2UqIGNvbG9yTWFzayA9IFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6bV9tYXNr
LT5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCldOwogICAgIGlmICghY29sb3JNYXNrKQogICAgICAg
ICByZXR1cm47CiAgICAgQ0lJbWFnZSogZ3JheVNjYWxlTWFzayA9IHRyYW5zZm9ybUltYWdlSW50
b0dyYXlzY2FsZU1hc2soY29sb3JNYXNrKTsK
</data>
<flag name="review"
          id="10099"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22764</attachid>
            <date>2008-08-12 18:13:15 -0700</date>
            <delta_ts>2008-08-13 15:06:50 -0700</delta_ts>
            <desc>The final changes needed for Pattern cleanup</desc>
            <filename>The-final-changes-needed-for-Pattern-cleanup.patch</filename>
            <type>text/plain</type>
            <size>37308</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTgxZDU4YTcwODQ2ZDhlNDAxYzMxZmQ2M2RmMTkzNTMzYzI0MmUzYgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOGFmNGRi
My4uYzBhMjAwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTgzLDYgKzE1ODMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0dGVybi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGVuLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9u
dERhdGEuY3BwIFwKQEAgLTE4NjAsNiArMTg2Miw3IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udENhY2hlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGFlM2VjNWYuLjJlNDI0ZDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzg5
LDYgKzc4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Blbi5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vS1VSTC5jcHAg
XApAQCAtOTUwLDYgKzk1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ludFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ludFNpemVRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0
aWxsSW1hZ2VRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVR
dC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGFlYzZjYTQuLjM1NmYyNzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzg5Myw2ICszODkzLDE0
IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXR0ZXJuLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQ
YXR0ZXJuLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCINCiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTQ3MjgsNiArNDczNiwyNiBAQAogCQkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xQYXR0ZXJuQ0cuY3BwIg0KKwkJCQkJCT4N
CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2lu
MzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJ
CTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJ
CQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxUb29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJ
CQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcUERGRG9jdW1lbnRJbWFnZS5jcHAiDQogCQkJCQkJPg0KIAkJCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNDg5ZmIwZC4uNDI2Zjc1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE4OTgsNiArMTg5OCw3IEBACiAJCUE4MDlGMTQ4MEI3Mzc5M0IwMDJF
NEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAgKi87IH07CiAJCUE4MDlGMUFBMEI3MzdGQjYwMDJFNEQ3RiAv
KiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCAqLzsgfTsKIAkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0RDdGIC8qIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBOTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJQTgwQTM4RkUwRTUwQ0M4MjAwQTI1RUJDIC8qIFBh
dHRlcm5DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLzsgfTsKIAkJQTgw
RTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKIAkJQTgwRTZDRTUwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovOyB9OwogCQlBODBFNkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0
aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjk5LDYgKzI3MDAs
OCBAQAogCQlBOEY0NkI4MTBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZHU3RyaW5nTGlzdC5oIGlu
IENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODVENzlBRDIwQUNBMTdFQjAwRjAyRkM1IC8qIERPTVNWR1N0cmluZ0xpc3QuaCAqLzsgfTsK
IAkJQThGNEZCOTQwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjkzMEMxNjlFN0Iw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggKi87IH07CiAJCUE4RjRGQjk2MEMxNjlFODUw
MDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJQThGQTZFNUQwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRl
cm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkE2
RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi87IH07CisJCUE4RkE2RTVFMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAq
LzsgfTsKIAkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUw
MDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgKi87IH07CiAJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJF
OSAvKiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi87IH07CiAJCUE5
QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEU1MEQ3NDVFMTgwMDY0NDJF
OSAvKiBNaW1lVHlwZUFycmF5LmNwcCAqLzsgfTsKQEAgLTMxNjAsNyArMzE2Myw2IEBACiAJCUIy
NzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnRDRy5jcHAgKi87IH07CiAJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovOyB9
OwogCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUQwQjA1MzgxNDAwMkNF
NjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkYwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oICovOyB9OwogCQlCMjc1MzU1RTBCMDUz
ODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAg
Ki87IH07CiAJCUIyNzUzNTVGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NjAwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50
Q0cuY3BwICovOyB9OwpAQCAtNjM5MCw2ICs2MzkyLDcgQEAKIAkJQTgwOUYxNDYwQjczNzkzQTAw
MkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjFB
OTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVC
QyAvKiBQYXR0ZXJuQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGF0dGVybkNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU1ByaW1pdGl2ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02OTI5LDYgKzY5MzIsOCBAQAogCQlBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNW
R1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVu
ZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5
RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaW1lVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBN
aW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8q
IE1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzUzOSw3
ICs3NTQ0LDYgQEAKIAkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2ludENHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGbG9hdFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjc1MzUyRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQ
b2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRQb2lu
dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDk1LDcgKzEyMDk5LDYg
QEAKIAkJCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAog
CQkJCUJDNTNDNjBBMERBNTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKIAkJCQlC
MkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAotCQkJ
CUIyNzUzNTJGMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUuaCAqLywKIAkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAog
CQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKQEAg
LTEyMTA1LDYgKzEyMTA4LDcgQEAKIAkJCQlCMjc1MzUzNTBCMDUzODE0MDAyQ0U2NEYgLyogUGF0
aENHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJ
bWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50
SW1hZ2UuaCAqLywKKwkJCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2c7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMTIyMTMsNiArMTIyMTcsOCBAQAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4
dFJ1bi5oICovLAogCQkJCUU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmgg
Ki8sCisJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQlB
OEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGdyYXBoaWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0MjczLDcgKzE0
Mjc5LDYgQEAKIAkJCQlCMkMzREE3MDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBF
IC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI3NTM1NUQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJBMDE1QUIwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4Q0ZGN0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUQwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxBcHBsZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE1Mzg5LDYgKzE1Mzk0LDcgQEAK
IAkJCQkzMUMwRkY0QjBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEMwRTRDRUZERDAwN0Q2RkU1IC8q
IERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEUw
RTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0xNTQ0Myw5ICsxNTQ0OSw2IEBACiAJCQlwcm9kdWN0UmVmR3JvdXAg
PSAwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGly
UGF0aCA9ICIiOwogCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXByb2plY3RSb290cyA9ICgKLQkJ
CQkiIiwKLQkJCSk7CiAJCQl0YXJnZXRzID0gKAogCQkJCTkzRjE5OEE1MDgyNDVFNTkwMDFFOUFC
QyAvKiBXZWJDb3JlICovLAogCQkJCUREMDQxRkJFMDlEOUREQkUwMDEwQUYyQSAvKiBEZXJpdmVk
IFNvdXJjZXMgKi8sCkBAIC0xNzE3NSw2ICsxNzE3OCw4IEBACiAJCQkJMzFDMEZGM0YwRTRDRUZB
QzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxQzBGRjRBMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTMxQzBGRjREMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJL
aXRUcmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlBOEZBNkU1RTBFNENGREVE
MDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBBMzhGRTBFNTBD
QzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApp
bmRleCBkMmYwMzNkLi4xNmVkZWJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtNzA5LDYgKzcwOSw3IEBA
IFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2Vi
Q29yZS4KICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL25ldHdv
cmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9uZXR3
b3JrL0NyZWRlbnRpYWwuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVy
bi5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKaW5kZXggNzYyMDcwYy4uNDRm
YTIxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcApAQCAtMjYsMTg5ICsyNiw0MSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKIAotI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2
b2lkIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
LCBib29sJiByZXBlYXRYLCBib29sJiByZXBlYXRZLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAg
ICBlYyA9IDA7CiAgICAgaWYgKHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUgPT0gInJlcGVhdCIpIHsK
ICAgICAgICAgcmVwZWF0WCA9IHRydWU7CiAgICAgICAgIHJlcGVhdFkgPSB0cnVlOwotICAgICAg
ICBlYyA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHR5cGUgPT0gIm5vLXJl
cGVhdCIpIHsKICAgICAgICAgcmVwZWF0WCA9IGZhbHNlOwogICAgICAgICByZXBlYXRZID0gZmFs
c2U7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodHlw
ZSA9PSAicmVwZWF0LXgiKSB7CiAgICAgICAgIHJlcGVhdFggPSB0cnVlOwogICAgICAgICByZXBl
YXRZID0gZmFsc2U7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAodHlwZSA9PSAicmVwZWF0LXkiKSB7CiAgICAgICAgIHJlcGVhdFggPSBmYWxzZTsKICAg
ICAgICAgcmVwZWF0WSA9IHRydWU7Ci0gICAgICAgIGVjID0gMDsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBlYyA9IFNZTlRBWF9FUlI7CiB9CiAKLSNpZiBQTEFURk9STShDRykKLQotQ2Fu
dmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihDR0ltYWdlUmVmIGltYWdlLCBib29sIHJlcGVhdFgs
IGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGxhdGZvcm1JbWFnZShp
bWFnZSkKLSAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKLSAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQot
ICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNsZWFu
KQotewotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykKLQotQ2FudmFzUGF0dGVybjo6Q2FudmFz
UGF0dGVybihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBl
YXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgIDogbV9wbGF0Zm9ybUltYWdlKGNhaXJvX3N1cmZh
Y2VfcmVmZXJlbmNlKHN1cmZhY2UpKQotICAgICwgbV9jYWNoZWRJbWFnZSgwKQotICAgICwgbV9y
ZXBlYXRYKHJlcGVhdFgpCi0gICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKK0NhbnZhc1BhdHRlcm46
OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwg
Ym9vbCBvcmlnaW5DbGVhbikKKyAgICA6IG1fcGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0
WSkKICAgICAsIG1fb3JpZ2luQ2xlYW4ob3JpZ2luQ2xlYW4pCiB7CiB9CiAKLSNlbmRpZgotCi1D
YW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSwgYm9v
bCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCi0gICAgOiBtX2NhY2hl
ZEltYWdlKGNhY2hlZEltYWdlKQotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICwgbV9wbGF0Zm9y
bUltYWdlKDApCi0jZW5kaWYKLSAgICAsIG1fcmVwZWF0WChyZXBlYXRYKQotICAgICwgbV9yZXBl
YXRZKHJlcGVhdFkpCi0gICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNsZWFuKQotewotICAgIGlm
IChjYWNoZWRJbWFnZSkKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKLX0K
LQotQ2FudmFzUGF0dGVybjo6fkNhbnZhc1BhdHRlcm4oKQotewotI2lmIFBMQVRGT1JNKENBSVJP
KQotICAgIGlmIChtX3BsYXRmb3JtSW1hZ2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShtX3BsYXRmb3JtSW1hZ2UpOwotI2VuZGlmCi0gICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAg
ICAgIG1fY2FjaGVkSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQotI2lmIFBMQVRGT1JN
KENHKQotCi1zdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0
UmVmIGNvbnRleHQpCi17Ci0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gc3RhdGljX2Nh
c3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgaWYgKHBsYXRm
b3JtSW1hZ2UpIHsKLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4
dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0lt
YWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFn
ZSkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3Jt
SW1hZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5jYWNoZWRJbWFnZSgp
OwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbWFnZSogaW1h
Z2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGltYWdlLT5yZWN0KCkpOwotCi0gICAgaWYgKGltYWdlLT5nZXRDR0lt
YWdlUmVmKCkpIHsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIGlt
YWdlLT5nZXRDR0ltYWdlUmVmKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFj
dG9yIHRoaXMgY29kZSB0byB1c2UgdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IAotICAgICAgICAv
LyBkcmF3aW5nIEFQSSBpbiBhbGwgY2FzZXMuIFRoZW4sIHRoaXMgZGlkRHJhdyBjYWxsIHdpbGwg
aGFwcGVuIAotICAgICAgICAvLyBhdXRvbWF0aWNhbGx5LCBhbmQgd2UgY2FuIHJlbW92ZSBpdC4K
LSAgICAgICAgY2FjaGVkSW1hZ2UtPmRpZERyYXcoaW1hZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLmRyYXdJbWFnZShpbWFnZSwgcmVj
dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykK
LXsKLSAgICBzdGF0aWNfY2FzdDxDYW52YXNQYXR0ZXJuKj4oaW5mbyktPmRlcmVmKCk7Ci19Ci0K
LUNHUGF0dGVyblJlZiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQYXR0ZXJuKGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dSZWN0IHJlY3Q7Ci0gICAgcmVjdC5vcmln
aW4ueCA9IDA7Ci0gICAgcmVjdC5vcmlnaW4ueSA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1JbWFn
ZSkgewotICAgICAgICByZWN0LnNpemUud2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobV9wbGF0Zm9y
bUltYWdlLmdldCgpKTsKLSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IENHSW1hZ2VHZXRIZWln
aHQobV9wbGF0Zm9ybUltYWdlLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1f
Y2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgSW1hZ2UqIGltYWdl
ID0gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKTsKLSAgICAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZWN0LnNpemUud2lkdGggPSBpbWFnZS0+d2lkdGgoKTsK
LSAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IGltYWdlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAg
ICBDR0FmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0KLSAgICAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm1UcmFuc2xhdGUoQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZSh0cmFuc2Zvcm0sIDEsIC0x
KSwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIAotICAgIC8vIElmIEZMVF9NQVggc2hvdWxk
IGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVz
aW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KLSAgICAvLyByZXN1bHQgaW4gbm90aGluZyBi
ZWluZyByZW5kZXJlZC4KLSAgICAvLyBJTlRfTUFYIGlzIGFsbW9zdCBjb3JyZWN0LCBidXQgdGhl
cmUgc2VlbXMgdG8gYmUgc29tZSBudW1iZXIgd3JhcHBpbmcgb2NjdXJpbmcgbWFraW5nIHRoZSBm
aWxsCi0gICAgLy8gcGF0dGVybiBpcyBub3QgZmlsbGVkIGNvcnJlY3RseS4gCi0gICAgLy8gU28s
IGp1c3QgcGljayBhIHJlYWxseSBsYXJnZSBudW1iZXIgdGhhdCB3b3Jrcy4gCi0gICAgZmxvYXQg
eFN0ZXAgPSBtX3JlcGVhdFggPyByZWN0LnNpemUud2lkdGggOiAoMTAwMDAwMDAwLjBmKTsKLSAg
ICBmbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/IHJlY3Quc2l6ZS5oZWlnaHQgOiAoMTAwMDAwMDAw
LjBmKTsKLQotICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0g
eyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKLSAgICByZWYo
KTsKLSAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRoaXMsIHJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHhTdGVwLCB5U3RlcCwKLSAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2lu
ZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykK
LQotY2Fpcm9fcGF0dGVybl90KiBDYW52YXNQYXR0ZXJuOjpjcmVhdGVQYXR0ZXJuKGNvbnN0IGNh
aXJvX21hdHJpeF90JiBtKQotewotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IDA7Ci0g
ICAgaWYgKG1fcGxhdGZvcm1JbWFnZSkgewotICAgICAgICBzdXJmYWNlID0gbV9wbGF0Zm9ybUlt
YWdlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9jYWNoZWRJbWFnZSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2NhY2hlZEltYWdlLT5pbWFn
ZSgpOwotICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICB9Ci0K
LSAgICBpZiAoIXN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY2Fpcm9fcGF0dGVy
bl90KiBwYXR0ZXJuID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2Uoc3VyZmFjZSk7
Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtKTsKLSAgICBpZiAobV9y
ZXBlYXRYIHx8IG1fcmVwZWF0WSkKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKHBh
dHRlcm4sIENBSVJPX0VYVEVORF9SRVBFQVQpOwotICAgIHJldHVybiBwYXR0ZXJuOwotfQotCi0j
ZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKaW5kZXggNjg5MWRhNi4uNzljNzg3MiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uaAorKysgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUGF0dGVybi5oCkBAIC0yNiw3NiArMjYsMzQgQEAKICNpZm5kZWYgQ2FudmFzUGF0dGVybl9o
CiAjZGVmaW5lIENhbnZhc1BhdHRlcm5faAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0jaWYgUExBVEZPUk0oQ0cpCi0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGlj
YXRpb25TZXJ2aWNlcy5oPgotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0jaW5jbHVkZSA8Y2Fpcm8u
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDYWNoZWRJbWFn
ZTsKKyAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBTdHJpbmc7CiAKICAgICB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCi0gICAgY2xhc3MgQ2FudmFzUGF0dGVybiA6IHB1YmxpYyBSZWZD
b3VudGVkPENhbnZhc1BhdHRlcm4+LCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKKyAg
ICBjbGFzcyBDYW52YXNQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzUGF0dGVybj4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VSZXBldGl0aW9uVHlwZShj
b25zdCBTdHJpbmcmLCBib29sJiByZXBlYXRYLCBib29sJiByZXBlYXRZLCBFeGNlcHRpb25Db2Rl
Jik7CiAKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
UGF0dGVybj4gY3JlYXRlKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBl
YXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNs
ZWFuKSk7Ci0gICAgICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKHN1cmZhY2Us
IHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoQ2FjaGVkSW1hZ2Uq
IGltYWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlKEltYWdlKiBpbWFn
ZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGF0dGVybihpbWFnZSwg
cmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAgfQotICAgICAgICB2aXJ0
dWFsIH5DYW52YXNQYXR0ZXJuKCk7Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgQ0dJbWFn
ZVJlZiBwbGF0Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdlLmdldCgp
OyB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBwbGF0
Zm9ybUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUltYWdlOyB9Ci0jZW5kaWYKLSAg
ICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJ
bWFnZTsgfQotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIENHUGF0dGVyblJlZiBjcmVhdGVQ
YXR0ZXJuKGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykK
LSAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVQYXR0ZXJuKGNvbnN0IGNhaXJvX21hdHJp
eF90Jik7Ci0jZW5kaWYKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4o
KSB7IHJldHVybiBtX3BhdHRlcm47IH0KIAogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0ZToKLSNpZiBQTEFURk9S
TShDRykKLSAgICAgICAgQ2FudmFzUGF0dGVybihDR0ltYWdlUmVmLCBib29sIHJlcGVhdFgsIGJv
b2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAg
ICAgICAgQ2FudmFzUGF0dGVybihjYWlyb19zdXJmYWNlX3QqLCBib29sIHJlcGVhdFgsIGJvb2wg
cmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0jZW5kaWYKLSAgICAgICAgQ2FudmFzUGF0dGVy
bihDYWNoZWRJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNs
ZWFuKTsKKyAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCBy
ZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBj
b25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9wbGF0Zm9ybUltYWdlOwotI2VsaWYgUExBVEZP
Uk0oQ0FJUk8pCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfdCogY29uc3QgbV9wbGF0Zm9ybUltYWdl
OwotI2VuZGlmCi0gICAgICAgIENhY2hlZEltYWdlKiBjb25zdCBtX2NhY2hlZEltYWdlOwotICAg
ICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKLSAgICAgICAgY29uc3QgYm9vbCBtX3JlcGVhdFk7
CisgICAgICAgIFBhdHRlcm4gbV9wYXR0ZXJuOwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRl
eCBlN2I2YjBkLi41YjMzMGUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcApAQCAtMTEyMSwxNCArMTEyMSwxNSBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MSW1hZ2VFbGVtZQog
ICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJl
cGVhdFgsIHJlcGVhdFksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSB0cnVlOwotICAgIGlmIChDYWNoZWRJbWFnZSogY2Fj
aGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAgICBLVVJMIHVybChjYWNo
ZWRJbWFnZS0+dXJsKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKLSAgICAgICAgb3JpZ2luQ2xlYW4gPSBtX2Nh
bnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKG9yaWdpbi5nZXQo
KSk7Ci0gICAgfQotICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UtPmNhY2hl
ZEltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKKworICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVk
SW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpKQorICAgICAgICByZXR1cm4g
Q2FudmFzUGF0dGVybjo6Y3JlYXRlKEltYWdlOjpudWxsSW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0
WSwgdHJ1ZSk7CisKKyAgICBLVVJMIHVybChjYWNoZWRJbWFnZS0+dXJsKCkpOworICAgIFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwor
ICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuQWNjZXNzKG9yaWdpbi5nZXQoKSk7CisgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46
OmNyZWF0ZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xl
YW4pOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLApAQCAtMTEzOSwy
MyArMTE0MCw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtCiAgICAgQ2FudmFzUGF0dGVybjo6
cGFyc2VSZXBldGl0aW9uVHlwZShyZXBldGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMp
OwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gRklYTUU6IERvIHRoaXMg
dGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIFBM
QVRGT1JNKENHKQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBjYW52
YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShpbWFnZS5nZXQoKSwgcmVw
ZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLSNlbGlmIFBMQVRGT1JNKENB
SVJPKQotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhbnZhcy0+Y3JlYXRlUGxhdGZv
cm1JbWFnZSgpOwotICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoc3VyZmFj
ZSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLSAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0gICAgcmV0dXJuIHBhdHRlcm4ucmVsZWFzZSgpOwot
I2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCisgICAg
cmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmJ1ZmZlcigpLT5pbWFnZSgpLCBy
ZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByKQpAQCAtMTE3
OCw0NyArMTE2MywyMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlTdHJv
a2VQYXR0ZXJuKCkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1F
OiBDYW4gdGhpcyBjaGVjayBiZSBtb3ZlZCBpbnRvIEdyYXBoaWNzQ29udGV4dD8gb3IgcmVtb3Zl
ZD8KICNpZiBQTEFURk9STShDRykKICAgICAvLyBDaGVjayBmb3IgY2FzZSB3aGVyZSB0aGUgcGF0
dGVybiBpcyBhbHJlYWR5IHNldC4KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dDb250ZXh0
R2V0Q1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRT
dHJva2VQYXR0ZXJuCi0gICAgICAgICAgICAmJiBDR0FmZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFu
c2Zvcm0obSwgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSkpCisgICAgQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IGMtPmdldENUTSgpOworICAgIGlmIChzdGF0ZSgpLm1fYXBwbGll
ZFN0cm9rZVBhdHRlcm4gJiYgY3RtID09IHN0YXRlKCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0pCiAgICAgICAgIHJldHVybjsKKyNlbmRpZgogCiAgICAgQ2FudmFzUGF0dGVybiogcGF0
dGVybiA9IHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpOwogICAgIGlmICghcGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9
IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Ci0gICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0Nv
bG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwotICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3Bh
Y2UoYy0+cGxhdGZvcm1Db250ZXh0KCksIHBhdHRlcm5TcGFjZSk7Ci0gICAgQ0dDb2xvclNwYWNl
UmVsZWFzZShwYXR0ZXJuU3BhY2UpOwotCi0gICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEg
PSAxOwotICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oYy0+cGxhdGZvcm1Db250ZXh0KCks
IHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7Ci0gICAgQ0dQYXR0ZXJuUmVsZWFzZShw
bGF0Zm9ybVBhdHRlcm4pOwotCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5z
Zm9ybSA9IG07Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCku
bV9zdHJva2VTdHlsZS0+cGF0dGVybigpOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWly
b19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKLQotICAgIGNhaXJv
X3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsK
LSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOworICAgIGMtPmFwcGx5
U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwogCi0gICAgY2Fpcm9fc2V0X3NvdXJj
ZShjciwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZv
cm1QYXR0ZXJuKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQ
YXR0ZXJuVHJhbnNmb3JtID0gY3RtOwogI2VuZGlmCiAgICAgc3RhdGUoKS5tX2FwcGxpZWRTdHJv
a2VQYXR0ZXJuID0gdHJ1ZTsKIH0KQEAgLTEyMjksNDcgKzExODksMjIgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIGlmICghYykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8g
R3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIENo
ZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIENHQWZm
aW5lVHJhbnNmb3JtIG0gPSBDR0NvbnRleHRHZXRDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIGlmIChzdGF0ZSgpLm1fYXBwbGllZEZpbGxQYXR0ZXJuCi0gICAgICAgICAgICAmJiBDR0Fm
ZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0obSwgc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRl
cm5UcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYW52YXNQYXR0ZXJuKiBwYXR0
ZXJuID0gc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpOwotICAgIGlmICghcGF0dGVybikK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gYy0+Z2V0Q1RNKCk7CisgICAgaWYgKHN0YXRlKCku
bV9hcHBsaWVkRmlsbFBhdHRlcm4gJiYgY3RtID09IHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJu
VHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CisjZW5kaWYKIAotICAgIENHUGF0dGVyblJlZiBw
bGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKG0pOwotICAgIGlmICghcGxh
dGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbG9yU3BhY2VSZWYgcGF0
dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKLSAgICBDR0NvbnRleHRT
ZXRGaWxsQ29sb3JTcGFjZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNwYWNlKTsKLSAg
ICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7Ci0KLSAgICBjb25zdCBDR0Zsb2F0
IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oYy0+cGxhdGZv
cm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7Ci0gICAgQ0dQYXR0
ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwotCi0gICAgc3RhdGUoKS5tX2ZpbGxTdHlsZVBh
dHRlcm5UcmFuc2Zvcm0gPSBtOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSNlbGlmIFBMQVRGT1JNKENBSVJPKQogICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4g
PSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCk7CiAgICAgaWYgKCFwYXR0ZXJuKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIGNhaXJvX21hdHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOworICAg
IGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0dGVybigpKTsKIAotICAgIGNhaXJvX3Bh
dHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGF0dGVybihtKTsKLSAg
ICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fc2V0
X3NvdXJjZShjciwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3ko
cGxhdGZvcm1QYXR0ZXJuKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBzdGF0ZSgpLm1fZmlsbFN0
eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0bTsKICNlbmRpZgogICAgIHN0YXRlKCkubV9hcHBsaWVk
RmlsbFBhdHRlcm4gPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCmluZGV4IDQwNzczNDQuLjE2OGI3MzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICBib29sIG1fYXBwbGllZEZpbGxQYXR0ZXJuOwogICAgICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fdHJhbnNmb3JtOwogI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgQ0dBZmZp
bmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm07CisgICAgICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07CisgICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwogI2VuZGlm
CiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKaW5kZXggOTA3Y2NjYy4uMGQ1NDUxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCkBAIC0yNzUsNDggKzI3NSw0IEBAIEltYWdlQnVmZmVyKiBIVE1MQ2FudmFzRWxlbWVudDo6
YnVmZmVyKCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIH0KIAotI2lm
IFBMQVRGT1JNKENHKQotCi1DR0ltYWdlUmVmIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVQbGF0
Zm9ybUltYWdlKCkgY29uc3QKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBkcmF3
aW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIGlmICghY29udGV4dFJlZikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDR0NvbnRleHRG
bHVzaChjb250ZXh0UmVmKTsKLQotICAgIHJldHVybiBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0UmVmKTsKLX0KLQotI2VsaWYgUExBVEZPUk0oUVQpCi0KLVFQaXhtYXAgSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAotewotICAgIGlmICghbV9p
bWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKLSAgICByZXR1cm4gKm1faW1h
Z2VCdWZmZXItPnBpeG1hcCgpOwotfQotCi0jZWxpZiBQTEFURk9STShDQUlSTykKLQotY2Fpcm9f
c3VyZmFjZV90KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IE5vdGUgdGhhdCB1bmxpa2UgQ0csIG91ciByZXR1cm5lZCBpbWFnZSBpcyBub3QgYSBjb3B5IG9y
Ci0gICAgLy8gY29weS1vbi13cml0ZSwgYnV0IHRoZSBvcmlnaW5hbC4gVGhpcyBpcyBmaW5lLCBz
aW5jZSBpdCBpcyBvbmx5Ci0gICAgLy8gZXZlciB1c2VkIGFzIGEgc291cmNlLgotCi0gICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChtX2ltYWdlQnVmZmVyLT5zdXJmYWNlKCkpOwotICAgIGNhaXJvX3N1
cmZhY2VfcmVmZXJlbmNlKG1faW1hZ2VCdWZmZXItPnN1cmZhY2UoKSk7Ci0gICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXItPnN1cmZhY2UoKTsKLX0KLQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgKaW5kZXggYTBiN2NjNS4uYTExODM2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKQEAgLTMwLDE5ICszMCw2IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCiAKLSNpZiBQTEFURk9STShDRykKLS8vIEZJWE1FOiBDRy1zcGVjaWZpYyBw
YXJ0cyBuZWVkIHRvIG1vdmUgdG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeS4KLXR5cGVkZWYgc3Ry
dWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJ
bWFnZVJlZjsKLSNlbGlmIFBMQVRGT1JNKFFUKQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
UGl4bWFwOwotY2xhc3MgUVBhaW50ZXI7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBQTEFURk9S
TShDQUlSTykKLXR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDsKQEAgLTEwNSwxNSArOTIsOCBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRl
eHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAKLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkg
Y29uc3Q7IAotI2lmIFBMQVRGT1JNKENHKQotICAgIENHSW1hZ2VSZWYgY3JlYXRlUGxhdGZvcm1J
bWFnZSgpIGNvbnN0OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCBjcmVhdGVQbGF0
Zm9ybUltYWdlKCkgY29uc3Q7Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb19zdXJm
YWNlX3QqIGNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgotICAgIAorICAgIElt
YWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKKwogICAgIEludFJlY3QgY29udmVydExvZ2ljYWxU
b0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRMb2dp
Y2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CiAgICAgSW50UG9pbnQgY29udmVy
dExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKaW5kZXggYTZiNGRlMC4uM2E5MDg1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAt
Mzk5OSw3ICszOTk5LDExIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpj
cmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKQogICAgIGlmIChvcmlnaW5hbFVSTC5p
c0VtcHR5KCkpCiAgICAgICAgIG9yaWdpbmFsVVJMID0gYmxhbmtVUkwoKTsKICAgICAKLSAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVybCwgbV9mcmFt
ZS0+dHJlZSgpLT5uYW1lKCksIG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyBtX2ZyYW1lLT50
cmVlKCktPnBhcmVudCgpLT50cmVlKCktPm5hbWUoKSA6ICIiLCBkb2NMb2FkZXIgPyBkb2NMb2Fk
ZXItPnRpdGxlKCkgOiAiIik7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKTsKKyAgICBTdHJpbmcgcGFyZW50ID0gcGFyZW50RnJhbWUgPyBwYXJlbnRG
cmFtZS0+dHJlZSgpLT5uYW1lKCkgOiAiIjsKKyAgICBTdHJpbmcgdGl0bGUgPSBkb2NMb2FkZXIg
PyBkb2NMb2FkZXItPnRpdGxlKCkgOiAiIjsKKworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRl
bSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKSwgcGFy
ZW50LCB0aXRsZSk7CiAgICAgaXRlbS0+c2V0T3JpZ2luYWxVUkxTdHJpbmcob3JpZ2luYWxVUkwu
c3RyaW5nKCkpOwogICAgIAogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSBpZiB0aGlzIGlzIGEgUE9T
VApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMTAx
YWJmOC4uZTk0ZDNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC05Myw2ICs5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBhdGg7CisgICAgY2xhc3Mg
UGF0dGVybjsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAgICAgLy8gVGhlc2UgYml0cyBjYW4gYmUg
T1JlZCB0b2dldGhlciBmb3IgYSB0b3RhbCBvZiA4IHBvc3NpYmxlIHRleHQgZHJhd2luZyBtb2Rl
cy4KQEAgLTEzNCw3ICsxMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIENv
bG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotICAgICAgICAKKworICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihjb25z
dCBQYXR0ZXJuJik7CisgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJu
Jik7CisKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYjA3ZTJhNC4uYWM1MGEyMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAKQEAgLTQ5NSw2ICs0OTUsMjMgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0Ojpvcmln
aW4oKQogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54MCksIHN0
YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBjYWlyb19w
YXR0ZXJuX3QqIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KGdldENUTSgpKTsKKyAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2Fpcm9fc2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJu
KTsKKyAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVy
bikKK3sKKyAgICAvLyBUaGUgQ2Fpcm8gY29kZXBhdGggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQg
c2VwYXJhdGUgc3Ryb2tlL2ZpbGw/CisgICAgLy8gVGhlIGNvZGUgSSByZWZhY3RvcmVkIHRvIGNy
ZWF0ZSB0aGVzZSBtZXRob2RzIHdhcyBpZGVudGljYWwgZm9yIENhaXJvCisgICAgYXBwbHlTdHJv
a2VQYXR0ZXJuKHBhdHRlcm4pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBpcyBw
cm9iYWJseSBhIG5vLW9wIGJ1dCBJJ20gbm90IHN1cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggODZiMWE5YS4uMzg4YzRi
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dQREZDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAg
LTQ4OSw3ICs0OTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlcgogICAgIAogICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdC54KCksIHJlY3QueSgpICsg
cmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCks
IDEsIC0xKTsKLSAgICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3JtQ29udGV4dCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlQnVmZmVyLT5jZ0ltYWdlKCkp
OworICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2VCdWZmZXItPmltYWdlKCktPmdldENHSW1h
Z2VSZWYoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIDEsIC0x
KTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIC1yZWN0Lngo
KSwgLXJlY3QueSgpIC0gcmVjdC5oZWlnaHQoKSk7CiB9CkBAIC04OTIsNiArODkzLDM2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkK
ICAgICB9CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29u
c3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJu
ID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmICghcGxh
dGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbG9yU3BhY2VSZWYgcGF0
dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKKyAgICBDR0NvbnRleHRT
ZXRTdHJva2VDb2xvclNwYWNlKHBsYXRmb3JtQ29udGV4dCgpLCBwYXR0ZXJuU3BhY2UpOworICAg
IENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNlKTsKKworICAgIGNvbnN0IENHRmxvYXQg
cGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbnRleHRTZXRTdHJva2VQYXR0ZXJuKHBsYXRmb3Jt
Q29udGV4dCgpLCBwbGF0Zm9ybVBhdHRlcm4sICZwYXR0ZXJuQWxwaGEpOworICAgIENHUGF0dGVy
blJlbGVhc2UocGxhdGZvcm1QYXR0ZXJuKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3sKKyAgICBDR1BhdHRlcm5S
ZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RN
KCkpOworICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBD
R0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigw
KTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JTcGFjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
dGVyblNwYWNlKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7CisKKyAg
ICBjb25zdCBDR0Zsb2F0IHBhdHRlcm5BbHBoYSA9IDE7CisgICAgQ0dDb250ZXh0U2V0RmlsbFBh
dHRlcm4ocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7
CisgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOworfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
</data>
<flag name="review"
          id="10100"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22765</attachid>
            <date>2008-08-12 18:13:17 -0700</date>
            <delta_ts>2008-08-13 14:42:56 -0700</delta_ts>
            <desc>Split out HTML5 functional change into separate change</desc>
            <filename>Split-out-HTML5-functional-change-into-separate-change.patch</filename>
            <type>text/plain</type>
            <size>2083</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">M2U4NDkzYmY5NjM3ZTc3MmY3YjhjY2IyNTdmMWMwNGVjMDBmMWQ2ZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2NhbnZhcy1wYXR0ZXJuLWZyb20taW5jcmVtZW50YWwt
aW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9jYW52YXMtcGF0dGVybi1m
cm9tLWluY3JlbWVudGFsLWltYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTdlYmI3YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bWlzYy9jYW52YXMtcGF0dGVybi1mcm9tLWluY3JlbWVudGFsLWltYWdlLmh0bWwKQEAgLTAsMCAr
MSwxOCBAQAorPHNjcmlwdD4KK3ZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj
YW52YXMiKTsKK3ZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKK2N0eC5maWxsUmVj
dCgwLDAsMTUwLDE1MCk7Cit2YXIgaW1nID0gbmV3IEltYWdlKCk7CitpbWcuc3JjID0gJ3Jlc291
cmNlcy9pbWFnZS1zbG93LnBsJzsKK3ZhciBwdHJuCit0cnkgeworICAgIHB0cm4gPSBjdHguY3Jl
YXRlUGF0dGVybihpbWcsICdyZXBlYXQnKTsKKyAgICBkb2N1bWVudC53cml0ZSgiRkFJTCIpOwor
fSBjYXRjaCAoZSkgeworICAgIGlmIChlLmNvZGUgPT0gRE9NRXhjZXB0aW9uLklOVkFMSURfU1RB
VEVfRVJSKSB7CisgICAgICAgIGRvY3VtZW50LndyaXRlKCJQQVNTIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZG9jdW1lbnQud3JpdGUoIkZBSUwgIiArIGUpOworICAgIH0KK30KKzwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9pbWFn
ZS1zbG93LnBsIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9pbWFnZS1z
bG93LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4MGY3M2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2ltYWdl
LXNsb3cucGwKQEAgLTAsMCArMSwxOSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMgZmx1c2gg
dGhlIGJ1ZmZlcnMgYWZ0ZXIgZWFjaCBwcmludAorc2VsZWN0IChTVERPVVQpOworJHwgPSAxOwor
CitwcmludCAiQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnXHJcbiI7CitwcmludCAiRXhwaXJlczog
VGh1LCAwMSBEZWMgMjAwMyAxNjowMDowMCBHTVRcclxuIjsKK3ByaW50ICJDYWNoZS1Db250cm9s
OiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZVxyXG4iOworcHJpbnQgIlByYWdt
YTogbm8tY2FjaGVcclxuIjsKK3ByaW50ICJcclxuIjsKKworc2xlZXAgMjsKKworb3BlbihGSUxF
LCAiY29tcGFzcy5qcGciKTsKK3doaWxlICg8RklMRT4pIHsKKyAgcHJpbnQgJF87Cit9CitjbG9z
ZShGSUxFKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
NWIzMzBlMy4uNmUwOTZlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKQEAgLTExMjIsNiArMTEyMiwxMSBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MSW1hZ2VFbGVtZQogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgp
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFn
ZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFn
ZSgpKQogICAgICAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEltYWdlOjpudWxsSW1h
Z2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgdHJ1ZSk7Cg==
</data>
<flag name="review"
          id="10101"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22799</attachid>
            <date>2008-08-14 15:44:34 -0700</date>
            <delta_ts>2008-08-14 15:47:57 -0700</delta_ts>
            <desc>Move us one step closer to cross-platform svg/graphics code</desc>
            <filename>Move-us-one-step-closer-to-cross-platform-svg-graphics-code.patch</filename>
            <type>text/plain</type>
            <size>6846</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZmZmNDhjNGRlMTdiZmUwOTAwM2U1ZDAyYmY1NzE1ODgwYzA1MThjMwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZDllZDQxLi4xMGI1ZDczIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTU0NTYsOSArMTU0NTYs
NiBAQAogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFBy
b2R1Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7
Ci0JCQlwcm9qZWN0Um9vdHMgPSAoCi0JCQkJIiIsCi0JCQkpOwogCQkJdGFyZ2V0cyA9ICgKIAkJ
CQk5M0YxOThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5
RDlEREJFMDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0NhbnZhc1N0eWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKaW5k
ZXggNDU5MjE3NS4uNTYxMzBkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxl
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCkBAIC05OCwxMyArOTgsNiBA
QCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0
ZXJuKQogewogfQogCi1zdGF0aWMgaW5saW5lIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhh
KFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKLXsKLSAgICBSR0JBMzIgcmdiT25s
eSA9IGNvbG9yICYgMHgwMEZGRkZGRjsKLSAgICBSR0JBMzIgcmdiYSA9IHJnYk9ubHkgfCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShvdmVycmlkZUFscGhhKSA8PCAyNDsKLSAgICByZXR1cm4gcmdiYTsK
LX0KLQogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcAppbmRleCBkOTgzYjM2Li4zZmY1ODlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcApAQCAtNjIsNiArNjIsMTMgQEAgUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0
IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiAgICAgcmV0dXJuIGNvbG9yRmxvYXRUb1JH
QkFCeXRlKGEpIDw8IDI0IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUocikgPDwgMTYgfCBjb2xvckZs
b2F0VG9SR0JBQnl0ZShnKSA8PCA4IHwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYik7CiB9CiAKK1JH
QkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVB
bHBoYSkKK3sKKyAgICBSR0JBMzIgcmdiT25seSA9IGNvbG9yICYgMHgwMEZGRkZGRjsKKyAgICBS
R0JBMzIgcmdiYSA9IHJnYk9ubHkgfCBjb2xvckZsb2F0VG9SR0JBQnl0ZShvdmVycmlkZUFscGhh
KSA8PCAyNDsKKyAgICByZXR1cm4gcmdiYTsKK30KKwogc3RhdGljIGRvdWJsZSBjYWxjSHVlKGRv
dWJsZSB0ZW1wMSwgZG91YmxlIHRlbXAyLCBkb3VibGUgaHVlVmFsKQogewogICAgIGlmIChodWVW
YWwgPCAwLjApCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggNWFlMzhhNC4uZWZlZWEy
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTcsNyArNTcsNyBAQCB0eXBlZGVm
IHVuc2lnbmVkIFJHQkEzMjsgICAgICAgIC8vIFJHQkEgcXVhZHJ1cGxldAogUkdCQTMyIG1ha2VS
R0IoaW50IHIsIGludCBnLCBpbnQgYik7CiBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOwogCi1pbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQpOworUkdCQTMy
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIFJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKTsKIFJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGRvdWJsZSBoLCBkb3VibGUgcywg
ZG91YmxlIGwsIGRvdWJsZSBhKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvQ2dTdXBwb3J0LmNwcCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL0NnU3VwcG9ydC5jcHAK
aW5kZXggOWQ0ZWVjNy4uMGRjMzA1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
Y2cvQ2dTdXBwb3J0LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9DZ1N1cHBvcnQu
Y3BwCkBAIC01NSwxMCArNTUsMTEgQEAgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb24KICAgICBjb250
ZXh0LT5zZXRMaW5lSm9pbihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpOwogICAgIGNv
bnRleHQtPnNldE1pdGVyTGltaXQoc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQo
KSk7CiAKKyAgICAvLyBGSVhNRTogRGFzaEFycmF5IHN1cHBvcnQgY291bGQgZWFzaWx5IGJlIG1v
dmVkIGludG8gR3JhcGhpY3NDb250ZXh0LCBhbmQgdGhpcyBmdW5jdGlvbiB0aGVuIG1hZGUgeC1w
bGF0Zm9ybQogICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzID0gZGFzaEFycmF5RnJvbVJlbmRl
cmluZ1N0eWxlKHN0eWxlKTsKLSAgICBkb3VibGUgZGFzaE9mZnNldCA9IFNWR1JlbmRlclN0eWxl
Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VE
YXNoT2Zmc2V0KCksIDAuMGYpOworICAgIGZsb2F0IGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJTdHls
ZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tl
RGFzaE9mZnNldCgpLCAwLjBmKTsKIAotICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoZGFzaE9mZnNldCks
IGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOworICAgIENHQ29udGV4dFNldExpbmVEYXNo
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBk
YXNoZXMuc2l6ZSgpKTsKIH0KIAogQ0dDb250ZXh0UmVmIHNjcmF0Y2hDb250ZXh0KCkKQEAgLTg1
LDcgKzg2LDcgQEAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgs
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2IKICAgICAvLyB0byBtYWtlIGFuIGFs
dGVybmF0aXZlIGNhbGwuLi4KICAKICAgICAvLyBGSVhNRTogc2luY2UgdGhpcyBpcyBtYWlubHkg
dXNlZCB0byBkZWNpZGUgd2hhdCB0byByZXBhaW50LAotICAgIC8vIHBlcmhhcHMgaXQgd291bGQg
YmUgc3VmZmljaWVuIHRvIGp1c3Qgb3V0c2V0IHRoZSBmaWxsIGJib3ggYnkKKyAgICAvLyBwZXJo
YXBzIGl0IHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8ganVzdCBvdXRzZXQgdGhlIGZpbGwgYmJveCBi
eQogICAgIC8vIHRoZSBzdHJva2Ugd2lkdGggLSB0aGF0IHNob3VsZCBiZSB3YXkgY2hlYXBlciBh
bmQgc2ltcGxlciB0aGFuCiAgICAgLy8gd2hhdCB3ZSBkbyBoZXJlLgogIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAKaW5kZXggNzA2ZjM5
Yy4uYmQyYTU2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRT
ZXJ2ZXJTb2xpZENnLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQYWludFNl
cnZlclNvbGlkQ2cuY3BwCkBAIC0yNCw0MiArMjQsNDEgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiQ2dTdXBwb3J0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogYm9vbCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0CiB7Ci0gICAgQ0dDb250ZXh0UmVm
IGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBvYmplY3QgPyBvYmplY3QtPnN0eWxlKCkgOiAwOworICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSBhbnkgQ0ctc3BlY2lmaWMgY2FsbHMsIGhvd2V2ZXIg
aXQncyBub3QgeWV0CisgICAgLy8gY3Jvc3MgcGxhdGZvcm0sIGJlY2F1c2UgQ0cgaGFuZGxlcyBm
aWxsIHJ1bGUgZGlmZmVyZW50IGZyb20gb3RoZXIgZ3JhcGhpY3MKKyAgICAvLyBwbGF0Zm9ybXMu
ICBDRyBtYWtlcyB5b3UgdXNlIHR3byBzZXBhcmF0ZSBmaWxsIGNhbGxzLCBvdGhlciBwbGF0Zm9y
bXMgc2V0CisgICAgLy8gdGhlIGZpbGwgcnVsZSBzdGF0ZSBvbiB0aGUgY29udGV4dCBhbmQgdGhl
biBjYWxsIGEgZ2VuZXJpYyAiZmlsbFBhdGgiCiAKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVm
IGRldmljZVJHQkNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsgLy8g
VGhpcyBzaG91bGQgYmUgc2hhcmVkIGZyb20gR3JhcGhpY3NDb250ZXh0LCBvciBzb21lIG90aGVy
IGNlbnRyYWwgbG9jYXRpb24KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QgPyBvYmpl
Y3QtPnN0eWxlKCkgOiAwOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBl
KSAmJiAoIXN0eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKSB7Ci0gICAgICAg
IENHRmxvYXQgY29sb3JDb21wb25lbnRzWzRdOwotICAgICAgICBjb2xvcigpLmdldFJHQkEoY29s
b3JDb21wb25lbnRzWzBdLCBjb2xvckNvbXBvbmVudHNbMV0sIGNvbG9yQ29tcG9uZW50c1syXSwg
Y29sb3JDb21wb25lbnRzWzNdKTsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigp
OwogICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7CiAgICAgICAgIGlmIChzdHls
ZSkKLSAgICAgICAgICAgIGNvbG9yQ29tcG9uZW50c1szXSA9IHN0eWxlLT5zdmdTdHlsZSgpLT5m
aWxsT3BhY2l0eSgpOyAvLyBTVkcvQ1NTIGNvbG9ycyBhcmUgbm90IHNwZWNpZmllZCB3L28gYWxw
aGEKKyAgICAgICAgICAgIHJnYmEgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIHN0eWxl
LT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpKTsKIAotICAgICAgICBDR0NvbnRleHRTZXRGaWxs
Q29sb3JTcGFjZShjb250ZXh0UmVmLCBkZXZpY2VSR0JDb2xvclNwYWNlKTsKLSAgICAgICAgQ0dD
b250ZXh0U2V0RmlsbENvbG9yKGNvbnRleHRSZWYsIGNvbG9yQ29tcG9uZW50cyk7CisgICAgICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihyZ2JhKTsKIAogICAgICAgICBpZiAoaXNQYWludGluZ1Rl
eHQpCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKTsK
ICAgICB9CiAKICAgICBpZiAoKHR5cGUgJiBBcHBseVRvU3Ryb2tlVGFyZ2V0VHlwZSkgJiYgKCFz
dHlsZSB8fCBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpKSB7Ci0gICAgICAgIENHRmxv
YXQgY29sb3JDb21wb25lbnRzWzRdOwotICAgICAgICBjb2xvcigpLmdldFJHQkEoY29sb3JDb21w
b25lbnRzWzBdLCBjb2xvckNvbXBvbmVudHNbMV0sIGNvbG9yQ29tcG9uZW50c1syXSwgY29sb3JD
b21wb25lbnRzWzNdKTsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBjb2xvcigpLnJnYigpOwogICAg
ICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxwaGEoKSk7CiAgICAgICAgIGlmIChzdHlsZSkKLSAg
ICAgICAgICAgIGNvbG9yQ29tcG9uZW50c1szXSA9IHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VP
cGFjaXR5KCk7IC8vIFNWRy9DU1MgY29sb3JzIGFyZSBub3Qgc3BlY2lmaWVkIHcvbyBhbHBoYQor
ICAgICAgICAgICAgcmdiYSA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgc3R5bGUtPnN2
Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CiAKLSAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tl
Q29sb3JTcGFjZShjb250ZXh0UmVmLCBkZXZpY2VSR0JDb2xvclNwYWNlKTsKLSAgICAgICAgQ0dD
b250ZXh0U2V0U3Ryb2tlQ29sb3IoY29udGV4dFJlZiwgY29sb3JDb21wb25lbnRzKTsKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocmdiYSk7CiAKICAgICAgICAgaWYgKHN0eWxlKQog
ICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2Jq
ZWN0KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>