<?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>23200</bug_id>
          
          <creation_ts>2009-01-08 16:33:15 -0800</creation_ts>
          <short_desc>Upstream more platform/graphics/skia files</short_desc>
          <delta_ts>2011-08-23 17:46:21 -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>
          
          <blocked>23146</blocked>
    
    <blocked>23147</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>feng</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>104961</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:33:15 -0800</bug_when>
    <thetext>Upstream more platform/graphics/skia files

Woohoo!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104962</commentid>
    <comment_count>1</comment_count>
      <attachid>26544</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:34:33 -0800</bug_when>
    <thetext>Created attachment 26544
Add ImageBufferSkia and ImageSkia files.

 WebCore/ChangeLog                                  |   31 ++
 WebCore/platform/graphics/skia/ImageBufferSkia.cpp |  211 +++++++++
 WebCore/platform/graphics/skia/ImageSkia.cpp       |  483 ++++++++++++++++++++
 3 files changed, 725 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104963</commentid>
    <comment_count>2</comment_count>
      <attachid>26544</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:39:35 -0800</bug_when>
    <thetext>Comment on attachment 26544
Add ImageBufferSkia and ImageSkia files.

Bah!  Wrong patch again! (old files instead of scrubbed ones).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104965</commentid>
    <comment_count>3</comment_count>
      <attachid>26546</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:41:02 -0800</bug_when>
    <thetext>Created attachment 26546
Add ImageBufferSkia and ImageSkia files.

2009-01-08  Dimitri Glazkov  &lt;dglazkov@chromium.org&gt;

        Reviewed by Eric Seidel.

        Add ImageBufferSkia and ImageSkia files.
        https://bugs.webkit.org/show_bug.cgi?id=23200
        For now we&apos;ve left BitmapImage and BitmapImageSingleFrameSkia
        implementations in the ImageSkia file (like ImageCG has), but
        we intend to break them out into their own files.

        * platform/graphics/skia/ImageBufferSkia.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::getImageData):
        (WebCore::ImageBuffer::putImageData):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageSkia.cpp: Added.
        (WebCore::):
        (WebCore::FrameData::clear):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        (WebCore::BitmapImageSingleFrameSkia::create):
---
 WebCore/ChangeLog                                  |   31 ++
 WebCore/platform/graphics/skia/ImageBufferSkia.cpp |  210 +++++++++
 WebCore/platform/graphics/skia/ImageSkia.cpp       |  458 ++++++++++++++++++++
 3 files changed, 699 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104966</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:42:11 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/skia/ImageBufferSkia.cpp
	A	WebCore/platform/graphics/skia/ImageSkia.cpp
Committed r39727
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104969</commentid>
    <comment_count>5</comment_count>
      <attachid>26547</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 16:54:09 -0800</bug_when>
    <thetext>Created attachment 26547
Add NativeImageSkia (PlatformImagePtr) to platform/graphics/skia

 WebCore/ChangeLog                                  |   18 +++
 WebCore/platform/graphics/skia/NativeImageSkia.cpp |  109 ++++++++++++++++++++
 WebCore/platform/graphics/skia/NativeImageSkia.h   |  104 +++++++++++++++++++
 3 files changed, 231 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104971</commentid>
    <comment_count>6</comment_count>
      <attachid>26549</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 17:01:46 -0800</bug_when>
    <thetext>Created attachment 26549
Add ImageSourceSkia to platform/graphics/skia

 WebCore/ChangeLog                                  |   33 +++
 WebCore/platform/graphics/ImageSource.h            |    4 +-
 WebCore/platform/graphics/skia/ImageSourceSkia.cpp |  249 ++++++++++++++++++++
 WebCore/platform/graphics/skia/ImageSourceSkia.h   |   60 +++++
 4 files changed, 345 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104974</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 17:07:20 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/platform/graphics/ImageSource.h
	A	WebCore/platform/graphics/skia/ImageSourceSkia.cpp
	A	WebCore/platform/graphics/skia/ImageSourceSkia.h
Committed r39729
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104976</commentid>
    <comment_count>8</comment_count>
      <attachid>26551</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 17:16:50 -0800</bug_when>
    <thetext>Created attachment 26551
Add PathSkia and PatternSkia implementations to WebCore

 WebCore/ChangeLog                              |   35 +++
 WebCore/platform/graphics/skia/PathSkia.cpp    |  299 ++++++++++++++++++++++++
 WebCore/platform/graphics/skia/PatternSkia.cpp |   55 +++++
 3 files changed, 389 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104977</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-08 17:18:40 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/skia/PathSkia.cpp
	A	WebCore/platform/graphics/skia/PatternSkia.cpp
Committed r39730
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104988</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-08 20:45:53 -0800</bug_when>
    <thetext>*** Bug 23147 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455883</commentid>
    <comment_count>11</comment_count>
      <attachid>26547</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-23 17:46:21 -0700</bug_when>
    <thetext>Comment on attachment 26547
Add NativeImageSkia (PlatformImagePtr) to platform/graphics/skia

View in context: https://bugs.webkit.org/attachment.cgi?id=26547&amp;action=review

&gt; WebCore/platform/graphics/skia/NativeImageSkia.h:40
&gt; +class NativeImageSkia : public SkBitmap {

Hrm.. this may not be safe. SkBitmap has a non-virtual destructor and it uses dangerous tricks in its operator= implementation that may clobber derived class members depending on alignment. (When a class derives from a non-POD object, its members can reside inside the sizeof its parent class.) Looks like this may be related to a memory leak bug https://bugs.webkit.org/show_bug.cgi?id=66488 and possibly other random bugs unless we&apos;ve been lucky. Anyhoo, I&apos;m attempting to make SkBitmap a member rather than deriving from it. It would be great if we could instrument classes such as this so that it would be a compiler warning/error to derive from them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26544</attachid>
            <date>2009-01-08 16:34:33 -0800</date>
            <delta_ts>2009-01-08 16:39:35 -0800</delta_ts>
            <desc>Add ImageBufferSkia and ImageSkia files.</desc>
            <filename>Add-ImageBufferSkia-and-ImageSkia-files..patch</filename>
            <type>text/plain</type>
            <size>29731</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MjMxYjQzNWJjNDRmZTMwYmZkODIyMzc2MWNmNmY1YzgwMzI5NzY3YQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0ZjBiNzAzLi45MGQxNTVk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM0IEBACisyMDA5LTAxLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAg
ICAgQWRkIEltYWdlQnVmZmVyU2tpYSBhbmQgSW1hZ2VTa2lhIGZpbGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMDAKKyAgICAgICAgRm9yIG5v
dyB3ZSd2ZSBsZWZ0IEJpdG1hcEltYWdlIGFuZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYQor
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIEltYWdlU2tpYSBmaWxlIChsaWtlIEltYWdl
Q0cgaGFzKSwgYnV0CisgICAgICAgIHdlIGludGVuZCB0byBicmVhayB0aGVtIG91dCBpbnRvIHRo
ZWlyIG93biBmaWxlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpp
bml0UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSk6CisKIDIwMDkt
MDEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zYzczZWVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTAsMCArMSwyMTEgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAwOCwgR29vZ2xlIEluYy4KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyAKKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8gCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLyAKKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNr
aWFVdGlscy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFdlIHBhc3MgYSB0ZWNobmljYWxseS11bmluaXRpYWxpemVkIGNhbnZhcyB0byB0aGUg
cGxhdGZvcm0gY29udGV4dCBoZXJlIHNpbmNlCisvLyB0aGUgY2FudmFzIGluaXRpYWxpemF0aW9u
IGNvbXBsZXRlcyBpbiBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIuIEJ1dAorLy8gUGxhdGZvcm1D
b250ZXh0IGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCB0byB1c2UgdGhlIG9iamVjdCwgYW5kIHRoaXMg
bWFrZXMgYWxsCisvLyB0aGUgb3duZXJzaGlwIGVhc2llciB0byBtYW5hZ2UuCitJbWFnZUJ1ZmZl
ckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9jYW52
YXMoKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoTlVMTCkgIC8vIENhbnZhcyBpcyBzZXQgaW4g
SW1hZ2VCdWZmZXIgY29uc3RydWN0b3IuCit7Cit9CisKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZl
cihjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKKyAg
ICA6IG1fZGF0YShzaXplKQorICAgICwgbV9zaXplKHNpemUpCit7CisgICAgaWYgKCFtX2RhdGEu
bV9jYW52YXMuaW5pdGlhbGl6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKSkg
eworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKCZtX2RhdGEubV9jYW52YXMpOwor
ICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1fcGxhdGZvcm1D
b250ZXh0KSk7CisKKyAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIHRyYW5zcGFyZW50LiBJdCB3
b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0CisgICAgLy8gcmVxdWlyZWQsIGJ1dCB0aGUgY2Fu
dmFzIGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUgbWFnaWMgdHJhbnNwYXJlbmN5CisgICAg
Ly8gY29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5IHRvIG1hbmFnZSB0aGlzPworICAgIG1f
ZGF0YS5tX2NhbnZhcy5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1BvcnRlckR1ZmY6OmtDbGVhcl9N
b2RlKTsKKyAgICBzdWNjZXNzID0gdHJ1ZTsKK30KKworSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZl
cigpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK0ltYWdlKiBJbWFnZUJ1ZmZl
cjo6aW1hZ2UoKSBjb25zdAoreworICAgIGlmICghbV9pbWFnZSkgeworICAgICAgICAvLyBUaGlz
IGNyZWF0ZXMgYSBDT1BZIG9mIHRoZSBpbWFnZSBhbmQgd2lsbCBjYWNoZSB0aGF0IGNvcHkuIFRo
aXMgbWVhbnMKKyAgICAgICAgLy8gdGhhdCBpZiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgdGFrZSBw
bGFjZSBvbiB0aGUgY29udGV4dCwgbmVpdGhlciB0aGUKKyAgICAgICAgLy8gY3VycmVudGx5LXJl
dHVybmVkIGltYWdlLCBub3IgdGhlIHJlc3VsdHMgb2YgZnV0dXJlIGltYWdlKCkgY2FsbHMsCisg
ICAgICAgIC8vIHdpbGwgY29udGFpbiB0aGF0IG9wZXJhdGlvbi4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVGhpcyBzZWVtcyBzaWxseSwgYnV0IGlzIHRoZSB3YXkgdGhlIENHIHBvcnQgd29ya3M6
IGltYWdlKCkgaXMKKyAgICAgICAgLy8gaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IHdoZW4gcmVu
ZGVyaW5nIGlzICJjb21wbGV0ZS4iCisgICAgICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYTo6Y3JlYXRlKAorICAgICAgICAgICAgKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4
dC5iaXRtYXAoKSk7CisgICAgfQorICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworfQorCitQYXNz
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAoreworICAgIEFTU0VSVChjb250ZXh0KCkpOworCisgICAgUmVmUHRyPElt
YWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCktPmRhdGEo
KTsKKworICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8CisgICAgICAgIChy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiBtX3NpemUud2lkdGgoKSB8fAorICAgICAgICAocmVj
dC55KCkgKyByZWN0LmhlaWdodCgpKSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0
KGRhdGEsIDAsIHJlc3VsdC0+ZGF0YSgpLT5sZW5ndGgoKSk7CisKKyAgICBpbnQgb3JpZ2lueCA9
IHJlY3QueCgpOworICAgIGludCBkZXN0eCA9IDA7CisgICAgaWYgKG9yaWdpbnggPCAwKSB7Cisg
ICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CisgICAgICAgIG9yaWdpbnggPSAwOworICAgIH0KKyAg
ICBpbnQgZW5keCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGlmIChlbmR4ID4gbV9z
aXplLndpZHRoKCkpCisgICAgICAgIGVuZHggPSBtX3NpemUud2lkdGgoKTsKKyAgICBpbnQgbnVt
Q29sdW1ucyA9IGVuZHggLSBvcmlnaW54OworCisgICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsK
KyAgICBpbnQgZGVzdHkgPSAwOworICAgIGlmIChvcmlnaW55IDwgMCkgeworICAgICAgICBkZXN0
eSA9IC1vcmlnaW55OworICAgICAgICBvcmlnaW55ID0gMDsKKyAgICB9CisgICAgaW50IGVuZHkg
PSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGVuZHkgPiBtX3NpemUuaGVpZ2h0
KCkpCisgICAgICAgIGVuZHkgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IG51bVJvd3MgPSBl
bmR5IC0gb3JpZ2lueTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSAqY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCk7CisgICAgQVNTRVJUKGJpdG1hcC5jb25maWco
KSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIFNrQXV0b0xvY2tQaXhlbHMg
Yml0bWFwTG9jayhiaXRtYXApOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAq
IHJlY3Qud2lkdGgoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93ID0gZGF0YSArIGRlc3R5
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKKyAgICAgICAgdWludDMyX3QqIHNyY1JvdyA9IGJpdG1hcC5nZXRB
ZGRyMzIob3JpZ2lueCwgb3JpZ2lueSArIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IG51bUNvbHVtbnM7ICsreCkgeworICAgICAgICAgICAgU2tDb2xvciBjb2xvciA9IFNrUE1Db2xv
clRvQ29sb3Ioc3JjUm93W3hdKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RQaXhl
bCA9ICZkZXN0Um93W3ggKiA0XTsKKyAgICAgICAgICAgIGRlc3RQaXhlbFswXSA9IFNrQ29sb3JH
ZXRSKGNvbG9yKTsKKyAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IFNrQ29sb3JHZXRHKGNvbG9y
KTsKKyAgICAgICAgICAgIGRlc3RQaXhlbFsyXSA9IFNrQ29sb3JHZXRCKGNvbG9yKTsKKyAgICAg
ICAgICAgIGRlc3RQaXhlbFszXSA9IFNrQ29sb3JHZXRBKGNvbG9yKTsKKyAgICAgICAgfQorICAg
ICAgICBkZXN0Um93ICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3Vy
Y2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBBU1NFUlQoc291cmNlUmVj
dC53aWR0aCgpID4gMCk7CisgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKKwor
ICAgIGludCBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CisgICAgaW50IGRlc3R4ID0gZGVzdFBv
aW50LngoKSArIHNvdXJjZVJlY3QueCgpOworICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKKyAgICBB
U1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7
CisgICAgQVNTRVJUKG9yaWdpbnggPCBzb3VyY2VSZWN0LnJpZ2h0KCkpOworCisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgpOworICAgIEFTU0VSVChlbmR4
IDw9IG1fc2l6ZS53aWR0aCgpKTsKKworICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4
OworCisgICAgaW50IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKKyAgICBpbnQgZGVzdHkgPSBk
ZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC55KCk7CisgICAgQVNTRVJUKGRlc3R5ID49IDApOwor
ICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnkg
Pj0gMCk7CisgICAgQVNTRVJUKG9yaWdpbnkgPCBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKworICAg
IGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgQVNT
RVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKKyAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBk
ZXN0eTsKKworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSAqY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Yml0bWFwKCk7CisgICAgQVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9j
ayhiaXRtYXApOworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53
aWR0aCgpOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjUm93ID0gc291cmNlLT5kYXRh
KCktPmRhdGEoKSArCisgICAgICAgIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbngg
KiA0OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKKyAgICAgICAg
dWludDMyX3QqIGRlc3RSb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKGRlc3R4LCBkZXN0eSArIHkpOwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7ICsreCkgeworICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjUGl4ZWwgPSAmc3JjUm93W3ggKiA0XTsKKyAgICAg
ICAgICAgIGRlc3RSb3dbeF0gPSBTa1ByZU11bHRpcGx5QVJHQihzcmNQaXhlbFszXSwgc3JjUGl4
ZWxbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGl4
ZWxbMV0sIHNyY1BpeGVsWzJdKTsKKyAgICAgICAgfQorICAgICAgICBzcmNSb3cgKz0gc3JjQnl0
ZXNQZXJSb3c7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ5Y2FiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMCwwICsxLDQ4MyBAQAorLy8gQ29weXJpZ2h0IChj
KSAyMDA4LCBHb29nbGUgSW5jLgorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYS5oIgorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2tpYVV0
aWxzLmgiCisjaW5jbHVkZSAiU2tTaGFkZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorCisKKyNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworLy8gVXNlZCBieSBjb21wdXRlUmVzYW1wbGluZ01vZGUgdG8gdGVs
bCBob3cgYml0bWFwcyBzaG91bGQgYmUgcmVzYW1wbGVkLgorZW51bSBSZXNhbXBsaW5nTW9kZSB7
CisgICAgLy8gTmVhcmVzdCBuZWlnaGJvciByZXNhbXBsaW5nLiBVc2VkIHdoZW4gd2UgZGV0ZWN0
IHRoYXQgdGhlIHBhZ2UgaXMKKyAgICAvLyB0cnlpbmcgdG8gbWFrZSBhIHBhdHRlcm4gYnkgc3Ry
ZXRjaGluZyBhIHNtYWxsIGJpdG1hcCB2ZXJ5IGxhcmdlLgorICAgIFJFU0FNUExFX05PTkUsCisK
KyAgICAvLyBEZWZhdWx0IHNraWEgcmVzYW1wbGluZy4gVXNlZCBmb3IgbGFyZ2UgZ3Jvd2luZyBv
ZiBpbWFnZXMgd2hlcmUgaGlnaAorICAgIC8vIHF1YWxpdHkgcmVzYW1wbGluZyBkb2Vzbid0IGdl
dCB1cyB2ZXJ5IG11Y2ggZXhjZXB0IGEgc2xvd2Rvd24uCisgICAgUkVTQU1QTEVfTElORUFSLAor
CisgICAgLy8gSGlnaCBxdWFsaXR5IHJlc2FtcGxpbmcuCisgICAgUkVTQU1QTEVfQVdFU09NRSwK
K307CisKKy8vIHN0YXRpYworUmVzYW1wbGluZ01vZGUgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNv
bnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXN0V2lkdGgsIGZsb2F0IGRlc3RIZWlnaHQpCit7
CisgICAgaW50IGRlc3RJV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCk7CisgICAg
aW50IGRlc3RJSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0SGVpZ2h0KTsKKworICAgIC8v
IFRoZSBwZXJjZW50IGNoYW5nZSBiZWxvdyB3aGljaCB3ZSB3aWxsIG5vdCByZXNhbXBsZS4gVGhp
cyB1c3VhbGx5IG1lYW5zCisgICAgLy8gYW4gb2ZmLWJ5LW9uZSBlcnJvciBvbiB0aGUgd2ViIHBh
Z2UsIGFuZCBqdXN0IGRvaW5nIG5lYXJlc3QgbmVpZ2hib3IKKyAgICAvLyBzYW1wbGluZyBpcyB1
c3VhbGx5IGdvb2QgZW5vdWdoLgorICAgIGNvbnN0IGZsb2F0IGtGcmFjdGlvbmFsQ2hhbmdlVGhy
ZXNob2xkID0gMC4wMjVmOworCisgICAgLy8gSW1hZ2VzIHNtYWxsZXIgdGhhbiB0aGlzIGluIGVp
dGhlciBkaXJlY3Rpb24gYXJlIGNvbnNpZGVyZWQgInNtYWxsIiBhbmQKKyAgICAvLyBhcmUgbm90
IHJlc2FtcGxlZCBldmVyIChzZWUgYmVsb3cpLgorICAgIGNvbnN0IGludCBrU21hbGxJbWFnZVNp
emVUaHJlc2hvbGQgPSA4OworCisgICAgLy8gVGhlIGFtb3VudCBhbiBpbWFnZSBjYW4gYmUgc3Ry
ZXRjaGVkIGluIGEgc2luZ2xlIGRpcmVjdGlvbiBiZWZvcmUgd2UKKyAgICAvLyBzYXkgdGhhdCBp
dCBpcyBiZWluZyBzdHJldGNoZWQgc28gbXVjaCB0aGF0IGl0IG11c3QgYmUgYSBsaW5lIG9yCisg
ICAgLy8gYmFja2dyb3VuZCB0aGF0IGRvZXNuJ3QgbmVlZCByZXNhbXBsaW5nLgorICAgIGNvbnN0
IGZsb2F0IGtMYXJnZVN0cmV0Y2ggPSAzLjBmOworCisgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBz
aG91bGQgcmVzYW1wbGUgdGhpcyBpbWFnZS4gV2UgdHJ5IHRvIHBydW5lIG91dCBzb21lCisgICAg
Ly8gY29tbW9uIGNhc2VzIHdoZXJlIHJlc2FtcGxpbmcgd29uJ3QgZ2l2ZSB1cyBhbnl0aGluZywg
c2luY2UgaXQgaXMgbXVjaAorICAgIC8vIHNsb3dlciB0aGFuIGRyYXdpbmcgc3RyZXRjaGVkLgor
ICAgIGlmIChzcmNXaWR0aCA9PSBkZXN0SVdpZHRoICYmIHNyY0hlaWdodCA9PSBkZXN0SUhlaWdo
dCkgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc2FtcGxlIGlmIHRoZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05P
TkU7CisgICAgfQorCisgICAgaWYgKHNyY1dpZHRoIDw9IGtTbWFsbEltYWdlU2l6ZVRocmVzaG9s
ZCB8fAorICAgICAgICBzcmNIZWlnaHQgPD0ga1NtYWxsSW1hZ2VTaXplVGhyZXNob2xkIHx8Cisg
ICAgICAgIGRlc3RXaWR0aCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQgfHwKKyAgICAgICAg
ZGVzdEhlaWdodCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQpIHsKKyAgICAgICAgLy8gTmV2
ZXIgcmVzYW1wbGUgc21hbGwgaW1hZ2VzLiBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCBmb3IgYm9yZGVy
cyBhbmQKKyAgICAgICAgLy8gcnVsZXMgKHRoaW5rIDF4MSBpbWFnZXMgdXNlZCB0byBtYWtlIGxp
bmVzKS4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05PTkU7CisgICAgfQorCisgICAgaWYgKHNy
Y0hlaWdodCAqIGtMYXJnZVN0cmV0Y2ggPD0gZGVzdEhlaWdodCB8fAorICAgICAgICBzcmNXaWR0
aCAqIGtMYXJnZVN0cmV0Y2ggPD0gZGVzdFdpZHRoKSB7CisgICAgICAgIC8vIExhcmdlIGltYWdl
IGRldGVjdGVkLgorCisgICAgICAgIC8vIERvbid0IHJlc2FtcGxlIGlmIGl0IGlzIGJlaW5nIHN0
cmV0Y2hlZCBhIGxvdCBpbiBvbmx5IG9uZSBkaXJlY3Rpb24uCisgICAgICAgIC8vIFRoaXMgaXMg
dHJ5aW5nIHRvIGNhdGNoIGNhc2VzIHdoZXJlIHNvbWVib2R5IGhhcyBjcmVhdGVkIGEgYm9yZGVy
CisgICAgICAgIC8vICh3aGljaCBtaWdodCBiZSBsYXJnZSkgYW5kIHRoZW4gaXMgc3RyZXRjaGlu
ZyBpdCB0byBmaWxsIHNvbWUgcGFydAorICAgICAgICAvLyBvZiB0aGUgcGFnZS4KKyAgICAgICAg
aWYgKHNyY1dpZHRoID09IGRlc3RXaWR0aCB8fCBzcmNIZWlnaHQgPT0gZGVzdEhlaWdodCkKKyAg
ICAgICAgICAgIHJldHVybiBSRVNBTVBMRV9OT05FOworCisgICAgICAgIC8vIFRoZSBpbWFnZSBp
cyBncm93aW5nIGEgbG90IGFuZCBpbiBtb3JlIHRoYW4gb25lIGRpcmVjdGlvbi4gUmVzYW1wbGlu
ZworICAgICAgICAvLyBpcyBzbG93IGFuZCBkb2Vzbid0IGdpdmUgdXMgdmVyeSBtdWNoIHdoZW4g
Z3Jvd2luZyBhIGxvdC4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKKyAgICB9CisK
KyAgICBpZiAoKGZhYnMoZGVzdFdpZHRoIC0gc3JjV2lkdGgpIC8gc3JjV2lkdGggPAorICAgICAg
ICAga0ZyYWN0aW9uYWxDaGFuZ2VUaHJlc2hvbGQpICYmCisgICAgICAgKGZhYnMoZGVzdEhlaWdo
dCAtIHNyY0hlaWdodCkgLyBzcmNIZWlnaHQgPAorICAgICAgICBrRnJhY3Rpb25hbENoYW5nZVRo
cmVzaG9sZCkpIHsKKyAgICAgICAgLy8gSXQgaXMgZGlzYXBwb2ludGluZ2x5IGNvbW1vbiBvbiB0
aGUgd2ViIGZvciBpbWFnZSBzaXplcyB0byBiZSBvZmYgYnkKKyAgICAgICAgLy8gb25lIG9yIHR3
byBwaXhlbHMuIFdlIGRvbid0IGJvdGhlciByZXNhbXBsaW5nIGlmIHRoZSBzaXplIGRpZmZlcmVu
Y2UKKyAgICAgICAgLy8gaXMgYSBzbWFsbCBmcmFjdGlvbiBvZiB0aGUgb3JpZ2luYWwgc2l6ZS4K
KyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05PTkU7CisgICAgfQorCisgICAgLy8gV2hlbiB0aGUg
aW1hZ2UgaXMgbm90IHlldCBkb25lIGxvYWRpbmcsIHVzZSBsaW5lYXIuIFdlIGRvbid0IGNhY2hl
IHRoZQorICAgIC8vIHBhcnRpYWxseSByZXNhbXBsZWQgaW1hZ2VzLCBhbmQgYXMgdGhleSBjb21l
IGluIGluY3JlbWVudGFsbHksIGl0IGNhdXNlcworICAgIC8vIHVzIHRvIGhhdmUgdG8gcmVzYW1w
bGUgdGhlIHdob2xlIHRoaW5nIGV2ZXJ5IHRpbWUuCisgICAgaWYgKCFiaXRtYXAuaXNEYXRhQ29t
cGxldGUoKSkKKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKKworICAgIC8vIEV2ZXJ5
dGhpbmcgZWxzZSBnZXRzIHJlc2FtcGxlZC4KKyAgICByZXR1cm4gUkVTQU1QTEVfQVdFU09NRTsK
K30KKworLy8gRHJhd3MgdGhlIGdpdmVuIGJpdG1hcCB0byB0aGUgZ2l2ZW4gY2FudmFzLiBUaGUg
c3Vic2V0IG9mIHRoZSBzb3VyY2UgYml0bWFwCisvLyBpZGVudGlmaWVkIGJ5IHNyY19yZWN0IGlz
IGRyYXduIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiByZWN0LiBUaGUgYml0bWFwCisvLyB3aWxs
IGJlIHJlc2FtcGxlZCB0byByZXNhbXBsZV93aWR0aCAqIHJlc2FtcGxlX2hlaWdodCAodGhpcyBp
cyB0aGUgc2l6ZSBvZgorLy8gdGhlIHdob2xlIGltYWdlLCBub3QgdGhlIHN1YnNldCkuIFNlZSBz
aG91bGRSZXNhbXBsZUJpdG1hcCBmb3IgbW9yZS4KKy8vCisvLyBUaGlzIGRvZXMgYSBsb3Qgb2Yg
Y29tcHV0YXRpb24gdG8gcmVzYW1wbGUgb25seSB0aGUgcG9ydGlvbiBvZiB0aGUgYml0bWFwCisv
LyB0aGF0IHdpbGwgb25seSBiZSBkcmF3bi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFu
Y2Ugc2luY2Ugd2hlbiB3ZSBhcmUKKy8vIHNjcm9sbGluZywgZm9yIGV4YW1wbGUsIHdlIGFyZSBv
bmx5IGRyYXdpbmcgYSBzbWFsbCBzdHJpcCBvZiB0aGUgaW1hZ2UuCisvLyBSZXNhbXBsaW5nIHRo
ZSB3aG9sZSBpbWFnZSBldmVyeSB0aW1lIGlzIHZlcnkgc2xvdywgc28gdGhpcyBzcGVlZHMgdXAg
dGhpbmdzCisvLyBkcmFtYXRpY2FsbHkuCit2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52
YXMmIGNhbnZhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50JiBwYWludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBzcmNJUmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTa1JlY3QmIGRlc3RSZWN0KQoreworICAgIC8vIEZpcnN0
IGdldCB0aGUgc3Vic2V0IHdlIG5lZWQuIFRoaXMgaXMgZWZmaWNpZW50IGFuZCBkb2VzIG5vdCBj
b3B5IHBpeGVscy4KKyAgICBTa0JpdG1hcCBzdWJzZXQ7CisgICAgYml0bWFwLmV4dHJhY3RTdWJz
ZXQoJnN1YnNldCwgc3JjSVJlY3QpOworICAgIFNrUmVjdCBzcmNSZWN0OworICAgIHNyY1JlY3Qu
c2V0KHNyY0lSZWN0KTsKKworICAgIC8vIFdoZXRoZXIgd2UncmUgZG9pbmcgYSBzdWJzZXQgb3Ig
dXNpbmcgdGhlIGZ1bGwgc291cmNlIGltYWdlLgorICAgIGJvb2wgc3JjSXNGdWxsID0gc3JjSVJl
Y3QuZkxlZnQgPT0gMCAmJiBzcmNJUmVjdC5mVG9wID09IDAgJiYKKyAgICAgICAgc3JjSVJlY3Qu
d2lkdGgoKSA9PSBiaXRtYXAud2lkdGgoKSAmJgorICAgICAgICBzcmNJUmVjdC5oZWlnaHQoKSA9
PSBiaXRtYXAuaGVpZ2h0KCk7CisKKyAgICAvLyBXZSB3aWxsIGFsd2F5cyBkcmF3IGluIGludGVn
ZXIgc2l6ZXMsIHNvIHJvdW5kIHRoZSBkZXN0aW5hdGlvbiByZWN0LgorICAgIFNrSVJlY3QgZGVz
dFJlY3RSb3VuZGVkOworICAgIGRlc3RSZWN0LnJvdW5kKCZkZXN0UmVjdFJvdW5kZWQpOworICAg
IFNrSVJlY3QgcmVzaXplZEltYWdlUmVjdDsgIC8vIFJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhl
IHJlc2l6ZWQgaW1hZ2UuCisgICAgcmVzaXplZEltYWdlUmVjdC5zZXQoMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0UmVjdFJvdW5kZWQud2lkdGgoKSwgZGVzdFJlY3RSb3VuZGVk
LmhlaWdodCgpKTsKKworICAgIGlmIChzcmNJc0Z1bGwgJiYKKyAgICAgICAgYml0bWFwLmhhc1Jl
c2l6ZWRCaXRtYXAoZGVzdFJlY3RSb3VuZGVkLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSkpIHsKKyAgICAgICAgLy8gWWF5
LCB0aGlzIGJpdG1hcCBmcmFtZSBhbHJlYWR5IGhhcyBhIHJlc2l6ZWQgdmVyc2lvbi4KKyAgICAg
ICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RSb3Vu
ZGVkLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0
bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIG91ciByZWN0
LgorICAgIFNrUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2s7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhj
YW52YXMsIGRlc3RSZWN0LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKKyAgICBkZXN0Qml0bWFwU3Vi
c2V0U2sub2Zmc2V0KC1kZXN0UmVjdC5mTGVmdCwgLWRlc3RSZWN0LmZUb3ApOworCisgICAgLy8g
VGhlIG1hdHJpeCBpbnZlcnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRyb2R1Y2VkIHJvdW5kaW5n
IGVycm9yIHdoaWNoCisgICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8gYmUgb3V0c2lkZSBvZiB0
aGUgcmVzaXplZCBiaXRtYXAuIFdlIHJvdW5kIG91dHdhcmQKKyAgICAvLyBzbyB3ZSBhbHdheXMg
bGVhbiB0b3dhcmQgaXQgYmVpbmcgbGFyZ2VyIHJhdGhlciB0aGFuIHNtYWxsZXIgdGhhbiB3ZQor
ICAgIC8vIG5lZWQsIGFuZCB0aGVuIGNsYW1wIHRvIHRoZSBiaXRtYXAgYm91bmRzIHNvIHdlIGRv
bid0IGdldCBhbnkgaW52YWxpZAorICAgIC8vIGRhdGEuCisgICAgU2tJUmVjdCBkZXN0Qml0bWFw
U3Vic2V0U2tJOworICAgIGRlc3RCaXRtYXBTdWJzZXRTay5yb3VuZE91dCgmZGVzdEJpdG1hcFN1
YnNldFNrSSk7CisgICAgaWYgKCFkZXN0Qml0bWFwU3Vic2V0U2tJLmludGVyc2VjdChyZXNpemVk
SW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOyAgLy8gUmVzaXplZCBpbWFnZSBkb2VzIG5vdCBp
bnRlcnNlY3QuCisKKyAgICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2Ft
cGxpbmcoCisgICAgICAgICAgICByZXNpemVkSW1hZ2VSZWN0LndpZHRoKCksCisgICAgICAgICAg
ICByZXNpemVkSW1hZ2VSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNl
dFNrSS53aWR0aCgpLAorICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS5oZWlnaHQoKSkp
IHsKKyAgICAgICAgLy8gV2UncmUgc3VwcG9zZWQgdG8gcmVzaXplIHRoZSBlbnRpcmUgaW1hZ2Ug
YW5kIGNhY2hlIGl0LCBldmVuIHRob3VnaAorICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGFsbCBv
ZiBpdC4KKyAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAo
ZGVzdFJlY3RSb3VuZGVkLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSk7CisgICAgICAgIGNh
bnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHJlc2l6ZSB0aGUgZXhwb3NlZCBw
YXJ0IG9mIHRoZSBiaXRtYXAgdG8gZG8gdGhlCisgICAgICAgIC8vIG1pbmltYWwgcG9zc2libGUg
d29yay4KKyAgICAgICAgZ2Z4OjpSZWN0IGRlc3RCaXRtYXBTdWJzZXQoZGVzdEJpdG1hcFN1YnNl
dFNrSS5mTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEJpdG1h
cFN1YnNldFNrSS5mVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Qml0bWFwU3Vic2V0U2tJLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RCaXRtYXBTdWJzZXRTa0kuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIFJlc2FtcGxl
IHRoZSBuZWVkZWQgcGFydCBvZiB0aGUgaW1hZ2UuCisgICAgICAgIFNrQml0bWFwIHJlc2FtcGxl
ZCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwKKyAgICAgICAgICAgIHNr
aWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLAorICAgICAgICAgICAgZGVzdFJl
Y3RSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSwKKyAgICAgICAgICAg
IGRlc3RCaXRtYXBTdWJzZXQpOworCisgICAgICAgIC8vIENvbXB1dGUgd2hlcmUgdGhlIG5ldyBi
aXRtYXAgc2hvdWxkIGJlIGRyYXduLiBTaW5jZSBvdXIgbmV3IGJpdG1hcAorICAgICAgICAvLyBt
YXkgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVy
IGJ5IHRoZQorICAgICAgICAvLyBzYW1lIGFtb3VudCB0aGF0IHdlIGN1dCBvZmYgdGhlIHRvcCBh
bmQgbGVmdC4KKyAgICAgICAgU2tSZWN0IG9mZnNldERlc3RSZWN0ID0geworICAgICAgICAgICAg
ZGVzdEJpdG1hcFN1YnNldC54KCkgKyBkZXN0UmVjdC5mTGVmdCwKKyAgICAgICAgICAgIGRlc3RC
aXRtYXBTdWJzZXQueSgpICsgZGVzdFJlY3QuZlRvcCwKKyAgICAgICAgICAgIGRlc3RCaXRtYXBT
dWJzZXQucmlnaHQoKSArIGRlc3RSZWN0LmZMZWZ0LAorICAgICAgICAgICAgZGVzdEJpdG1hcFN1
YnNldC5ib3R0b20oKSArIGRlc3RSZWN0LmZUb3AgfTsKKworICAgICAgICBjYW52YXMuZHJhd0Jp
dG1hcFJlY3QocmVzYW1wbGVkLCAwLCBvZmZzZXREZXN0UmVjdCwgJnBhaW50KTsKKyAgICB9Cit9
CisKK3ZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsCisg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAg
ICAgICBjb25zdCBTa1JlY3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFNr
UG9ydGVyRHVmZjo6TW9kZSYgY29tcE9wKQoreworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGFp
bnQuc2V0UG9ydGVyRHVmZlhmZXJtb2RlKGNvbXBPcCk7CisKKyAgICBza2lhOjpQbGF0Zm9ybUNh
bnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKKworICAgIFJlc2FtcGxp
bmdNb2RlIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPklzUHJpbnRpbmcoKSA/IFJFU0FN
UExFX05PTkUgOgorICAgICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUoYml0bWFwLCBzcmNSZWN0
LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3Qud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBpZiAo
cmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7CisgICAgICAgIHBhaW50LnNldEZpbHRl
ckJpdG1hcChmYWxzZSk7CisgICAgICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAoKmNhbnZhcywgcGFp
bnQsIGJpdG1hcCwgc3JjUmVjdCwgZGVzdFJlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE5vIHJlc2FtcGxpbmcgbmVjZXNzYXJ5LCB3ZSBjYW4ganVzdCBkcmF3IHRoZSBiaXRtYXAuIFdl
IHdhbnQgdG8KKyAgICAgICAgLy8gZmlsdGVyIGl0IGlmIHdlIGRlY2lkZWQgdG8gZG8gbGluZWFy
IGludGVycG9sYXRpb24gYWJvdmUsIG9yIGlmIHRoZXJlCisgICAgICAgIC8vIGlzIHNvbWV0aGlu
ZyBpbnRlcmVzdGluZyBnb2luZyBvbiB3aXRoIHRoZSBtYXRyaXggKGxpa2UgYSByb3RhdGlvbiku
CisgICAgICAgIC8vIE5vdGU6IGZvciBzZXJpYWxpemF0aW9uLCB3ZSB3aWxsIHdhbnQgdG8gc3Vi
c2V0IHRoZSBiaXRtYXAgZmlyc3Qgc28KKyAgICAgICAgLy8gd2UgZG9uJ3Qgc2VuZCBleHRyYSBw
aXhlbHMuCisgICAgICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChyZXNhbXBsaW5nID09IFJFU0FN
UExFX0xJTkVBUik7CisgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc3Jj
UmVjdCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgfQorfQorCisvLyBUcmFuc2Zvcm1zIHRoZSBn
aXZlbiBkaW1lbnNpb25zIHdpdGggdGhlIGdpdmVuIG1hdHJpeC4gVXNlZCB0byBzZWUgaG93IGJp
ZworLy8gaW1hZ2VzIHdpbGwgYmUgb25jZSB0cmFuc2Zvcm1lZC4KK3ZvaWQgVHJhbnNmb3JtRGlt
ZW5zaW9ucyhjb25zdCBTa01hdHJpeCYgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IHNyY193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzcmNfaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0X3dpZHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0X2hlaWdodCkgeworICAgIC8vIFRyYW5zZm9y
bSAzIHBvaW50cyB0byBzZWUgaG93IGxvbmcgZWFjaCBzaWRlIG9mIHRoZSBiaXRtYXAgd2lsbCBi
ZS4KKyAgICBTa1BvaW50IHNyY19wb2ludHNbM107ICAvLyAoMCwgMCksICh3aWR0aCwgMCksICgw
LCBoZWlnaHQpLgorICAgIHNyY19wb2ludHNbMF0uc2V0KDAsIDApOworICAgIHNyY19wb2ludHNb
MV0uc2V0KFNrRmxvYXRUb1NjYWxhcihzcmNfd2lkdGgpLCAwKTsKKyAgICBzcmNfcG9pbnRzWzJd
LnNldCgwLCBTa0Zsb2F0VG9TY2FsYXIoc3JjX2hlaWdodCkpOworCisgICAgLy8gTm93IG1lYXN1
cmUgdGhlIGxlbmd0aCBvZiB0aGUgdHdvIHRyYW5zZm9ybWVkIHZlY3RvcnMgcmVsYXRpdmUgdG8g
dGhlCisgICAgLy8gdHJhbnNmb3JtZWQgb3JpZ2luIHRvIHNlZSBob3cgYmlnIHRoZSBiaXRtYXAg
d2lsbCBiZS4gTm90ZTogZm9yIHNrZXdzLAorICAgIC8vIHRoaXMgaXNuJ3QgdGhlIGJlc3QgdGhp
bmcsIGJ1dCB3ZSBkb24ndCBoYXZlIHNrZXdzLgorICAgIFNrUG9pbnQgZGVzdF9wb2ludHNbM107
CisgICAgbWF0cml4Lm1hcFBvaW50cyhkZXN0X3BvaW50cywgc3JjX3BvaW50cywgMyk7CisgICAg
KmRlc3Rfd2lkdGggPSBTa1NjYWxhclRvRmxvYXQoKGRlc3RfcG9pbnRzWzFdIC0gZGVzdF9wb2lu
dHNbMF0pLmxlbmd0aCgpKTsKKyAgICAqZGVzdF9oZWlnaHQgPSBTa1NjYWxhclRvRmxvYXQoKGRl
c3RfcG9pbnRzWzJdIC0gZGVzdF9wb2ludHNbMF0pLmxlbmd0aCgpKTsKK30KKworLy8gQSBoZWxw
ZXIgbWV0aG9kIGZvciB0cmFuc2xhdGluZyBuZWdhdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVl
cy4KK0Zsb2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBGbG9hdFJlY3Qgbm9ybSA9IHJlY3Q7CisgICAgaWYgKG5vcm0ud2lkdGgoKSA8IDApIHsKKyAg
ICAgICAgbm9ybS5zZXRYKG5vcm0ueCgpICsgbm9ybS53aWR0aCgpKTsKKyAgICAgICAgbm9ybS5z
ZXRXaWR0aCgtbm9ybS53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG5vcm0uaGVpZ2h0KCkgPCAw
KSB7CisgICAgICAgIG5vcm0uc2V0WShub3JtLnkoKSArIG5vcm0uaGVpZ2h0KCkpOworICAgICAg
ICBub3JtLnNldEhlaWdodCgtbm9ybS5oZWlnaHQoKSk7CisgICAgfQorICAgIHJldHVybiBub3Jt
OworfQorCit9ICAvLyBuYW1lc3BhY2UKKwordm9pZCBGcmFtZURhdGE6OmNsZWFyKCkKK3sKKyAg
ICAvLyBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KCkgYWxsb2NhdGVkIHxtX2ZyYW1l
fCBhbmQgcGFzc2VkCisgICAgLy8gb3duZXJzaGlwIHRvIEJpdG1hcEltYWdlOyB3ZSBtdXN0IGRl
bGV0ZSBpdCBoZXJlLgorICAgIGRlbGV0ZSBtX2ZyYW1lOworICAgIG1fZnJhbWUgPSAwOworICAg
IC8vIE5PVEU6IFdlIHB1cnBvc2VmdWxseSBkb24ndCByZXNldCBtZXRhZGF0YSBoZXJlLCBzbyB0
aGF0IGV2ZW4gaWYgd2UKKyAgICAvLyB0aHJvdyBhd2F5IHByZXZpb3VzbHktZGVjb2RlZCBkYXRh
LCBhbmltYXRpb24gbG9vcHMgY2FuIHN0aWxsIGFjY2VzcworICAgIC8vIHByb3BlcnRpZXMgbGlr
ZSBmcmFtZSBkdXJhdGlvbnMgd2l0aG91dCByZS1kZWNvZGluZy4KK30KKworUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7Cisg
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUp
OworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGZsb2F0U3JjUmVjdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0
ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Cit7CisgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBmbG9hdFNyY1JlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47ICAvLyBub3RoaW5nIHRvIGRyYXcKKworICAgIE5hdGl2ZUltYWdl
U2tpYSogYml0bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWJp
dG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhpcyBpcyBhIHZlcnkgaW5leHBlbnNp
dmUgb3BlcmF0aW9uLiBJdCB3aWxsIGdlbmVyYXRlIGEgbmV3IGJpdG1hcCBidXQKKyAgICAvLyBp
dCB3aWxsIGludGVybmFsbHkgcmVmZXJlbmNlIHRoZSBvbGQgYml0bWFwJ3MgcGl4ZWxzLCBhZGp1
c3RpbmcgdGhlIHJvdworICAgIC8vIHN0cmlkZSBzbyB0aGUgZXh0cmEgcGl4ZWxzIGFwcGVhciBh
cyBwYWRkaW5nIHRvIHRoZSBzdWJzZXR0ZWQgYml0bWFwLgorICAgIFNrQml0bWFwIHNyY19zdWJz
ZXQ7CisgICAgU2tJUmVjdCBzcmNSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmbG9hdFNyY1JlY3Qp
OworICAgIGJpdG1hcC0+ZXh0cmFjdFN1YnNldCgmc3JjX3N1YnNldCwgc3JjUmVjdCk7CisKKyAg
ICBTa0JpdG1hcCByZXNhbXBsZWQ7CisgICAgU2tTaGFkZXIqIHNoYWRlcjsKKworICAgIC8vIEZp
Z3VyZSBvdXQgd2hhdCBzaXplIHRoZSBiaXRtYXAgd2lsbCBiZSBpbiB0aGUgZGVzdGluYXRpb24u
IFRoZQorICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaXMgdGhlIGJvdW5kcyBvZiB0aGUgcGF0dGVy
biwgd2UgbmVlZCB0byB1c2UgdGhlCisgICAgLy8gbWF0cml4IHRvIHNlZSBob3cgYml0IGl0IHdp
bGwgYmUuCisgICAgZmxvYXQgZGVzdF9iaXRtYXBfd2lkdGgsIGRlc3RfYml0bWFwX2hlaWdodDsK
KyAgICBUcmFuc2Zvcm1EaW1lbnNpb25zKHBhdHRlcm5UcmFuc2Zvcm0sIHNyY1JlY3Qud2lkdGgo
KSwgc3JjUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZXN0X2JpdG1h
cF93aWR0aCwgJmRlc3RfYml0bWFwX2hlaWdodCk7CisKKyAgICAvLyBDb21wdXRlIHRoZSByZXNh
bXBsaW5nIG1vZGUuCisgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKKyAgICBpZiAoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPklzUHJpbnRpbmcoKSkKKyAgICAgIHJlc2FtcGxpbmcg
PSBSRVNBTVBMRV9MSU5FQVI7CisgICAgZWxzZSB7CisgICAgICByZXNhbXBsaW5nID0gY29tcHV0
ZVJlc2FtcGxpbmdNb2RlKCpiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9iaXRtYXBfd2lkdGgsIGRlc3RfYml0
bWFwX2hlaWdodCk7CisgICAgfQorCisgICAgLy8gTG9hZCB0aGUgdHJhbnNmb3JtIFdlYktpdCBy
ZXF1ZXN0ZWQuCisgICAgU2tNYXRyaXggbWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0pOworCisgICAg
aWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgeworICAgICAgICAvLyBEbyBuaWNl
IHJlc2FtcGxpbmcuCisgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6OkltYWdlT3Bl
cmF0aW9uczo6UmVzaXplKHNyY19zdWJzZXQsCisgICAgICAgICAgICBza2lhOjpJbWFnZU9wZXJh
dGlvbnM6OlJFU0laRV9MQU5DWk9TMywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZGVz
dF9iaXRtYXBfd2lkdGgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkZXN0X2JpdG1h
cF9oZWlnaHQpKTsKKyAgICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRl
cigKKyAgICAgICAgICAgIHJlc2FtcGxlZCwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNr
U2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKKworICAgICAgICAvLyBTaW5jZSB3ZSBqdXN0IHJl
c2l6ZWQgdGhlIGJpdG1hcCwgd2UgbmVlZCB0byB1bmRvIHRoZSBzY2FsZSBzZXQgaW4KKyAgICAg
ICAgLy8gdGhlIGltYWdlIHRyYW5zZm9ybS4KKyAgICAgICAgbWF0cml4LnNldFNjYWxlWChTa0lu
dFRvU2NhbGFyKDEpKTsKKyAgICAgICAgbWF0cml4LnNldFNjYWxlWShTa0ludFRvU2NhbGFyKDEp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5pY2UgcmVzYW1wbGlu
Zy4KKyAgICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcigKKyAgICAg
ICAgICAgIHNyY19zdWJzZXQsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6
a1JlcGVhdF9UaWxlTW9kZSk7CisgICAgfQorCisgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHRyYW5z
bGF0ZSBpdCBzdWNoIHRoYXQgdGhlIG9yaWdpbiBvZiB0aGUgcGF0dGVybiBpcyB0aGUKKyAgICAv
LyBvcmlnaW4gb2YgdGhlIGRlc3RpbmF0aW9uIHJlY3QsIHdoaWNoIGlzIHdoYXQgV2ViS2l0IGV4
cGVjdHMuIFNraWEgdXNlcworICAgIC8vIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvcmlnaW4gYXMg
dGhlIGJhc2UgZm9yIHRoZSBwYXR0ZXIuIElmIFdlYktpdCB3YW50cworICAgIC8vIGEgc2hpZnRl
ZCBpbWFnZSwgaXQgd2lsbCBzaGlmdCBpdCBmcm9tIHRoZXJlIHVzaW5nIHRoZSBwYXR0ZXJuVHJh
bnNmb3JtLgorICAgIGZsb2F0IGFkanVzdGVkWCA9IHBoYXNlLngoKSArIGZsb2F0U3JjUmVjdC54
KCkgKgorICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5hKCkpOworICAgIGZsb2F0IGFkanVzdGVkWSA9IHBoYXNlLnkoKSArIGZsb2F0
U3JjUmVjdC55KCkgKgorICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOworICAgIG1hdHJpeC5wb3N0VHJhbnNsYXRlKFNrRmxv
YXRUb1NjYWxhcihhZGp1c3RlZFgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNrRmxvYXRU
b1NjYWxhcihhZGp1c3RlZFkpKTsKKyAgICBzaGFkZXItPnNldExvY2FsTWF0cml4KG1hdHJpeCk7
CisKKyAgICBTa1BhaW50IHBhaW50OworICAgIHBhaW50LnNldFNoYWRlcihzaGFkZXIpLT51bnJl
ZigpOworICAgIHBhaW50LnNldFBvcnRlckR1ZmZYZmVybW9kZShXZWJDb3JlQ29tcG9zaXRlVG9T
a2lhQ29tcG9zaXRlKGNvbXBvc2l0ZU9wKSk7CisgICAgcGFpbnQuc2V0RmlsdGVyQml0bWFwKHJl
c2FtcGxpbmcgPT0gUkVTQU1QTEVfTElORUFSKTsKKworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5wYWludFNrUGFpbnQoZGVzdFJlY3QsIHBhaW50KTsKK30KKworLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBCaXRtYXBJbWFnZSBD
bGFzcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQoreworICAgIC8vIFRoaXMg
aXMgbm90IHVzZWQuIE9uIE1hYywgdGhlICJwbGF0Zm9ybSIgZGF0YSBpcyBhIGNhY2hlIG9mIHNv
bWUgT1MKKyAgICAvLyBzcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgaW1hZ2UgdGhhdCBhcmUgY3Jl
YXRlZCBpcyBzb21lIGNhc2VzLiBUaGVzZQorICAgIC8vIGFyZW4ndCBub3JtYWxseSB1c2VkLCBp
dCBpcyBlcXVpdmFsZW50IHRvIGdldEhCSVRNQVAgb24gV2luZG93cywgYW5kCisgICAgLy8gdGhl
IHBsYXRmb3JtIGRhdGEgaXMgdGhlIGNhY2hlLgorfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZh
bGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKKyAgICAvLyBTZWUgaW5pdFBsYXRmb3JtRGF0YSBhYm92
ZS4KK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKK30KKwor
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3sKKyAgICBpZiAoIW1fc291
cmNlLmluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNwaW4gdGhlIGFu
aW1hdGlvbiB0byB0aGUgY29ycmVjdCBmcmFtZSBiZWZvcmUgd2UgdHJ5IHRvIGRyYXcgaXQsIHNv
IHdlCisgICAgLy8gZG9uJ3QgZHJhdyBhbiBvbGQgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkg
bmVlZCB0byBkcmF3IGEgbmV3ZXIgb25lLAorICAgIC8vIGNhdXNpbmcgZmxpY2tlciBhbmQgd2Fz
dGluZyBDUFUuCisgICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghYm0pCisg
ICAgICAgIHJldHVybjsgIC8vIEl0J3MgdG9vIGVhcmx5IGFuZCB3ZSBkb24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KKworICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0
UmVjdCk7CisgICAgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0
KTsKKworICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCisKKyAgICBwYWludFNr
Qml0bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgKmJtLAor
ICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSW50UmVjdChub3JtU3JjUmVjdCksCisgICAgICAg
ICAgICAgICAgICBlbmNsb3NpbmdJbnRSZWN0KG5vcm1Ec3RSZWN0KSwKKyAgICAgICAgICAgICAg
ICAgIFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUoY29tcG9zaXRlT3ApKTsKK30KKwor
dm9pZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3sKKyAgICBGbG9hdFJlY3Qgbm9ybURz
dFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOworICAgIEZsb2F0UmVjdCBub3JtU3JjUmVj
dCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CisKKyAgICBpZiAobm9ybVNyY1JlY3QuaXNFbXB0
eSgpIHx8IG5vcm1Ec3RSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOyAgLy8gTm90aGlu
ZyB0byBkcmF3LgorCisgICAgcGFpbnRTa0JpdG1hcChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSwK
KyAgICAgICAgICAgICAgICAgIG1fbmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICBlbmNs
b3NpbmdJbnRSZWN0KG5vcm1TcmNSZWN0KSwKKyAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ0lu
dFJlY3Qobm9ybURzdFJlY3QpLAorICAgICAgICAgICAgICAgICAgV2ViQ29yZUNvbXBvc2l0ZVRv
U2tpYUNvbXBvc2l0ZShjb21wb3NpdGVPcCkpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhPiBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKAorICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCit7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhPiBpbWFnZShhZG9wdFJlZihuZXcgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEo
KSkpOworICAgIGlmICghYml0bWFwLmNvcHlUbygmaW1hZ2UtPm1fbmF0aXZlSW1hZ2UsIGJpdG1h
cC5jb25maWcoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpbWFnZS5yZWxlYXNl
KCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26546</attachid>
            <date>2009-01-08 16:41:02 -0800</date>
            <delta_ts>2009-01-08 16:41:02 -0800</delta_ts>
            <desc>Add ImageBufferSkia and ImageSkia files.</desc>
            <filename>Add-ImageBufferSkia-and-ImageSkia-files..patch</filename>
            <type>text/plain</type>
            <size>29247</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDNjOGI1NzIxNzZmZmE2M2ZiNzJkNzAzMzM2ZTNjMDg3OWU0YWQzNgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NjM1MDU2Li40MTUyZGNl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM0IEBACisyMDA5LTAxLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAg
ICAgQWRkIEltYWdlQnVmZmVyU2tpYSBhbmQgSW1hZ2VTa2lhIGZpbGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMDAKKyAgICAgICAgRm9yIG5v
dyB3ZSd2ZSBsZWZ0IEJpdG1hcEltYWdlIGFuZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYQor
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIEltYWdlU2tpYSBmaWxlIChsaWtlIEltYWdl
Q0cgaGFzKSwgYnV0CisgICAgICAgIHdlIGludGVuZCB0byBicmVhayB0aGVtIG91dCBpbnRvIHRo
ZWlyIG93biBmaWxlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6
OkltYWdlQnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpp
bml0UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSk6CisKIDIwMDkt
MDEtMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFyayBSb3dlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mZGZjYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVk
ZSAiU2tpYVV0aWxzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gV2UgcGFzcyBhIHRlY2huaWNhbGx5LXVuaW5pdGlhbGl6ZWQgY2FudmFzIHRv
IHRoZSBwbGF0Zm9ybSBjb250ZXh0IGhlcmUgc2luY2UKKy8vIHRoZSBjYW52YXMgaW5pdGlhbGl6
YXRpb24gY29tcGxldGVzIGluIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlci4gQnV0CisvLyBQbGF0
Zm9ybUNvbnRleHQgZG9lc24ndCBhY3R1YWxseSBuZWVkIHRvIHVzZSB0aGUgb2JqZWN0LCBhbmQg
dGhpcyBtYWtlcyBhbGwKKy8vIHRoZSBvd25lcnNoaXAgZWFzaWVyIHRvIG1hbmFnZS4KK0ltYWdl
QnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBt
X3BsYXRmb3JtQ29udGV4dCgwKSAgLy8gQ2FudmFzIGlzIHNldCBpbiBJbWFnZUJ1ZmZlciBjb25z
dHJ1Y3Rvci4KK3sKK30KKworSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUsIGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNzKQorICAgIDogbV9kYXRhKHNpemUp
CisgICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAgICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5pbml0aWFs
aXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpKSB7CisgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZGF0YS5tX3BsYXRm
b3JtQ29udGV4dC5zZXRDYW52YXMoJm1fZGF0YS5tX2NhbnZhcyk7CisgICAgbV9jb250ZXh0LnNl
dChuZXcgR3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKKworICAg
IC8vIE1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJlbnQuIEl0IHdvdWxkIGJlIG5pY2UgaWYg
dGhpcyB3YXNuJ3QKKyAgICAvLyByZXF1aXJlZCwgYnV0IHRoZSBjYW52YXMgaXMgY3VycmVudGx5
IGZpbGxlZCB3aXRoIHRoZSBtYWdpYyB0cmFuc3BhcmVuY3kKKyAgICAvLyBjb2xvci4gQ2FuIHdl
IGhhdmUgYW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/CisgICAgbV9kYXRhLm1fY2FudmFzLmRy
YXdBUkdCKDAsIDAsIDAsIDAsIFNrUG9ydGVyRHVmZjo6a0NsZWFyX01vZGUpOworICAgIHN1Y2Nl
c3MgPSB0cnVlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKK3sKK30KKworR3Jh
cGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKK30KKworSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ltYWdlKSB7CisgICAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIENPUFkg
b2YgdGhlIGltYWdlIGFuZCB3aWxsIGNhY2hlIHRoYXQgY29weS4gVGhpcyBtZWFucworICAgICAg
ICAvLyB0aGF0IGlmIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyB0YWtlIHBsYWNlIG9uIHRoZSBjb250
ZXh0LCBuZWl0aGVyIHRoZQorICAgICAgICAvLyBjdXJyZW50bHktcmV0dXJuZWQgaW1hZ2UsIG5v
ciB0aGUgcmVzdWx0cyBvZiBmdXR1cmUgaW1hZ2UoKSBjYWxscywKKyAgICAgICAgLy8gd2lsbCBj
b250YWluIHRoYXQgb3BlcmF0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIHNlZW1z
IHNpbGx5LCBidXQgaXMgdGhlIHdheSB0aGUgQ0cgcG9ydCB3b3JrczogaW1hZ2UoKSBpcworICAg
ICAgICAvLyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgd2hlbiByZW5kZXJpbmcgaXMgImNvbXBs
ZXRlLiIKKyAgICAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVh
dGUoCisgICAgICAgICAgICAqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGNvbnRleHQoKSk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQg
PSBJbWFnZURhdGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGEgPSByZXN1bHQtPmRhdGEoKS0+ZGF0YSgpOworCisgICAgaWYgKHJl
Y3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwKKyAgICAgICAgKHJlY3QueCgpICsgcmVjdC53
aWR0aCgpKSA+IG1fc2l6ZS53aWR0aCgpIHx8CisgICAgICAgIChyZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0
LT5kYXRhKCktPmxlbmd0aCgpKTsKKworICAgIGludCBvcmlnaW5YID0gcmVjdC54KCk7CisgICAg
aW50IGRlc3RYID0gMDsKKyAgICBpZiAob3JpZ2luWCA8IDApIHsKKyAgICAgICAgZGVzdFggPSAt
b3JpZ2luWDsKKyAgICAgICAgb3JpZ2luWCA9IDA7CisgICAgfQorICAgIGludCBlbmRYID0gcmVj
dC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgaWYgKGVuZFggPiBtX3NpemUud2lkdGgoKSkKKyAg
ICAgICAgZW5kWCA9IG1fc2l6ZS53aWR0aCgpOworICAgIGludCBudW1Db2x1bW5zID0gZW5kWCAt
IG9yaWdpblg7CisKKyAgICBpbnQgb3JpZ2luWSA9IHJlY3QueSgpOworICAgIGludCBkZXN0WSA9
IDA7CisgICAgaWYgKG9yaWdpblkgPCAwKSB7CisgICAgICAgIGRlc3RZID0gLW9yaWdpblk7Cisg
ICAgICAgIG9yaWdpblkgPSAwOworICAgIH0KKyAgICBpbnQgZW5kWSA9IHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKTsKKyAgICBpZiAoZW5kWSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgZW5k
WSA9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgbnVtUm93cyA9IGVuZFkgLSBvcmlnaW5ZOwor
CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9ICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5iaXRtYXAoKTsKKyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZyk7CisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1h
cCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwor
ICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3cgPSBkYXRhICsgZGVzdFkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0WCAqIDQ7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkg
eworICAgICAgICB1aW50MzJfdCogc3JjUm93ID0gYml0bWFwLmdldEFkZHIzMihvcmlnaW5YLCBv
cmlnaW5ZICsgeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4
KSB7CisgICAgICAgICAgICBTa0NvbG9yIGNvbG9yID0gU2tQTUNvbG9yVG9Db2xvcihzcmNSb3db
eF0pOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdFBpeGVsID0gJmRlc3RSb3dbeCAq
IDRdOworICAgICAgICAgICAgZGVzdFBpeGVsWzBdID0gU2tDb2xvckdldFIoY29sb3IpOworICAg
ICAgICAgICAgZGVzdFBpeGVsWzFdID0gU2tDb2xvckdldEcoY29sb3IpOworICAgICAgICAgICAg
ZGVzdFBpeGVsWzJdID0gU2tDb2xvckdldEIoY29sb3IpOworICAgICAgICAgICAgZGVzdFBpeGVs
WzNdID0gU2tDb2xvckdldEEoY29sb3IpOworICAgICAgICB9CisgICAgICAgIGRlc3RSb3cgKz0g
ZGVzdEJ5dGVzUGVyUm93OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQoreworICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsK
KyAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOworCisgICAgaW50IG9yaWdpblgg
PSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgZGVzdFggPSBkZXN0UG9pbnQueCgpICsgc291cmNl
UmVjdC54KCk7CisgICAgQVNTRVJUKGRlc3RYID49IDApOworICAgIEFTU0VSVChkZXN0WCA8IG1f
c2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQob3JpZ2luWCA+PSAwKTsKKyAgICBBU1NFUlQob3Jp
Z2luWCA8IHNvdXJjZVJlY3QucmlnaHQoKSk7CisKKyAgICBpbnQgZW5kWCA9IGRlc3RQb2ludC54
KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgQVNTRVJUKGVuZFggPD0gbV9zaXplLndpZHRo
KCkpOworCisgICAgaW50IG51bUNvbHVtbnMgPSBlbmRYIC0gZGVzdFg7CisKKyAgICBpbnQgb3Jp
Z2luWSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCBkZXN0WSA9IGRlc3RQb2ludC55KCkgKyBz
b3VyY2VSZWN0LnkoKTsKKyAgICBBU1NFUlQoZGVzdFkgPj0gMCk7CisgICAgQVNTRVJUKGRlc3RZ
IDwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBBU1NFUlQob3JpZ2luWSA+PSAwKTsKKyAgICBBU1NF
UlQob3JpZ2luWSA8IHNvdXJjZVJlY3QuYm90dG9tKCkpOworCisgICAgaW50IGVuZFkgPSBkZXN0
UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0b20oKTsKKyAgICBBU1NFUlQoZW5kWSA8PSBtX3Np
emUuaGVpZ2h0KCkpOworICAgIGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOworCisgICAgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCA9ICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRt
YXAoKTsKKyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZyk7CisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7CisKKyAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2UtPndpZHRoKCk7CisKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpICsgb3Jp
Z2luWSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2luWCAqIDQ7CisKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICB1aW50MzJfdCogZGVzdFJvdyA9IGJpdG1h
cC5nZXRBZGRyMzIoZGVzdFgsIGRlc3RZICsgeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbCA9ICZzcmNSb3dbeCAqIDRdOworICAgICAgICAgICAgZGVzdFJvd1t4XSA9IFNrUHJl
TXVsdGlwbHlBUkdCKHNyY1BpeGVsWzNdLCBzcmNQaXhlbFswXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQaXhlbFsxXSwgc3JjUGl4ZWxbMl0pOworICAg
ICAgICB9CisgICAgICAgIHNyY1JvdyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK1N0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExMmFmMwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCkBA
IC0wLDAgKzEsNDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCisjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKKyNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNraWFVdGlscy5oIgorI2luY2x1ZGUg
IlNrU2hhZGVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1
ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0
Zm9ybV9jYW52YXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGJ5IGNvbXB1
dGVSZXNhbXBsaW5nTW9kZSB0byB0ZWxsIGhvdyBiaXRtYXBzIHNob3VsZCBiZSByZXNhbXBsZWQu
CitlbnVtIFJlc2FtcGxpbmdNb2RlIHsKKyAgICAvLyBOZWFyZXN0IG5laWdoYm9yIHJlc2FtcGxp
bmcuIFVzZWQgd2hlbiB3ZSBkZXRlY3QgdGhhdCB0aGUgcGFnZSBpcworICAgIC8vIHRyeWluZyB0
byBtYWtlIGEgcGF0dGVybiBieSBzdHJldGNoaW5nIGEgc21hbGwgYml0bWFwIHZlcnkgbGFyZ2Uu
CisgICAgUkVTQU1QTEVfTk9ORSwKKworICAgIC8vIERlZmF1bHQgc2tpYSByZXNhbXBsaW5nLiBV
c2VkIGZvciBsYXJnZSBncm93aW5nIG9mIGltYWdlcyB3aGVyZSBoaWdoCisgICAgLy8gcXVhbGl0
eSByZXNhbXBsaW5nIGRvZXNuJ3QgZ2V0IHVzIHZlcnkgbXVjaCBleGNlcHQgYSBzbG93ZG93bi4K
KyAgICBSRVNBTVBMRV9MSU5FQVIsCisKKyAgICAvLyBIaWdoIHF1YWxpdHkgcmVzYW1wbGluZy4K
KyAgICBSRVNBTVBMRV9BV0VTT01FLAorfTsKKworc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1
dGVSZXNhbXBsaW5nTW9kZShjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgaW50IHNyY1dp
ZHRoLCBpbnQgc3JjSGVpZ2h0LCBmbG9hdCBkZXN0V2lkdGgsIGZsb2F0IGRlc3RIZWlnaHQpCit7
CisgICAgaW50IGRlc3RJV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCk7CisgICAg
aW50IGRlc3RJSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihkZXN0SGVpZ2h0KTsKKworICAgIC8v
IFRoZSBwZXJjZW50IGNoYW5nZSBiZWxvdyB3aGljaCB3ZSB3aWxsIG5vdCByZXNhbXBsZS4gVGhp
cyB1c3VhbGx5IG1lYW5zCisgICAgLy8gYW4gb2ZmLWJ5LW9uZSBlcnJvciBvbiB0aGUgd2ViIHBh
Z2UsIGFuZCBqdXN0IGRvaW5nIG5lYXJlc3QgbmVpZ2hib3IKKyAgICAvLyBzYW1wbGluZyBpcyB1
c3VhbGx5IGdvb2QgZW5vdWdoLgorICAgIGNvbnN0IGZsb2F0IGtGcmFjdGlvbmFsQ2hhbmdlVGhy
ZXNob2xkID0gMC4wMjVmOworCisgICAgLy8gSW1hZ2VzIHNtYWxsZXIgdGhhbiB0aGlzIGluIGVp
dGhlciBkaXJlY3Rpb24gYXJlIGNvbnNpZGVyZWQgInNtYWxsIiBhbmQKKyAgICAvLyBhcmUgbm90
IHJlc2FtcGxlZCBldmVyIChzZWUgYmVsb3cpLgorICAgIGNvbnN0IGludCBrU21hbGxJbWFnZVNp
emVUaHJlc2hvbGQgPSA4OworCisgICAgLy8gVGhlIGFtb3VudCBhbiBpbWFnZSBjYW4gYmUgc3Ry
ZXRjaGVkIGluIGEgc2luZ2xlIGRpcmVjdGlvbiBiZWZvcmUgd2UKKyAgICAvLyBzYXkgdGhhdCBp
dCBpcyBiZWluZyBzdHJldGNoZWQgc28gbXVjaCB0aGF0IGl0IG11c3QgYmUgYSBsaW5lIG9yCisg
ICAgLy8gYmFja2dyb3VuZCB0aGF0IGRvZXNuJ3QgbmVlZCByZXNhbXBsaW5nLgorICAgIGNvbnN0
IGZsb2F0IGtMYXJnZVN0cmV0Y2ggPSAzLjBmOworCisgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBz
aG91bGQgcmVzYW1wbGUgdGhpcyBpbWFnZS4gV2UgdHJ5IHRvIHBydW5lIG91dCBzb21lCisgICAg
Ly8gY29tbW9uIGNhc2VzIHdoZXJlIHJlc2FtcGxpbmcgd29uJ3QgZ2l2ZSB1cyBhbnl0aGluZywg
c2luY2UgaXQgaXMgbXVjaAorICAgIC8vIHNsb3dlciB0aGFuIGRyYXdpbmcgc3RyZXRjaGVkLgor
ICAgIGlmIChzcmNXaWR0aCA9PSBkZXN0SVdpZHRoICYmIHNyY0hlaWdodCA9PSBkZXN0SUhlaWdo
dCkgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc2FtcGxlIGlmIHRoZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05P
TkU7CisgICAgfQorCisgICAgaWYgKHNyY1dpZHRoIDw9IGtTbWFsbEltYWdlU2l6ZVRocmVzaG9s
ZAorICAgICAgICB8fCBzcmNIZWlnaHQgPD0ga1NtYWxsSW1hZ2VTaXplVGhyZXNob2xkCisgICAg
ICAgIHx8IGRlc3RXaWR0aCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQKKyAgICAgICAgfHwg
ZGVzdEhlaWdodCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQpIHsKKyAgICAgICAgLy8gTmV2
ZXIgcmVzYW1wbGUgc21hbGwgaW1hZ2VzLiBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCBmb3IgYm9yZGVy
cyBhbmQKKyAgICAgICAgLy8gcnVsZXMgKHRoaW5rIDF4MSBpbWFnZXMgdXNlZCB0byBtYWtlIGxp
bmVzKS4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05PTkU7CisgICAgfQorCisgICAgaWYgKHNy
Y0hlaWdodCAqIGtMYXJnZVN0cmV0Y2ggPD0gZGVzdEhlaWdodCB8fCBzcmNXaWR0aCAqIGtMYXJn
ZVN0cmV0Y2ggPD0gZGVzdFdpZHRoKSB7CisgICAgICAgIC8vIExhcmdlIGltYWdlIGRldGVjdGVk
LgorCisgICAgICAgIC8vIERvbid0IHJlc2FtcGxlIGlmIGl0IGlzIGJlaW5nIHN0cmV0Y2hlZCBh
IGxvdCBpbiBvbmx5IG9uZSBkaXJlY3Rpb24uCisgICAgICAgIC8vIFRoaXMgaXMgdHJ5aW5nIHRv
IGNhdGNoIGNhc2VzIHdoZXJlIHNvbWVib2R5IGhhcyBjcmVhdGVkIGEgYm9yZGVyCisgICAgICAg
IC8vICh3aGljaCBtaWdodCBiZSBsYXJnZSkgYW5kIHRoZW4gaXMgc3RyZXRjaGluZyBpdCB0byBm
aWxsIHNvbWUgcGFydAorICAgICAgICAvLyBvZiB0aGUgcGFnZS4KKyAgICAgICAgaWYgKHNyY1dp
ZHRoID09IGRlc3RXaWR0aCB8fCBzcmNIZWlnaHQgPT0gZGVzdEhlaWdodCkKKyAgICAgICAgICAg
IHJldHVybiBSRVNBTVBMRV9OT05FOworCisgICAgICAgIC8vIFRoZSBpbWFnZSBpcyBncm93aW5n
IGEgbG90IGFuZCBpbiBtb3JlIHRoYW4gb25lIGRpcmVjdGlvbi4gUmVzYW1wbGluZworICAgICAg
ICAvLyBpcyBzbG93IGFuZCBkb2Vzbid0IGdpdmUgdXMgdmVyeSBtdWNoIHdoZW4gZ3Jvd2luZyBh
IGxvdC4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKKyAgICB9CisKKyAgICBpZiAo
KGZhYnMoZGVzdFdpZHRoIC0gc3JjV2lkdGgpIC8gc3JjV2lkdGggPCBrRnJhY3Rpb25hbENoYW5n
ZVRocmVzaG9sZCkKKyAgICAgICAgJiYgKGZhYnMoZGVzdEhlaWdodCAtIHNyY0hlaWdodCkgLyBz
cmNIZWlnaHQgPCBrRnJhY3Rpb25hbENoYW5nZVRocmVzaG9sZCkpIHsKKyAgICAgICAgLy8gSXQg
aXMgZGlzYXBwb2ludGluZ2x5IGNvbW1vbiBvbiB0aGUgd2ViIGZvciBpbWFnZSBzaXplcyB0byBi
ZSBvZmYgYnkKKyAgICAgICAgLy8gb25lIG9yIHR3byBwaXhlbHMuIFdlIGRvbid0IGJvdGhlciBy
ZXNhbXBsaW5nIGlmIHRoZSBzaXplIGRpZmZlcmVuY2UKKyAgICAgICAgLy8gaXMgYSBzbWFsbCBm
cmFjdGlvbiBvZiB0aGUgb3JpZ2luYWwgc2l6ZS4KKyAgICAgICAgcmV0dXJuIFJFU0FNUExFX05P
TkU7CisgICAgfQorCisgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgbm90IHlldCBkb25lIGxvYWRp
bmcsIHVzZSBsaW5lYXIuIFdlIGRvbid0IGNhY2hlIHRoZQorICAgIC8vIHBhcnRpYWxseSByZXNh
bXBsZWQgaW1hZ2VzLCBhbmQgYXMgdGhleSBjb21lIGluIGluY3JlbWVudGFsbHksIGl0IGNhdXNl
cworICAgIC8vIHVzIHRvIGhhdmUgdG8gcmVzYW1wbGUgdGhlIHdob2xlIHRoaW5nIGV2ZXJ5IHRp
bWUuCisgICAgaWYgKCFiaXRtYXAuaXNEYXRhQ29tcGxldGUoKSkKKyAgICAgICAgcmV0dXJuIFJF
U0FNUExFX0xJTkVBUjsKKworICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBnZXRzIHJlc2FtcGxlZC4K
KyAgICByZXR1cm4gUkVTQU1QTEVfQVdFU09NRTsKK30KKworLy8gRHJhd3MgdGhlIGdpdmVuIGJp
dG1hcCB0byB0aGUgZ2l2ZW4gY2FudmFzLiBUaGUgc3Vic2V0IG9mIHRoZSBzb3VyY2UgYml0bWFw
CisvLyBpZGVudGlmaWVkIGJ5IHNyY19yZWN0IGlzIGRyYXduIHRvIHRoZSBnaXZlbiBkZXN0aW5h
dGlvbiByZWN0LiBUaGUgYml0bWFwCisvLyB3aWxsIGJlIHJlc2FtcGxlZCB0byByZXNhbXBsZV93
aWR0aCAqIHJlc2FtcGxlX2hlaWdodCAodGhpcyBpcyB0aGUgc2l6ZSBvZgorLy8gdGhlIHdob2xl
IGltYWdlLCBub3QgdGhlIHN1YnNldCkuIFNlZSBzaG91bGRSZXNhbXBsZUJpdG1hcCBmb3IgbW9y
ZS4KKy8vCisvLyBUaGlzIGRvZXMgYSBsb3Qgb2YgY29tcHV0YXRpb24gdG8gcmVzYW1wbGUgb25s
eSB0aGUgcG9ydGlvbiBvZiB0aGUgYml0bWFwCisvLyB0aGF0IHdpbGwgb25seSBiZSBkcmF3bi4g
VGhpcyBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2Ugc2luY2Ugd2hlbiB3ZSBhcmUKKy8vIHNj
cm9sbGluZywgZm9yIGV4YW1wbGUsIHdlIGFyZSBvbmx5IGRyYXdpbmcgYSBzbWFsbCBzdHJpcCBv
ZiB0aGUgaW1hZ2UuCisvLyBSZXNhbXBsaW5nIHRoZSB3aG9sZSBpbWFnZSBldmVyeSB0aW1lIGlz
IHZlcnkgc2xvdywgc28gdGhpcyBzcGVlZHMgdXAgdGhpbmdzCisvLyBkcmFtYXRpY2FsbHkuCitz
dGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBjYW52YXMsIFNrUGFpbnQm
IHBhaW50LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCYgc3Jj
SVJlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCit7CisgICAgLy8gRmlyc3QgZ2V0IHRoZSBz
dWJzZXQgd2UgbmVlZC4gVGhpcyBpcyBlZmZpY2llbnQgYW5kIGRvZXMgbm90IGNvcHkgcGl4ZWxz
LgorICAgIFNrQml0bWFwIHN1YnNldDsKKyAgICBiaXRtYXAuZXh0cmFjdFN1YnNldCgmc3Vic2V0
LCBzcmNJUmVjdCk7CisgICAgU2tSZWN0IHNyY1JlY3Q7CisgICAgc3JjUmVjdC5zZXQoc3JjSVJl
Y3QpOworCisgICAgLy8gV2hldGhlciB3ZSdyZSBkb2luZyBhIHN1YnNldCBvciB1c2luZyB0aGUg
ZnVsbCBzb3VyY2UgaW1hZ2UuCisgICAgYm9vbCBzcmNJc0Z1bGwgPSBzcmNJUmVjdC5mTGVmdCA9
PSAwICYmIHNyY0lSZWN0LmZUb3AgPT0gMAorICAgICAgICAmJiBzcmNJUmVjdC53aWR0aCgpID09
IGJpdG1hcC53aWR0aCgpCisgICAgICAgICYmIHNyY0lSZWN0LmhlaWdodCgpID09IGJpdG1hcC5o
ZWlnaHQoKTsKKworICAgIC8vIFdlIHdpbGwgYWx3YXlzIGRyYXcgaW4gaW50ZWdlciBzaXplcywg
c28gcm91bmQgdGhlIGRlc3RpbmF0aW9uIHJlY3QuCisgICAgU2tJUmVjdCBkZXN0UmVjdFJvdW5k
ZWQ7CisgICAgZGVzdFJlY3Qucm91bmQoJmRlc3RSZWN0Um91bmRlZCk7CisgICAgU2tJUmVjdCBy
ZXNpemVkSW1hZ2VSZWN0OyAgLy8gUmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgcmVzaXplZCBp
bWFnZS4KKyAgICByZXNpemVkSW1hZ2VSZWN0LnNldCgwLCAwLCBkZXN0UmVjdFJvdW5kZWQud2lk
dGgoKSwgZGVzdFJlY3RSb3VuZGVkLmhlaWdodCgpKTsKKworICAgIGlmIChzcmNJc0Z1bGwgJiYg
Yml0bWFwLmhhc1Jlc2l6ZWRCaXRtYXAoZGVzdFJlY3RSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0
Um91bmRlZC5oZWlnaHQoKSkpIHsKKyAgICAgICAgLy8gWWF5LCB0aGlzIGJpdG1hcCBmcmFtZSBh
bHJlYWR5IGhhcyBhIHJlc2l6ZWQgdmVyc2lvbi4KKyAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVk
ID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RSb3VuZGVkLndpZHRoKCksIGRlc3RSZWN0
Um91bmRlZC5oZWlnaHQoKSk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBs
ZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIG91ciByZWN0LgorICAgIFNrUmVjdCBk
ZXN0Qml0bWFwU3Vic2V0U2s7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjYW52YXMsIGRlc3RSZWN0
LCAmZGVzdEJpdG1hcFN1YnNldFNrKTsKKyAgICBkZXN0Qml0bWFwU3Vic2V0U2sub2Zmc2V0KC1k
ZXN0UmVjdC5mTGVmdCwgLWRlc3RSZWN0LmZUb3ApOworCisgICAgLy8gVGhlIG1hdHJpeCBpbnZl
cnRpbmcsIGV0Yy4gY291bGQgaGF2ZSBpbnRyb2R1Y2VkIHJvdW5kaW5nIGVycm9yIHdoaWNoCisg
ICAgLy8gY2F1c2VzIHRoZSBib3VuZHMgdG8gYmUgb3V0c2lkZSBvZiB0aGUgcmVzaXplZCBiaXRt
YXAuIFdlIHJvdW5kIG91dHdhcmQKKyAgICAvLyBzbyB3ZSBhbHdheXMgbGVhbiB0b3dhcmQgaXQg
YmVpbmcgbGFyZ2VyIHJhdGhlciB0aGFuIHNtYWxsZXIgdGhhbiB3ZQorICAgIC8vIG5lZWQsIGFu
ZCB0aGVuIGNsYW1wIHRvIHRoZSBiaXRtYXAgYm91bmRzIHNvIHdlIGRvbid0IGdldCBhbnkgaW52
YWxpZAorICAgIC8vIGRhdGEuCisgICAgU2tJUmVjdCBkZXN0Qml0bWFwU3Vic2V0U2tJOworICAg
IGRlc3RCaXRtYXBTdWJzZXRTay5yb3VuZE91dCgmZGVzdEJpdG1hcFN1YnNldFNrSSk7CisgICAg
aWYgKCFkZXN0Qml0bWFwU3Vic2V0U2tJLmludGVyc2VjdChyZXNpemVkSW1hZ2VSZWN0KSkKKyAg
ICAgICAgcmV0dXJuOyAgLy8gUmVzaXplZCBpbWFnZSBkb2VzIG5vdCBpbnRlcnNlY3QuCisKKyAg
ICBpZiAoc3JjSXNGdWxsICYmIGJpdG1hcC5zaG91bGRDYWNoZVJlc2FtcGxpbmcoCisgICAgICAg
ICAgICByZXNpemVkSW1hZ2VSZWN0LndpZHRoKCksCisgICAgICAgICAgICByZXNpemVkSW1hZ2VS
ZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS53aWR0aCgpLAor
ICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS5oZWlnaHQoKSkpIHsKKyAgICAgICAgLy8g
V2UncmUgc3VwcG9zZWQgdG8gcmVzaXplIHRoZSBlbnRpcmUgaW1hZ2UgYW5kIGNhY2hlIGl0LCBl
dmVuIHRob3VnaAorICAgICAgICAvLyB3ZSBkb24ndCBuZWVkIGFsbCBvZiBpdC4KKyAgICAgICAg
U2tCaXRtYXAgcmVzYW1wbGVkID0gYml0bWFwLnJlc2l6ZWRCaXRtYXAoZGVzdFJlY3RSb3VuZGVk
LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFw
UmVjdChyZXNhbXBsZWQsIDAsIGRlc3RSZWN0LCAmcGFpbnQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IHJlc2l6ZSB0aGUgZXhwb3NlZCBwYXJ0IG9mIHRoZSBiaXRt
YXAgdG8gZG8gdGhlCisgICAgICAgIC8vIG1pbmltYWwgcG9zc2libGUgd29yay4KKyAgICAgICAg
Z2Z4OjpSZWN0IGRlc3RCaXRtYXBTdWJzZXQoZGVzdEJpdG1hcFN1YnNldFNrSS5mTGVmdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldFNrSS5mVG9w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Qml0bWFwU3Vic2V0U2tJ
LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBT
dWJzZXRTa0kuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIFJlc2FtcGxlIHRoZSBuZWVkZWQgcGFy
dCBvZiB0aGUgaW1hZ2UuCisgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6OkltYWdl
T3BlcmF0aW9uczo6UmVzaXplKHN1YnNldCwKKyAgICAgICAgICAgIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UkVTSVpFX0xBTkNaT1MzLAorICAgICAgICAgICAgZGVzdFJlY3RSb3VuZGVkLndpZHRo
KCksIGRlc3RSZWN0Um91bmRlZC5oZWlnaHQoKSwKKyAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJz
ZXQpOworCisgICAgICAgIC8vIENvbXB1dGUgd2hlcmUgdGhlIG5ldyBiaXRtYXAgc2hvdWxkIGJl
IGRyYXduLiBTaW5jZSBvdXIgbmV3IGJpdG1hcAorICAgICAgICAvLyBtYXkgYmUgc21hbGxlciB0
aGFuIHRoZSBvcmlnaW5hbCwgd2UgaGF2ZSB0byBzaGlmdCBpdCBvdmVyIGJ5IHRoZQorICAgICAg
ICAvLyBzYW1lIGFtb3VudCB0aGF0IHdlIGN1dCBvZmYgdGhlIHRvcCBhbmQgbGVmdC4KKyAgICAg
ICAgU2tSZWN0IG9mZnNldERlc3RSZWN0ID0geworICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNl
dC54KCkgKyBkZXN0UmVjdC5mTGVmdCwKKyAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXQueSgp
ICsgZGVzdFJlY3QuZlRvcCwKKyAgICAgICAgICAgIGRlc3RCaXRtYXBTdWJzZXQucmlnaHQoKSAr
IGRlc3RSZWN0LmZMZWZ0LAorICAgICAgICAgICAgZGVzdEJpdG1hcFN1YnNldC5ib3R0b20oKSAr
IGRlc3RSZWN0LmZUb3AgfTsKKworICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QocmVzYW1w
bGVkLCAwLCBvZmZzZXREZXN0UmVjdCwgJnBhaW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCYgc3JjUmVjdCwgY29uc3Qg
U2tSZWN0JiBkZXN0UmVjdCwgY29uc3QgU2tQb3J0ZXJEdWZmOjpNb2RlJiBjb21wT3ApCit7Cisg
ICAgU2tQYWludCBwYWludDsKKyAgICBwYWludC5zZXRQb3J0ZXJEdWZmWGZlcm1vZGUoY29tcE9w
KTsKKworICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQt
PmNhbnZhcygpOworCisgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29u
dGV4dC0+SXNQcmludGluZygpID8gUkVTQU1QTEVfTk9ORSA6CisgICAgICAgIGNvbXB1dGVSZXNh
bXBsaW5nTW9kZShiaXRtYXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0
aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0
UmVjdC5oZWlnaHQoKSkpOworICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUp
IHsKKyAgICAgICAgcGFpbnQuc2V0RmlsdGVyQml0bWFwKGZhbHNlKTsKKyAgICAgICAgZHJhd1Jl
c2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0UmVjdCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm8gcmVzYW1wbGluZyBuZWNlc3NhcnksIHdlIGNh
biBqdXN0IGRyYXcgdGhlIGJpdG1hcC4gV2Ugd2FudCB0bworICAgICAgICAvLyBmaWx0ZXIgaXQg
aWYgd2UgZGVjaWRlZCB0byBkbyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBhYm92ZSwgb3IgaWYgdGhl
cmUKKyAgICAgICAgLy8gaXMgc29tZXRoaW5nIGludGVyZXN0aW5nIGdvaW5nIG9uIHdpdGggdGhl
IG1hdHJpeCAobGlrZSBhIHJvdGF0aW9uKS4KKyAgICAgICAgLy8gTm90ZTogZm9yIHNlcmlhbGl6
YXRpb24sIHdlIHdpbGwgd2FudCB0byBzdWJzZXQgdGhlIGJpdG1hcCBmaXJzdCBzbworICAgICAg
ICAvLyB3ZSBkb24ndCBzZW5kIGV4dHJhIHBpeGVscy4KKyAgICAgICAgcGFpbnQuc2V0RmlsdGVy
Qml0bWFwKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfTElORUFSKTsKKyAgICAgICAgY2FudmFzLT5k
cmF3Qml0bWFwUmVjdChiaXRtYXAsICZzcmNSZWN0LCBkZXN0UmVjdCwgJnBhaW50KTsKKyAgICB9
Cit9CisKKy8vIFRyYW5zZm9ybXMgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0aCB0aGUgZ2l2ZW4g
bWF0cml4LiBVc2VkIHRvIHNlZSBob3cgYmlnCisvLyBpbWFnZXMgd2lsbCBiZSBvbmNlIHRyYW5z
Zm9ybWVkLgorc3RhdGljIHZvaWQgVHJhbnNmb3JtRGltZW5zaW9ucyhjb25zdCBTa01hdHJpeCYg
bWF0cml4LCBmbG9hdCBzcmNXaWR0aCwgZmxvYXQgc3JjSGVpZ2h0LCBmbG9hdCogZGVzdFdpZHRo
LCBmbG9hdCogZGVzdEhlaWdodCkgeworICAgIC8vIFRyYW5zZm9ybSAzIHBvaW50cyB0byBzZWUg
aG93IGxvbmcgZWFjaCBzaWRlIG9mIHRoZSBiaXRtYXAgd2lsbCBiZS4KKyAgICBTa1BvaW50IHNy
Y19wb2ludHNbM107ICAvLyAoMCwgMCksICh3aWR0aCwgMCksICgwLCBoZWlnaHQpLgorICAgIHNy
Y19wb2ludHNbMF0uc2V0KDAsIDApOworICAgIHNyY19wb2ludHNbMV0uc2V0KFNrRmxvYXRUb1Nj
YWxhcihzcmNXaWR0aCksIDApOworICAgIHNyY19wb2ludHNbMl0uc2V0KDAsIFNrRmxvYXRUb1Nj
YWxhcihzcmNIZWlnaHQpKTsKKworICAgIC8vIE5vdyBtZWFzdXJlIHRoZSBsZW5ndGggb2YgdGhl
IHR3byB0cmFuc2Zvcm1lZCB2ZWN0b3JzIHJlbGF0aXZlIHRvIHRoZQorICAgIC8vIHRyYW5zZm9y
bWVkIG9yaWdpbiB0byBzZWUgaG93IGJpZyB0aGUgYml0bWFwIHdpbGwgYmUuIE5vdGU6IGZvciBz
a2V3cywKKyAgICAvLyB0aGlzIGlzbid0IHRoZSBiZXN0IHRoaW5nLCBidXQgd2UgZG9uJ3QgaGF2
ZSBza2V3cy4KKyAgICBTa1BvaW50IGRlc3RfcG9pbnRzWzNdOworICAgIG1hdHJpeC5tYXBQb2lu
dHMoZGVzdF9wb2ludHMsIHNyY19wb2ludHMsIDMpOworICAgICpkZXN0V2lkdGggPSBTa1NjYWxh
clRvRmxvYXQoKGRlc3RfcG9pbnRzWzFdIC0gZGVzdF9wb2ludHNbMF0pLmxlbmd0aCgpKTsKKyAg
ICAqZGVzdEhlaWdodCA9IFNrU2NhbGFyVG9GbG9hdCgoZGVzdF9wb2ludHNbMl0gLSBkZXN0X3Bv
aW50c1swXSkubGVuZ3RoKCkpOworfQorCisvLyBBIGhlbHBlciBtZXRob2QgZm9yIHRyYW5zbGF0
aW5nIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzLgorc3RhdGljIEZsb2F0UmVjdCBu
b3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBGbG9hdFJlY3Qgbm9y
bSA9IHJlY3Q7CisgICAgaWYgKG5vcm0ud2lkdGgoKSA8IDApIHsKKyAgICAgICAgbm9ybS5zZXRY
KG5vcm0ueCgpICsgbm9ybS53aWR0aCgpKTsKKyAgICAgICAgbm9ybS5zZXRXaWR0aCgtbm9ybS53
aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG5vcm0uaGVpZ2h0KCkgPCAwKSB7CisgICAgICAgIG5v
cm0uc2V0WShub3JtLnkoKSArIG5vcm0uaGVpZ2h0KCkpOworICAgICAgICBub3JtLnNldEhlaWdo
dCgtbm9ybS5oZWlnaHQoKSk7CisgICAgfQorICAgIHJldHVybiBub3JtOworfQorCit2b2lkIEZy
YW1lRGF0YTo6Y2xlYXIoKQoreworICAgIC8vIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoKSBhbGxvY2F0ZWQgfG1fZnJhbWV8IGFuZCBwYXNzZWQKKyAgICAvLyBvd25lcnNoaXAgdG8g
Qml0bWFwSW1hZ2U7IHdlIG11c3QgZGVsZXRlIGl0IGhlcmUuCisgICAgZGVsZXRlIG1fZnJhbWU7
CisgICAgbV9mcmFtZSA9IDA7CisgICAgLy8gTk9URTogV2UgcHVycG9zZWZ1bGx5IGRvbid0IHJl
c2V0IG1ldGFkYXRhIGhlcmUsIHNvIHRoYXQgZXZlbiBpZiB3ZQorICAgIC8vIHRocm93IGF3YXkg
cHJldmlvdXNseS1kZWNvZGVkIGRhdGEsIGFuaW1hdGlvbiBsb29wcyBjYW4gc3RpbGwgYWNjZXNz
CisgICAgLy8gcHJvcGVydGllcyBsaWtlIGZyYW1lIGR1cmF0aW9ucyB3aXRob3V0IHJlLWRlY29k
aW5nLgorfQorCitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Y29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0
Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UmVjdCYgZmxvYXRTcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8
IGZsb2F0U3JjUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsgIC8vIG5vdGhpbmcgdG8g
ZHJhdworCisgICAgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBU
aGlzIGlzIGEgdmVyeSBpbmV4cGVuc2l2ZSBvcGVyYXRpb24uIEl0IHdpbGwgZ2VuZXJhdGUgYSBu
ZXcgYml0bWFwIGJ1dAorICAgIC8vIGl0IHdpbGwgaW50ZXJuYWxseSByZWZlcmVuY2UgdGhlIG9s
ZCBiaXRtYXAncyBwaXhlbHMsIGFkanVzdGluZyB0aGUgcm93CisgICAgLy8gc3RyaWRlIHNvIHRo
ZSBleHRyYSBwaXhlbHMgYXBwZWFyIGFzIHBhZGRpbmcgdG8gdGhlIHN1YnNldHRlZCBiaXRtYXAu
CisgICAgU2tCaXRtYXAgc3JjU3Vic2V0OworICAgIFNrSVJlY3Qgc3JjUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZmxvYXRTcmNSZWN0KTsKKyAgICBiaXRtYXAtPmV4dHJhY3RTdWJzZXQoJnNyY1N1
YnNldCwgc3JjUmVjdCk7CisKKyAgICBTa0JpdG1hcCByZXNhbXBsZWQ7CisgICAgU2tTaGFkZXIq
IHNoYWRlcjsKKworICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRoZSBiaXRtYXAgd2lsbCBi
ZSBpbiB0aGUgZGVzdGluYXRpb24uIFRoZQorICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaXMgdGhl
IGJvdW5kcyBvZiB0aGUgcGF0dGVybiwgd2UgbmVlZCB0byB1c2UgdGhlCisgICAgLy8gbWF0cml4
IHRvIHNlZSBob3cgYml0IGl0IHdpbGwgYmUuCisgICAgZmxvYXQgZGVzdEJpdG1hcFdpZHRoLCBk
ZXN0Qml0bWFwSGVpZ2h0OworICAgIFRyYW5zZm9ybURpbWVuc2lvbnMocGF0dGVyblRyYW5zZm9y
bSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgJmRlc3RCaXRtYXBXaWR0aCwgJmRlc3RCaXRtYXBIZWlnaHQpOworCisgICAgLy8gQ29t
cHV0ZSB0aGUgcmVzYW1wbGluZyBtb2RlLgorICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7
CisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5Jc1ByaW50aW5nKCkpCisgICAg
ICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworICAgIGVsc2UgeworICAgICAgcmVzYW1w
bGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZSgqYml0bWFwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBXaWR0
aCwgZGVzdEJpdG1hcEhlaWdodCk7CisgICAgfQorCisgICAgLy8gTG9hZCB0aGUgdHJhbnNmb3Jt
IFdlYktpdCByZXF1ZXN0ZWQuCisgICAgU2tNYXRyaXggbWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0p
OworCisgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgeworICAgICAgICAv
LyBEbyBuaWNlIHJlc2FtcGxpbmcuCisgICAgICAgIFNrQml0bWFwIHJlc2FtcGxlZCA9IHNraWE6
OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKHNyY1N1YnNldCwKKyAgICAgICAgICAgIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50PihkZXN0Qml0bWFwV2lkdGgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkZXN0
Qml0bWFwSGVpZ2h0KSk7CisgICAgICAgIHNoYWRlciA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBT
aGFkZXIocmVzYW1wbGVkLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtS
ZXBlYXRfVGlsZU1vZGUpOworCisgICAgICAgIC8vIFNpbmNlIHdlIGp1c3QgcmVzaXplZCB0aGUg
Yml0bWFwLCB3ZSBuZWVkIHRvIHVuZG8gdGhlIHNjYWxlIHNldCBpbgorICAgICAgICAvLyB0aGUg
aW1hZ2UgdHJhbnNmb3JtLgorICAgICAgICBtYXRyaXguc2V0U2NhbGVYKFNrSW50VG9TY2FsYXIo
MSkpOworICAgICAgICBtYXRyaXguc2V0U2NhbGVZKFNrSW50VG9TY2FsYXIoMSkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gbmljZSByZXNhbXBsaW5nLgorICAgICAg
ICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHNyY1N1YnNldCwgU2tTaGFk
ZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKKyAgICB9
CisKKyAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJhbnNsYXRlIGl0IHN1Y2ggdGhhdCB0aGUgb3Jp
Z2luIG9mIHRoZSBwYXR0ZXJuIGlzIHRoZQorICAgIC8vIG9yaWdpbiBvZiB0aGUgZGVzdGluYXRp
b24gcmVjdCwgd2hpY2ggaXMgd2hhdCBXZWJLaXQgZXhwZWN0cy4gU2tpYSB1c2VzCisgICAgLy8g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9yaWdpbiBhcyB0aGUgYmFzZSBmb3IgdGhlIHBhdHRlci4g
SWYgV2ViS2l0IHdhbnRzCisgICAgLy8gYSBzaGlmdGVkIGltYWdlLCBpdCB3aWxsIHNoaWZ0IGl0
IGZyb20gdGhlcmUgdXNpbmcgdGhlIHBhdHRlcm5UcmFuc2Zvcm0uCisgICAgZmxvYXQgYWRqdXN0
ZWRYID0gcGhhc2UueCgpICsgZmxvYXRTcmNSZWN0LngoKSAqCisgICAgICAgICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7CisgICAgZmxv
YXQgYWRqdXN0ZWRZID0gcGhhc2UueSgpICsgZmxvYXRTcmNSZWN0LnkoKSAqCisgICAgICAgICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7
CisgICAgbWF0cml4LnBvc3RUcmFuc2xhdGUoU2tGbG9hdFRvU2NhbGFyKGFkanVzdGVkWCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgU2tGbG9hdFRvU2NhbGFyKGFkanVzdGVkWSkpOworICAg
IHNoYWRlci0+c2V0TG9jYWxNYXRyaXgobWF0cml4KTsKKworICAgIFNrUGFpbnQgcGFpbnQ7Cisg
ICAgcGFpbnQuc2V0U2hhZGVyKHNoYWRlciktPnVucmVmKCk7CisgICAgcGFpbnQuc2V0UG9ydGVy
RHVmZlhmZXJtb2RlKFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUoY29tcG9zaXRlT3Ap
KTsKKyAgICBwYWludC5zZXRGaWx0ZXJCaXRtYXAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9MSU5F
QVIpOworCisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50U2tQYWludChkZXN0
UmVjdCwgcGFpbnQpOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKy8vIEJpdG1hcEltYWdlIENsYXNzCisvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gRklYTUU6IFRoZXNlIHNob3Vs
ZCBnbyB0byBCaXRtYXBJbWFnZVNraWEuY3BwCisKK3ZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0
Zm9ybURhdGEoKQoreworICAgIC8vIFRoaXMgaXMgbm90IHVzZWQuIE9uIE1hYywgdGhlICJwbGF0
Zm9ybSIgZGF0YSBpcyBhIGNhY2hlIG9mIHNvbWUgT1MKKyAgICAvLyBzcGVjaWZpYyB2ZXJzaW9u
cyBvZiB0aGUgaW1hZ2UgdGhhdCBhcmUgY3JlYXRlZCBpcyBzb21lIGNhc2VzLiBUaGVzZQorICAg
IC8vIGFyZW4ndCBub3JtYWxseSB1c2VkLCBpdCBpcyBlcXVpdmFsZW50IHRvIGdldEhCSVRNQVAg
b24gV2luZG93cywgYW5kCisgICAgLy8gdGhlIHBsYXRmb3JtIGRhdGEgaXMgdGhlIGNhY2hlLgor
fQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKKyAgICAv
LyBTZWUgaW5pdFBsYXRmb3JtRGF0YSBhYm92ZS4KK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCkKK3sKKyAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFNwaW4gdGhlIGFuaW1hdGlvbiB0byB0aGUgY29ycmVjdCBmcmFtZSBi
ZWZvcmUgd2UgdHJ5IHRvIGRyYXcgaXQsIHNvIHdlCisgICAgLy8gZG9uJ3QgZHJhdyBhbiBvbGQg
ZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgbmVlZCB0byBkcmF3IGEgbmV3ZXIgb25lLAorICAg
IC8vIGNhdXNpbmcgZmxpY2tlciBhbmQgd2FzdGluZyBDUFUuCisgICAgc3RhcnRBbmltYXRpb24o
KTsKKworICAgIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOworICAgIGlmICghYm0pCisgICAgICAgIHJldHVybjsgIC8vIEl0J3MgdG9vIGVh
cmx5IGFuZCB3ZSBkb24ndCBoYXZlIGFuIGltYWdlIHlldC4KKworICAgIEZsb2F0UmVjdCBub3Jt
RHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CisgICAgRmxvYXRSZWN0IG5vcm1TcmNS
ZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsKKworICAgIGlmIChub3JtU3JjUmVjdC5pc0Vt
cHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47ICAvLyBOb3Ro
aW5nIHRvIGRyYXcuCisKKyAgICBwYWludFNrQml0bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
LAorICAgICAgICAgICAgICAgICAgKmJtLAorICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSW50
UmVjdChub3JtU3JjUmVjdCksCisgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdJbnRSZWN0KG5v
cm1Ec3RSZWN0KSwKKyAgICAgICAgICAgICAgICAgIFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21w
b3NpdGUoY29tcG9zaXRlT3ApKTsKK30KKworLy8gRklYTUU6IFRoZXNlIHNob3VsZCBnbyBpbnRv
IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcAorCit2b2lkIEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKQoreworICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3Qo
ZHN0UmVjdCk7CisgICAgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNS
ZWN0KTsKKworICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCisKKyAgICBwYWlu
dFNrQml0bWFwKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgbV9u
YXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ0ludFJlY3Qobm9ybVNyY1Jl
Y3QpLAorICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nSW50UmVjdChub3JtRHN0UmVjdCksCisg
ICAgICAgICAgICAgICAgICBXZWJDb3JlQ29tcG9zaXRlVG9Ta2lhQ29tcG9zaXRlKGNvbXBvc2l0
ZU9wKSk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IEJpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKK3sK
KyAgICBSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGltYWdlKGFkb3B0UmVmKG5l
dyBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYSgpKSk7CisgICAgaWYgKCFiaXRtYXAuY29weVRv
KCZpbWFnZS0+bV9uYXRpdmVJbWFnZSwgYml0bWFwLmNvbmZpZygpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26547</attachid>
            <date>2009-01-08 16:54:09 -0800</date>
            <delta_ts>2011-08-23 17:46:21 -0700</delta_ts>
            <desc>Add NativeImageSkia (PlatformImagePtr) to platform/graphics/skia</desc>
            <filename>Add-NativeImageSkia-PlatformImagePtr-to-platform-graphics-skia.patch</filename>
            <type>text/plain</type>
            <size>10757</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MmFhNGRmOTM1OGE2NTU1ODUyNmQ1Yjc4ZjRiY2VkOGQzZDdiNjhmZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MTUyZGNlLi5mYzIyMWUw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDI0IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKKwor
ICAgICAgICBBZGQgTmF0aXZlSW1hZ2VTa2lhIChQbGF0Zm9ybUltYWdlUHRyKSB0byBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzIwMAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJ
bWFnZVNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1h
Z2VTa2lhKToKKyAgICAgICAgKE5hdGl2ZUltYWdlU2tpYTo6ZGVjb2RlZFNpemUpOgorICAgICAg
ICAoTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKToKKyAgICAgICAgKE5hdGl2ZUlt
YWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgIChOYXRpdmVJbWFnZVNraWE6OnNob3Vs
ZENhY2hlUmVzYW1wbGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRp
dmVJbWFnZVNraWEuaDogQWRkZWQuCisgICAgICAgIChOYXRpdmVJbWFnZVNraWE6OnNldERhdGFD
b21wbGV0ZSk6CisgICAgICAgIChOYXRpdmVJbWFnZVNraWE6OmlzRGF0YUNvbXBsZXRlKToKKwor
MjAwOS0wMS0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgorCiAgICAgICAgIEFkZCBJbWFnZUJ1ZmZl
clNraWEgYW5kIEltYWdlU2tpYSBmaWxlcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMjAwCiAgICAgICAgIEZvciBub3cgd2UndmUgbGVmdCBCaXRt
YXBJbWFnZSBhbmQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5ZDFlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0wLDAgKzEsMTA5
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29w
ZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNr
aWFVdGlscy5oIgorCitOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgpCisgICAgOiBt
X2lzRGF0YUNvbXBsZXRlKGZhbHNlKSwKKyAgICAgIG1fbGFzdFJlcXVlc3RTaXplKDAsIDApLAor
ICAgICAgbV9yZXNpemVSZXF1ZXN0cygwKQoreworfQorCitpbnQgTmF0aXZlSW1hZ2VTa2lhOjpk
ZWNvZGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFNpemUoKSArIG1fcmVzaXplZElt
YWdlLmdldFNpemUoKTsKK30KKworYm9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRt
YXAoaW50IHcsIGludCBoKSBjb25zdAoreworICAgIGlmIChtX2xhc3RSZXF1ZXN0U2l6ZS53aWR0
aCgpID09IHcgJiYgbV9sYXN0UmVxdWVzdFNpemUuaGVpZ2h0KCkgPT0gaCkKKyAgICAgICAgbV9y
ZXNpemVSZXF1ZXN0cysrOworICAgIGVsc2UgeworICAgICAgICBtX2xhc3RSZXF1ZXN0U2l6ZSA9
IFdlYkNvcmU6OkludFNpemUodywgaCk7CisgICAgICAgIG1fcmVzaXplUmVxdWVzdHMgPSAwOwor
ICAgIH0KKworICAgIHJldHVybiBtX3Jlc2l6ZWRJbWFnZS53aWR0aCgpID09IHcgJiYgbV9yZXNp
emVkSW1hZ2UuaGVpZ2h0KCkgPT0gaDsKK30KKworLy8gRklYTUU6IGRvbid0IGNhY2hlIHdoZW4g
aW1hZ2UgaXMgaW4tcHJvZ3Jlc3MuCisKK1NrQml0bWFwIE5hdGl2ZUltYWdlU2tpYTo6cmVzaXpl
ZEJpdG1hcChpbnQgdywgaW50IGgpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVzaXplZEltYWdlLndp
ZHRoKCkgIT0gdyB8fCBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSAhPSBoKQorICAgICAgICBtX3Jl
c2l6ZWRJbWFnZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKCp0aGlzLCBza2lhOjpJ
bWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCk7CisKKyAgICByZXR1cm4gbV9y
ZXNpemVkSW1hZ2U7Cit9CisKK2Jvb2wgTmF0aXZlSW1hZ2VTa2lhOjpzaG91bGRDYWNoZVJlc2Ft
cGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRlc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0U3Vic2V0SGVpZ2h0KSBjb25zdAoreworICAg
IC8vIFdlIGNhbiBub3QgY2FjaGUgaW5jb21wbGV0ZSBmcmFtZXMuIFRoaXMgbWlnaHQgYmUgYSBn
b29kIG9wdGltaXphdGlvbiBpbgorICAgIC8vIHRoZSBmdXR1cmUsIHdlcmUgd2Uga25vdyBob3cg
bXVjaCBvZiB0aGUgZnJhbWUgaGFzIGJlZW4gZGVjb2RlZCwgc28gd2hlbgorICAgIC8vIHdlIGlu
Y3JlbWVudGFsbHkgZHJhdyBtb3JlIG9mIHRoZSBpbWFnZSwgd2Ugb25seSBoYXZlIHRvIHJlc2Ft
cGxlIHRoZQorICAgIC8vIHBhcnRzIHRoYXQgYXJlIGNoYW5nZWQuCisgICAgaWYgKCFtX2lzRGF0
YUNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgZGVzdGlu
YXRpb24gYml0bWFwIGlzIHNtYWxsLCB3ZSdsbCBhbHdheXMgYWxsb3cgY2FjaGluZywgc2luY2UK
KyAgICAvLyB0aGVyZSBpcyBub3QgdmVyeSBtdWNoIHBlbmFsdHkgZm9yIGNvbXB1dGluZyBpdCBh
bmQgaXQgbWF5IGNvbWUgaW4gaGFuZHkuCisgICAgc3RhdGljIGNvbnN0IGludCBrU21hbGxCaXRt
YXBTaXplID0gNDA5NjsKKyAgICBpZiAoZGVzdFdpZHRoICogZGVzdEhlaWdodCA8PSBrU21hbGxC
aXRtYXBTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmICJ0b28gbWFueSIg
cmVxdWVzdHMgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoaXMgYml0bWFwLCB3ZSBhc3N1bWUgdGhhdAor
ICAgIC8vIG1hbnkgbW9yZSB3aWxsIGJlIG1hZGUgYXMgd2VsbCwgYW5kIHdlJ2xsIGdvIGFoZWFk
IGFuZCBjYWNoZSBpdC4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYW55UmVxdWVzdFRocmVzaG9s
ZCA9IDQ7CisgICAgaWYgKG1fbGFzdFJlcXVlc3RTaXplLndpZHRoKCkgPT0gZGVzdFdpZHRoICYm
CisgICAgICAgIG1fbGFzdFJlcXVlc3RTaXplLmhlaWdodCgpID09IGRlc3RIZWlnaHQpIHsKKyAg
ICAgICAgaWYgKG1fcmVzaXplUmVxdWVzdHMgPj0ga01hbnlSZXF1ZXN0VGhyZXNob2xkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBhIGRp
ZmZlcmVudCBzaXplIGlzIGJlaW5nIHJlcXVlc3RlZCwgY291bnQgdGhpcyBhcyBhIHF1ZXJ5Cisg
ICAgICAgIC8vIChoYXNSZXNpemVkQml0bWFwKSBhbmQgcmVzZXQgdGhlIGNvdW50ZXIuCisgICAg
ICAgIG1fbGFzdFJlcXVlc3RTaXplID0gV2ViQ29yZTo6SW50U2l6ZShkZXN0V2lkdGgsIGRlc3RI
ZWlnaHQpOworICAgICAgICBtX3Jlc2l6ZVJlcXVlc3RzID0gMDsKKyAgICB9CisKKyAgICAvLyBP
dGhlcndpc2UsIHVzZSB0aGUgaGV1cmlzdGljIHRoYXQgaWYgbW9yZSB0aGFuIDEvNCBvZiB0aGUg
aW1hZ2UgaXMKKyAgICAvLyByZXF1ZXN0ZWQsIGl0J3Mgd29ydGggY2FjaGluZy4KKyAgICBpbnQg
ZGVzdFNpemUgPSBkZXN0V2lkdGggKiBkZXN0SGVpZ2h0OworICAgIGludCBkZXN0U3Vic2V0U2l6
ZSA9IGRlc3RTdWJzZXRXaWR0aCAqIGRlc3RTdWJzZXRIZWlnaHQ7CisgICAgcmV0dXJuIGRlc3RT
aXplIC8gNCA8IGRlc3RTdWJzZXRTaXplOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjU5NDcyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBO
YXRpdmVJbWFnZVNraWFfaAorI2RlZmluZSBOYXRpdmVJbWFnZVNraWFfaAorCisjaW5jbHVkZSAi
U2tCaXRtYXAuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKy8vIFRoaXMgb2JqZWN0IGlzIHVz
ZWQgYXMgdGhlICJuYXRpdmUgaW1hZ2UiIGluIG91ciBwb3J0LiBXaGVuIFdlYktpdCB1c2VzCisv
LyAiTmF0aXZlSW1hZ2VQdHIiLCBpdCBpcyBhIHBvaW50ZXIgdG8gdGhpcyB0eXBlLiBJdCBpcyBh
biBTa0JpdG1hcCwgYnV0IGFsc28KKy8vIHN0b3JlcyBhIGNhY2hlZCByZXNpemVkIGltYWdlLgor
Y2xhc3MgTmF0aXZlSW1hZ2VTa2lhIDogcHVibGljIFNrQml0bWFwIHsKK3B1YmxpYzoKKyAgICBO
YXRpdmVJbWFnZVNraWEoKTsKKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBv
ZiBpbWFnZSBkYXRhLiBUaGlzIGluY2x1ZGVzIHRoZSBjYWNoZWQKKyAgICAvLyByZXNpemVkIHZl
cnNpb24gaWYgdGhlcmUgaXMgb25lLgorICAgIGludCBkZWNvZGVkU2l6ZSgpIGNvbnN0OworCisg
ICAgLy8gU2V0cyB0aGUgZGF0YSBjb21wbGV0ZSBmbGFnLiBUaGlzIGlzIGNhbGxlZCBieSB0aGUg
aW1hZ2UgZGVjb2RlciB3aGVuCisgICAgLy8gYWxsIGRhdGEgaXMgY29tcGxldGUsIGFuZCB1c2Vk
IGJ5IHVzIHRvIGtub3cgd2hldGhlciB3ZSBjYW4gY2FjaGUKKyAgICAvLyByZXNpemVkIGltYWdl
cy4KKyAgICB2b2lkIHNldERhdGFDb21wbGV0ZSgpIHsgbV9pc0RhdGFDb21wbGV0ZSA9IHRydWU7
IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXJlIGltYWdlIGhhcyBiZWVuIGRl
Y29kZWQuCisgICAgYm9vbCBpc0RhdGFDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEYXRh
Q29tcGxldGU7IH0KKworICAgIC8vIFdlIGNhbiBrZWVwIGEgcmVzaXplZCB2ZXJzaW9uIG9mIHRo
ZSBiaXRtYXAgY2FjaGVkIG9uIHRoaXMgb2JqZWN0LgorICAgIC8vIFRoaXMgZnVuY3Rpb24gd2ls
bCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZQorICAgIC8v
IGdpdmVuIGltYWdlIHN1YnNldCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb25zLgorICAgIGJvb2wg
aGFzUmVzaXplZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OworCisgICAgLy8g
VGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGluZyByZXNpemVkIGltYWdlLCBvciBnZW5lcmF0ZSBh
IG5ldyBvbmUgb2YKKyAgICAvLyB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHN0b3JlIGl0IGluIHRo
ZSBjYWNoZS4gU3Vic2V0dGVkIGltYWdlcyBjYW4gbm90CisgICAgLy8gYmUgY2FjaGVkIHVubGVz
cyB0aGUgc3Vic2V0IGlzIHRoZSBlbnRpcmUgYml0bWFwLgorICAgIFNrQml0bWFwIHJlc2l6ZWRC
aXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gcmVzaXplIG9wZXJhdGlvbiBzaG91bGQgZWl0aGVyIHJlc2l6ZSB0aGUg
d2hvbGUKKyAgICAvLyBpbWFnZSBhbmQgY2FjaGUgaXQsIG9yIHJlc2l6ZSBqdXN0IHRoZSBwYXJ0
IGl0IG5lZWRzIGFuZCB0aHJvdyB0aGUgcmVzdWx0CisgICAgLy8gYXdheS4KKyAgICAvLworICAg
IC8vIE9uIHRoZSBvbmUgaGFuZCwgaWYgb25seSBhIHNtYWxsIHN1YnNldCBpcyBkZXNpcmVkLCB0
aGVuIHdlIHdpbGwgd2FzdGUgYQorICAgIC8vIGxvdCBvZiB0aW1lIHJlc2FtcGxpbmcgdGhlIGVu
dGlyZSB0aGluZywgc28gd2Ugb25seSB3YW50IHRvIGRvIGV4YWN0bHkKKyAgICAvLyB3aGF0J3Mg
cmVxdWlyZWQuIE9uIHRoZSBvdGhlciBoYW5kLCByZXNhbXBsaW5nIHRoZSBlbnRpcmUgYml0bWFw
IGlzCisgICAgLy8gYmV0dGVyIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIHVzaW5nIGl0IG1vcmUgdGhh
biBvbmNlIChsaWtlIGEgYml0bWFwCisgICAgLy8gc2Nyb2xsaW5nIG9uIGFuZCBvZmYgdGhlIHNj
cmVlbi4gU2luY2Ugd2Ugb25seSBjYWNoZSB3aGVuIGRvaW5nIHRoZQorICAgIC8vIGVudGlyZSB0
aGluZywgaXQncyBiZXN0IHRvIGp1c3QgZG8gaXQgdXAgZnJvbnQuCisgICAgYm9vbCBzaG91bGRD
YWNoZVJlc2FtcGxpbmcoaW50IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZGVzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGVzdFN1YnNldFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0
U3Vic2V0SGVpZ2h0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVu
IHRoZSBkYXRhIGlzIGNvbXBsZXRlLiBCZWZvcmUgdGhlIGVudGlyZSBpbWFnZSBoYXMKKyAgICAv
LyBsb2FkZWQsIHdlIGRvIG5vdCB3YW50IHRvIGNhY2hlIGEgcmVzaXplLgorICAgIGJvb2wgbV9p
c0RhdGFDb21wbGV0ZTsKKworICAgIC8vIFRoZSBjYWNoZWQgYml0bWFwLiBUaGlzIHdpbGwgYmUg
ZW1wdHkoKSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgaW1hZ2UuCisgICAgbXV0YWJsZSBTa0JpdG1h
cCBtX3Jlc2l6ZWRJbWFnZTsKKworICAgIC8vIFJlZmVyZW5jZXMgaG93IG1hbnkgdGltZXMgdGhh
dCB0aGUgaW1hZ2Ugc2l6ZSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yCisgICAgLy8gdGhlIGxhc3Qg
c2l6ZS4KKyAgICAvLworICAgIC8vIEV2ZXJ5IHRpbWUgd2UgZ2V0IGEgcmVxdWVzdCwgaWYgaXQg
bWF0Y2hlcyB0aGUgbV9sYXN0UmVxdWVzdFNpemUsIHdlJ2xsCisgICAgLy8gaW5jcmVtZW50IHRo
ZSBjb3VudGVyLCBhbmQgaWYgbm90LCB3ZSdsbCByZXNldCB0aGUgY291bnRlciBhbmQgc2F2ZSB0
aGUKKyAgICAvLyBzaXplLgorICAgIC8vCisgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gc2VlIGlm
IG1hbnkgcmVxdWVzdHMgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoZSBzYW1lCisgICAgLy8gcmVzaXpl
ZCBpbWFnZSwgd2Uga25vdyB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBjYWNoZSBpdCwgZXZlbiBp
ZiBhbGwgb2YKKyAgICAvLyB0aG9zZSByZXF1ZXN0cyBpbmRpdmlkdWFsbHkgYXJlIHNtYWxsIGFu
ZCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJlIGNhY2hlZC4KKyAgICBtdXRhYmxlIFdlYkNvcmU6Oklu
dFNpemUgbV9sYXN0UmVxdWVzdFNpemU7CisgICAgbXV0YWJsZSBpbnQgbV9yZXNpemVSZXF1ZXN0
czsKK307CisKKyNlbmRpZiAgLy8gTmF0aXZlSW1hZ2VTa2lhX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26549</attachid>
            <date>2009-01-08 17:01:46 -0800</date>
            <delta_ts>2009-01-08 17:01:46 -0800</delta_ts>
            <desc>Add ImageSourceSkia to platform/graphics/skia</desc>
            <filename>Add-ImageSourceSkia-to-platform-graphics-skia.patch</filename>
            <type>text/plain</type>
            <size>13687</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Nzg0MzVhYzU5YTkyNWQ1NWY2NzFjMDA4ZTU2NDkyMDVhYjM3NDBiZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYjcwNjliLi5hZmEzMDE4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKKyAg
ICAgICAgQWRkIEltYWdlU291cmNlU2tpYSB0byBwbGF0Zm9ybS9ncmFwaGljcy9za2lhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIwMAorICAgICAg
ICAKKyAgICAgICAgSW1hZ2VTb3VyY2VTa2lhIGlzIG1vc3RseSBhIGhhY2sgdG8gc3VwcG9ydCBv
dXIKKyAgICAgICAgSUNPIGRlY29kZXIgbW9kZWwuICBTZWUgSW1hZ2VTb3VyY2VTa2lhLmggZm9y
IG1vcmUKKyAgICAgICAgZXhwbGFuYXRpb24uICBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBtYWtl
IG91ciBJQ08KKyAgICAgICAgZGVjb2RlciBsYXp5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaDogbWFyayBtX2RlY29kZXIgYXMgcHJvdGVjdGVkCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1h
Z2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlU2tp
YTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRl
bnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTb3VyY2VTa2lh
Lmg6IEFkZGVkLgorCisyMDA5LTAxLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKICAgICAgICAg
QWRkIE5hdGl2ZUltYWdlU2tpYSAoUGxhdGZvcm1JbWFnZVB0cikgdG8gcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMyMDAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IGYwZjNl
NjguLjQ2ZTJjZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAg
LTEzMCw3ICsxMzAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QpOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxw
aGEuCiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7IC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBmcmFtZSBpcyBjb21wbGV0ZWx5IGRlY29kZWQuCiAKLXByaXZhdGU6CisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgcHJvdGVjdGVkIG9ubHkgdG8gYWxsb3cgSW1hZ2VTb3VyY2VTa2lh
IHRvIHNldCBJQ08gZGVjb2RlcgorICAgIC8vIHdpdGggYSBwcmVmZXJyZWQgc2l6ZS4gU2VlIElt
YWdlU291cmNlU2tpYS5oIGZvciBkaXNjdXNzaW9uLgorcHJvdGVjdGVkOgogICAgIE5hdGl2ZUlt
YWdlU291cmNlUHRyIG1fZGVjb2RlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGQyN2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlU2tpYS5oIgorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5o
IgorI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiU2tCaXRtYXAuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29u
c3QgVmVjdG9yPGNoYXI+JiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIHByZWZlcnJlZEljb25TaXplKQoreworICAgIC8vIFdlIG5lZWQgYXQgbGVhc3Qg
NCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdp
dGguCisgICAgaW50IGxlbmd0aCA9IGRhdGEuc2l6ZSgpOworICAgIGlmIChsZW5ndGggPCA0KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHVDb250ZW50cyA9
IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBjb250
ZW50cyA9IGRhdGEuZGF0YSgpOworCisgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5
KS4KKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQorICAgICAgICBy
ZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOworCisgICAgLy8gVGVzdCBmb3IgUE5HLgorICAg
IGlmICh1Q29udGVudHNbMF09PTB4ODkgJiYKKyAgICAgICAgdUNvbnRlbnRzWzFdPT0weDUwICYm
CisgICAgICAgIHVDb250ZW50c1syXT09MHg0RSAmJgorICAgICAgICB1Q29udGVudHNbM109PTB4
NDcpCisgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBKUEVH
CisgICAgaWYgKHVDb250ZW50c1swXT09MHhGRiAmJgorICAgICAgICB1Q29udGVudHNbMV09PTB4
RDggJiYKKyAgICAgICAgdUNvbnRlbnRzWzJdPT0weEZGKQorICAgICAgICByZXR1cm4gbmV3IEpQ
RUdJbWFnZURlY29kZXIoKTsKKworICAgIC8vIEJNUAorICAgIGlmIChzdHJuY21wKGNvbnRlbnRz
LCAiQk0iLCAyKSA9PSAwKQorICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcigpOwor
CisgICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEg
Mi1ieXRlIDEuCisgICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDIt
Ynl0ZSAyLgorICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQp
IHx8CisgICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpCisg
ICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKHByZWZlcnJlZEljb25TaXplKTsKKyAg
IAorICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+
PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApCisgICAgICAgIHJl
dHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBr
bm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKworSW1hZ2VTb3Vy
Y2U6OkltYWdlU291cmNlKCkKKyAgICA6IG1fZGVjb2RlcigwKQore30KKworSW1hZ2VTb3VyY2U6
On5JbWFnZVNvdXJjZSgpCit7CisgICAgY2xlYXIodHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3Vy
Y2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgLy8gVE9ETyhkYXJp
bik6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSB8ZGF0YXwgYW5kIHxhbGxEYXRhUmVj
ZWl2ZWR8IHBhcmFtcy4KKworICAgIGlmIChkZXN0cm95QWxsKSB7CisgICAgICAgIGRlbGV0ZSBt
X2RlY29kZXI7CisgICAgICAgIG1fZGVjb2RlciA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXItPmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlh
bGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VT
b3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
K3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAv
LyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGlu
c3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1
ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUs
IG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIGlmICghbV9kZWNv
ZGVyKQorICAgICAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKGRhdGEtPmJ1ZmZlcigpLCBJ
bnRTaXplKCkpOworCisgICAgLy8gQ3JlYXRlRGVjb2RlciB3aWxsIHJldHVybiBOVUxMIGlmIHRo
ZSBkZWNvZGVyIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBQbHVzLAorICAgIC8vIHdlIHNob3VsZCBu
b3Qgc2VuZCBtb3JlIGRhdGEgdG8gYSBkZWNvZGVyIHdoaWNoIGhhcyBhbHJlYWR5IGRlY2lkZWQg
aXQKKyAgICAvLyBoYXMgZmFpbGVkLgorICAgIGlmICghbV9kZWNvZGVyIHx8IG1fZGVjb2Rlci0+
ZmFpbGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNpemUgSW1hZ2VT
b3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOworfQorCitJbnRT
aXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3QKK3sKKyAgICAv
LyBUT0RPKGJyZXR0dykgZG8gd2UgbmVlZCBhbnl0aGluZyBoZXJlPworICAgIHJldHVybiBzaXpl
KCk7Cit9CisKK2ludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAo
IW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworCisgICAgcmV0dXJu
IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6
ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBtX2RlY29kZXItPmZhaWxlZCgpID8gMCA6IG1fZGVjb2Rlci0+ZnJh
bWVDb3VudCgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVB
dEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBjYW4gaGF2ZSBOVUxMIGJ5dGVz
IGV2ZW4gd2hlbiBpdCBpcyBtYXJrZWQgYXMKKyAgICAvLyBub24tZW1wdHkuIEl0IHNlZW1zICJG
cmFtZUVtcHR5IiBpcyBvbmx5IHNldCBiZWZvcmUgdGhlIGZyYW1lIGhhcyBiZWVuCisgICAgLy8g
aW5pdGlhbGl6ZWQuIElmIGl0IGlzIGRlY29kZWQgYW5kIGl0IGhhcHBlbnMgdG8gYmUgZW1wdHks
IGl0IHdpbGwgYmUKKyAgICAvLyBtYXJrZWQgYXMgIkZyYW1lQ29tcGxldGUiIGJ1dCB3aWxsIHN0
aWxsIGhhdmUgTlVMTCBieXRlcy4KKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rl
ci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXIt
PnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBDb3B5IHRoZSBiaXRtYXAuICBUaGUgcGl4ZWwgZGF0YSBpcyByZWZjb3VudGVk
IGludGVybmFsbHkgYnkgU2tCaXRtYXAsIHNvCisgICAgLy8gdGhpcyBkb2Vzbid0IGNvc3QgbXVj
aC4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IHRoZSBCaXRtYXBJbWFnZQorICAgIC8v
IGFuZCBmcmVlZCBpbiBGcmFtZURhdGE6OmNsZWFyKCkuCisgICAgcmV0dXJuIG5ldyBOYXRpdmVJ
bWFnZVNraWEoYnVmZmVyLT5iaXRtYXAoKSk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gYnVmZmVyICYmIGJ1
ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlOworfQorCitmbG9h
dCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAg
IGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJHQkEzMkJ1ZmZlciog
YnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICgh
YnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAw
IGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseQorICAgIC8vIGFzIHBv
c3NpYmxlLiAgV2UgZm9sbG93IFdpbklFJ3MgYmVoYXZpb3IgYW5kIHVzZSBhIGR1cmF0aW9uIG9m
IDEwMCBtcworICAgIC8vIGZvciBhbnkgZnJhbWVzIHRoYXQgc3BlY2lmeSBhIGR1cmF0aW9uIG9m
IDw9IDUwIG1zLiAgU2VlCisgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDEzPiBvciBSYWRhciA0MDUxMzg5IGZvcgorICAgIC8vIG1vcmUuCisgICAgY29u
c3QgZmxvYXQgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworICAgIHJl
dHVybiAoZHVyYXRpb24gPCAwLjA1MWYpID8gMC4xMDBmIDogZHVyYXRpb247Cit9CisKK2Jvb2wg
SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBp
ZiAoIW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5zdXBwb3J0c0FscGhhKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgpOworfQorCit2b2lkIEltYWdlU291cmNlU2tp
YTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsbERhdGFSZWNlaXZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFNpemUmIHByZWZlcnJlZEljb25TaXplKQoreworICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKGRhdGEtPmJ1ZmZlcigpLCBwcmVm
ZXJyZWRJY29uU2l6ZSk7CisKKyAgICBJbWFnZVNvdXJjZTo6c2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIQorICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlU291cmNlU2tpYS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291
cmNlU2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjRhOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTb3Vy
Y2VTa2lhLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZVNvdXJjZVNraWEgOiBwdWJsaWMgSW1h
Z2VTb3VyY2UgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzIGEgaGFjayB0
byBzdXBwb3J0IENocm9taXVtJ3MgSUNPIGRlY29kZXIKKyAgICAvLyBDdXJyZW50bHkgb3VyIElD
TyBkZWNvZGVyIGRlY29kZXMgYWxsIGRhdGEgZHVyaW5nIHNldERhdGEoKSBpbnN0ZWFkIG9mCisg
ICAgLy8gYmVpbmcgbGF6eS4gIEluIGFkZGl0aW9uLCBpdCBvbmx5IGRlY29kZXMgb25lIGZyYW1l
IChjbG9zZXN0IHRvIHRoZSBzaXplCisgICAgLy8gcGFzc2VkIHRvIHRoZSBkZWNvZGVyIGR1cmlu
ZyBjcmVhdGVEZWNvZGVyLCBjYWxsZWQgZnJvbSBzZXREYXRhKSBhbmQKKyAgICAvLyBkaXNjYXJk
cyBhbGwgb3RoZXIgZGF0YSBpbiB0aGUgZmlsZS4KKyAgICAvLworICAgIC8vIFRvIGZpeCB0aGlz
IHdpbGwgcmVxdWlyZSBmaXhpbmcgdGhlIElDTyBkZWNvZGVyIHRvIGJlIGxhenksIG9yIHRvIGRl
Y29kZQorICAgIC8vIGFsbCBmcmFtZXMuICBBcHBsZSdzIGRlY29kZXJzIChJbWFnZUlPKSBkZWNv
ZGUgYWxsIGZyYW1lcywgYW5kIHJldHVybgorICAgIC8vIHRoZW0gYWxsIHNvcnRlZCBpbiBkZWNy
ZWFzaW5nIHNpemUuICBXZWJDb3JlIGFsd2F5cyBkcmF3cyB0aGUgZmlyc3QgZnJhbWUuCisgICAg
Ly8KKyAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbC1wdXJwb3NlIHJvdXRpbmUgZm9yIHRoZSBmYXZp
Y29uIGRlY29kZXIsIHdoaWNoIGlzIHVzZWQKKyAgICAvLyB0byBzcGVjaWZ5IGEgcGFydGljdWxh
ciBpY29uIHNpemUgZm9yIHRoZSBJQ09JbWFnZURlY29kZXIgdG8gcHJlZmVyCisgICAgLy8gZGVj
b2RpbmcuICBOb3RlIHRoYXQgbm90IGFsbCBmYXZpY29ucyBhcmUgSUNPcywgc28gdGhpcyB3b24n
dAorICAgIC8vIG5lY2Vzc2FyaWx5IGRvIGFueXRoaW5nIGRpZmZlcmVudGx5IHRoYW4gSW1hZ2VT
b3VyY2U6OnNldERhdGEoKS4KKyAgICAvLworICAgIC8vIFBhc3NpbmcgYW4gZW1wdHkgSW50U2l6
ZSBmb3IgfHByZWZlcnJlZEljb25TaXplfCBoZXJlIGlzIGV4YWN0bHkKKyAgICAvLyBlcXVpdmFs
ZW50IHRvIGp1c3QgY2FsbGluZyBJbWFnZVNvdXJjZTo6c2V0RGF0YSgpLiAgU2VlIGFsc28gY29t
bWVudHMgaW4KKyAgICAvLyBJQ09JbWFnZURlY29kZXIuY3BwLgorICAgIHZvaWQgc2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEsCisgICAgICAgICAgICAgICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVk
LAorICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSk7Cit9
OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26551</attachid>
            <date>2009-01-08 17:16:50 -0800</date>
            <delta_ts>2009-01-08 17:16:50 -0800</delta_ts>
            <desc>Add PathSkia and PatternSkia implementations to WebCore</desc>
            <filename>Add-PathSkia-and-PatternSkia-implementations-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>13584</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZDMzYTdlYmFlNTU5NmM2NGYyYjU3MjVjNzRhYWMwOGU5M2RhZTFjMwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZmEzMDE4Li41OTZhNDBm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDQxIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKKyAg
ICAgICAgQWRkIFBhdGhTa2lhIGFuZCBQYXR0ZXJuU2tpYSBpbXBsZW1lbnRhdGlvbnMgdG8gV2Vi
Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMy
MDAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y29udGFp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmJvdW5kaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjptb3ZlVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkTGluZVRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmFkZFF1YWRDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJlemll
ckN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFk
ZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmFkZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFBhdGhQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5k
aW5nQm94Rm9yQ3VycmVudFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNr
aWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRlclJ1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKToKKworMjAwOS0wMS0wOCAg
RGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgorCiAgICAgICAgIEFkZCBJbWFnZVNvdXJjZVNraWEgdG8gcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMyMDAKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BhdGhTa2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmE3
OTFhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bh
dGhTa2lhLmNwcApAQCAtMCwwICsxLDI5OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDA4LCBHb29n
bGUgSW5jLgorLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLyAKKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vIAorLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhdGguaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJTa1BhdGgu
aCIKKyNpbmNsdWRlICJTa1JlZ2lvbi5oIgorI2luY2x1ZGUgIlNraWFVdGlscy5oIgorCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRoOjpQ
YXRoKCkKK3sKKyAgICBtX3BhdGggPSBuZXcgU2tQYXRoOworfQorCitQYXRoOjpQYXRoKGNvbnN0
IFBhdGgmIG90aGVyKQoreworICAgIG1fcGF0aCA9IG5ldyBTa1BhdGgoKm90aGVyLm1fcGF0aCk7
Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOworfQorCitQYXRoJiBQ
YXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgKm1fcGF0aCA9ICpvdGhl
ci5tX3BhdGg7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIFBhdGg6OmlzRW1wdHkoKSBj
b25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmlzRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjpj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gU2tQYXRoQ29udGFpbnNQb2ludChtX3BhdGgsIHBvaW50LAorICAgICAgcnVs
ZSA9PSBSVUxFX05PTlpFUk8gPyBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBlIDogU2tQYXRoOjpr
RXZlbk9kZF9GaWxsVHlwZSk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3BhdGgtPm9mZnNldChXZWJDb3JlRmxvYXRUb1NrU2NhbGFy
KHNpemUud2lkdGgoKSksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQoKSkpOwor
fQorCitGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAgICBTa1JlY3Qg
cmVjdDsKKyAgICBtX3BhdGgtPmNvbXB1dGVCb3VuZHMoJnJlY3QsIFNrUGF0aDo6a0V4YWN0X0Jv
dW5kc1R5cGUpOworICAgIHJldHVybiByZWN0OworfQorCit2b2lkIFBhdGg6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3BhdGgtPm1vdmVUbyhwb2ludCk7Cit9CisK
K3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIG1f
cGF0aC0+bGluZVRvKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgZXApCit7CisgICAgbV9wYXRoLT5x
dWFkVG8oY3AsIGVwKTsKK30KKwordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZXAp
Cit7CisgICAgbV9wYXRoLT5jdWJpY1RvKHAxLCBwMiwgZXApOworfQorCit2b2lkIFBhdGg6OmFk
ZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
cmFkaXVzKQoreworICAgIG1fcGF0aC0+YXJjVG8ocDEsIHAyLCBXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKHJhZGl1cykpOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgbV9w
YXRoLT5jbG9zZSgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBw
LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgYW50aWNsb2Nrd2lzZSkgeworICAg
IFNrU2NhbGFyIGN4ID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwLngoKSk7CisgICAgU2tTY2Fs
YXIgY3kgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHAueSgpKTsKKyAgICBTa1NjYWxhciByYWRp
dXMgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHIpOworCisgICAgU2tSZWN0IG92YWw7CisgICAg
b3ZhbC5zZXQoY3ggLSByYWRpdXMsIGN5IC0gcmFkaXVzLCBjeCArIHJhZGl1cywgY3kgKyByYWRp
dXMpOworCisgICAgZmxvYXQgc3dlZXAgPSBlYSAtIHNhOworICAgIC8vIGNoZWNrIGZvciBhIGNp
cmNsZQorICAgIGlmIChzd2VlcCA+PSAyICogcGlGbG9hdCB8fCBzd2VlcCA8PSAtMiAqIHBpRmxv
YXQpCisgICAgICAgIG1fcGF0aC0+YWRkT3ZhbChvdmFsKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
U2tTY2FsYXIgc3RhcnREZWdyZWVzID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzYSAqIDE4MCAv
IHBpRmxvYXQpOworICAgICAgICBTa1NjYWxhciBzd2VlcERlZ3JlZXMgPSBXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKHN3ZWVwICogMTgwIC8gcGlGbG9hdCk7CisKKyAgICAgICAgLy8gQ291bnRlcmNs
b2Nrd2lzZSBhcmNzIHNob3VsZCBiZSBkcmF3biB3aXRoIG5lZ2F0aXZlIHN3ZWVwcywgd2hpbGUK
KyAgICAgICAgLy8gY2xvY2t3aXNlIGFyY3Mgc2hvdWxkIGJlIGRyYXduIHdpdGggcG9zaXRpdmUg
c3dlZXBzLiBDaGVjayB0byBzZWUKKyAgICAgICAgLy8gaWYgdGhlIHNpdHVhdGlvbiBpcyByZXZl
cnNlZCBhbmQgY29ycmVjdCBpdCBieSBhZGRpbmcgb3Igc3VidHJhY3RpbmcKKyAgICAgICAgLy8g
YSBmdWxsIGNpcmNsZQorICAgICAgICBpZiAoYW50aWNsb2Nrd2lzZSAmJiBzd2VlcERlZ3JlZXMg
PiAwKSB7CisgICAgICAgICAgICBzd2VlcERlZ3JlZXMgLT0gU2tJbnRUb1NjYWxhcigzNjApOwor
ICAgICAgICB9IGVsc2UgaWYgKCFhbnRpY2xvY2t3aXNlICYmIHN3ZWVwRGVncmVlcyA8IDApIHsK
KyAgICAgICAgICAgIHN3ZWVwRGVncmVlcyArPSBTa0ludFRvU2NhbGFyKDM2MCk7CisgICAgICAg
IH0KKworICAgICAgICBtX3BhdGgtPmFyY1RvKG92YWwsIHN0YXJ0RGVncmVlcywgc3dlZXBEZWdy
ZWVzLCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIG1fcGF0aC0+YWRkUmVjdChyZWN0KTsKK30KKwordm9pZCBQYXRo
OjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3BhdGgtPmFkZE92
YWwocmVjdCk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xlYXIoKQoreworICAgIG1fcGF0aC0+cmVzZXQo
KTsKK30KKworc3RhdGljIEZsb2F0UG9pbnQqIGNvbnZlcnRQYXRoUG9pbnRzKEZsb2F0UG9pbnQg
ZHN0W10sIGNvbnN0IFNrUG9pbnQgc3JjW10sIGludCBjb3VudCkKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgZHN0W2ldLnNldFgoU2tTY2FsYXJUb0Zs
b2F0KHNyY1tpXS5mWCkpOworICAgICAgICBkc3RbaV0uc2V0WShTa1NjYWxhclRvRmxvYXQoc3Jj
W2ldLmZZKSk7CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKK3ZvaWQgUGF0aDo6YXBwbHko
dm9pZCogaW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBT
a1BhdGg6Okl0ZXIgaXRlcigqbV9wYXRoLCBmYWxzZSk7CisgICAgU2tQb2ludCBwdHNbNF07CisK
KyAgICBQYXRoRWxlbWVudCBwYXRoRWxlbWVudDsKKyAgICBGbG9hdFBvaW50IHBhdGhQb2ludHNb
M107CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN3aXRjaCAoaXRlci5uZXh0KHB0cykpIHsK
KyAgICAgICAgY2FzZSBTa1BhdGg6OmtNb3ZlX1ZlcmI6CisgICAgICAgICAgICBwYXRoRWxlbWVu
dC50eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBhdGhFbGVtZW50
LnBvaW50cyA9IGNvbnZlcnRQYXRoUG9pbnRzKHBhdGhQb2ludHMsICZwdHNbMF0sIDEpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjprTGluZV9WZXJiOgorICAgICAg
ICAgICAgcGF0aEVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7CisgICAg
ICAgICAgICBwYXRoRWxlbWVudC5wb2ludHMgPSBjb252ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRz
LCAmcHRzWzFdLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6
a1F1YWRfVmVyYjoKKyAgICAgICAgICAgIHBhdGhFbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFk
ZFF1YWRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICBwYXRoRWxlbWVudC5wb2ludHMgPSBjb252
ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRzLCAmcHRzWzFdLCAyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICBwYXRoRWxl
bWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ7CisgICAgICAgICAgICBwYXRo
RWxlbWVudC5wb2ludHMgPSBjb252ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRzLCAmcHRzWzFdLCAz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6
CisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7
CisgICAgICAgICAgICBwYXRoRWxlbWVudC5wb2ludHMgPSBjb252ZXJ0UGF0aFBvaW50cyhwYXRo
UG9pbnRzLCAwLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6
a0RvbmVfVmVyYjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmdW5j
dGlvbihpbmZvLCAmcGF0aEVsZW1lbnQpOworICAgIH0KK30KKwordm9pZCBQYXRoOjp0cmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHhmb3JtKQoreworICAgIG1fcGF0aC0+dHJh
bnNmb3JtKHhmb3JtKTsKK30KKworU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgU2tQYXRoOjpJdGVyIGl0ZXIoKm1fcGF0aCwgZmFs
c2UpOworICAgIFNrUG9pbnQgcHRzWzRdOworCisgICAgaW50IG51bVBvaW50cyA9IG1fcGF0aC0+
Z2V0UG9pbnRzKDAsIDApOworICAgIFNrUGF0aDo6VmVyYiB2ZXJiOworCisgICAgZG8geworICAg
ICAgICB2ZXJiID0gaXRlci5uZXh0KHB0cyk7CisgICAgICAgIHN3aXRjaCAodmVyYikgeworICAg
ICAgICBjYXNlIFNrUGF0aDo6a01vdmVfVmVyYjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBTdHJp
bmc6OmZvcm1hdCgiTSUuMmYsJS4yZiAiLCBwdHNbMF0uZlgsIHB0c1swXS5mWSk7CisgICAgICAg
ICAgICBudW1Qb2ludHMgLT0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNr
UGF0aDo6a0xpbmVfVmVyYjoKKyAgICAgICAgICBpZiAoIWl0ZXIuaXNDbG9zZUxpbmUoKSkgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6OmZvcm1hdCgiTCUuMmYsJS4yZiAiLCBw
dHNbMV0uZlgsIHB0c1sxXS5mWSk7IAorICAgICAgICAgICAgICAgIG51bVBvaW50cyAtPSAxOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjpr
UXVhZF9WZXJiOgorICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZzo6Zm9ybWF0KCJRJS4yZiwl
LjJmLCUuMmYsJS4yZiAiLAorICAgICAgICAgICAgICAgIHB0c1sxXS5mWCwgcHRzWzFdLmZZLAor
ICAgICAgICAgICAgICAgIHB0c1syXS5mWCwgcHRzWzJdLmZZKTsKKyAgICAgICAgICAgIG51bVBv
aW50cyAtPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjprQ3Vi
aWNfVmVyYjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6OmZvcm1hdCgiQyUuMmYsJS4y
ZiwlLjJmLCUuMmYsJS4yZiwlLjJmICIsCisgICAgICAgICAgICAgICAgcHRzWzFdLmZYLCBwdHNb
MV0uZlksCisgICAgICAgICAgICAgICAgcHRzWzJdLmZYLCBwdHNbMl0uZlksCisgICAgICAgICAg
ICAgICAgcHRzWzNdLmZYLCBwdHNbM10uZlkpOworICAgICAgICAgICAgbnVtUG9pbnRzIC09IDM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTa1BhdGg6OmtDbG9zZV9WZXJiOgor
ICAgICAgICAgICAgcmVzdWx0ICs9ICJaICI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTa1BhdGg6OmtEb25lX1ZlcmI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKHZlcmIgIT0gU2tQYXRoOjprRG9uZV9WZXJiKTsKKworICAgIC8vIElmIHlv
dSBoYXZlIGEgcGF0aCB0aGF0IGVuZHMgd2l0aCBhbiBNLCBTa2lhIHdpbGwgbm90IGl0ZXJhdGUg
dGhlCisgICAgLy8gdHJhaWxpbmcgTS4gVGhhdCdzIG5pY2Ugb2YgaXQsIGJ1dCBBcHBsZSdzIHBh
dGhzIG91dHB1dCB0aGUgdHJhaWxpbmcgTQorICAgIC8vIGFuZCB3ZSB3YW50IG91dCBsYXlvdXQg
ZHVtcHMgdG8gbG9vayBsaWtlIHRoZWlycworICAgIGlmIChudW1Qb2ludHMpIHsKKyAgICAgICAg
QVNTRVJUKG51bVBvaW50cz09MSk7CisgICAgICAgIG1fcGF0aC0+Z2V0TGFzdFB0KHB0cyk7Cisg
ICAgICAgIHJlc3VsdCArPSBTdHJpbmc6OmZvcm1hdCgiTSUuMmYsJS4yZiAiLCBwdHNbMF0uZlgs
IHB0c1swXS5mWSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC5zdHJpcFdoaXRlU3BhY2Uo
KTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIGJvdW5kaW5nIGJveCBmb3IgdGhlIHN0cm9rZSBhbmQg
c3R5bGUgY3VycmVudGx5IHNlbGVjdGVkIGludG8KKy8vIHRoZSBnaXZlbiBib3VuZGluZyBib3gu
IFRoaXMgYWxzbyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHN0cm9rZSB3aWR0aC4KK3N0YXRpYyBG
bG9hdFJlY3QgYm91bmRpbmdCb3hGb3JDdXJyZW50U3Ryb2tlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBTa1BhaW50IHBhaW50OworICAgIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKKyAgICBTa1Bh
dGggYm91bmRpbmdQYXRoOworICAgIHBhaW50LmdldEZpbGxQYXRoKCpjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3VycmVudFBhdGgoKSwgJmJvdW5kaW5nUGF0aCk7CisgICAgU2tSZWN0IHI7
CisgICAgYm91bmRpbmdQYXRoLmNvbXB1dGVCb3VuZHMoJnIsIFNrUGF0aDo6a0V4YWN0X0JvdW5k
c1R5cGUpOworICAgIHJldHVybiByOworfQorCitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHQqIHNjcmF0Y2ggPSBzY3JhdGNoQ29udGV4dCgpOworICAgIHNjcmF0Y2gtPnNhdmUoKTsKKyAg
ICBzY3JhdGNoLT5iZWdpblBhdGgoKTsKKyAgICBzY3JhdGNoLT5hZGRQYXRoKCp0aGlzKTsKKwor
ICAgIGlmIChhcHBsaWVyKQorICAgICAgICBhcHBsaWVyLT5zdHJva2VTdHlsZShzY3JhdGNoKTsK
KworICAgIEZsb2F0UmVjdCByID0gYm91bmRpbmdCb3hGb3JDdXJyZW50U3Ryb2tlKHNjcmF0Y2gp
OworICAgIHNjcmF0Y2gtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gcjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BhdHRlcm5Ta2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJu
U2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiZDY3MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tp
YS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJT
a1NoYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgU2tTaGFk
ZXI6OlRpbGVNb2RlIHNoYWRlclJ1bGUoYm9vbCBzaG91bGRSZXBlYXQpCit7CisgICAgLy8gRklY
TUU6IFNraWEgZG9lcyBub3QgaGF2ZSBhICJkcmF3IHRoZSB0aWxlIG9ubHkgb25jZSIgb3B0aW9u
CisgICAgLy8gQ2xhbXAgZHJhd3MgdGhlIGxhc3QgbGluZSBvZiB0aGUgaW1hZ2UgYWZ0ZXIgc3Rv
cHBpbmcgcmVwZWF0aW5nCisgICAgcmV0dXJuIHNob3VsZFJlcGVhdCA/IFNrU2hhZGVyOjprUmVw
ZWF0X1RpbGVNb2RlIDogU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZTsKK30KKworUGxhdGZvcm1Q
YXR0ZXJuUHRyIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBTa0JpdG1hcCogYm0g
PSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBTa1NoYWRl
ciogc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcigqYm0sIHNoYWRlclJ1bGUo
bV9yZXBlYXRYKSwgc2hhZGVyUnVsZShtX3JlcGVhdFkpKTsKKyAgICBzaGFkZXItPnNldExvY2Fs
TWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0pOworICAgIHJldHVybiBzaGFkZXI7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>