<?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>28122</bug_id>
          
          <creation_ts>2009-08-09 05:10:52 -0700</creation_ts>
          <short_desc>[Haiku] Adding some simple graphic files (IntPoint, IntRect…)</short_desc>
          <delta_ts>2009-08-12 13:16:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>leavengood</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138478</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 05:10:52 -0700</bug_when>
    <thetext>Here is a patch to add 8 simple files:
WebCore/platform/graphics/haiku/ColorHaiku.cpp
WebCore/platform/graphics/haiku/FloatPointHaiku.cpp
WebCore/platform/graphics/haiku/FloatRectHaiku.cpp
WebCore/platform/graphics/haiku/GradientHaiku.cpp
WebCore/platform/graphics/haiku/IntPointHaiku.cpp
WebCore/platform/graphics/haiku/IntRectHaiku.cpp
WebCore/platform/graphics/haiku/IntSizeHaiku.cpp
WebCore/platform/graphics/haiku/PathHaiku.cpp

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138480</commentid>
    <comment_count>1</comment_count>
      <attachid>34407</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 05:16:50 -0700</bug_when>
    <thetext>Created attachment 34407
Patch to add eight graphic files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138509</commentid>
    <comment_count>2</comment_count>
      <attachid>34407</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 07:46:50 -0700</bug_when>
    <thetext>Comment on attachment 34407
Patch to add eight graphic files.

What does the color struct look like?  Could you just use a COMPILE_ASSERT to assert identical layout with the WebCore:RGBA32 type and not need to call make_color, etc?

See how I did things in ColorSkia (where we just cast directly).  Your current solution is *totally fine*.  I just wanted to bring the opportunity of casting directly to your attention.

Why are the +1 needed for one way conversion:
 38     , m_size(rect.Width() + 1, rect.Height() + 1)

and -1 is not needed the other way:
 44     return BRect(BPoint(x(), y()), BSize(width(), height()));

That at least needs a comment.

It seems if BPoint is a float point you don&apos;t want to have it implicitly constructed.
 IntPoint::IntPoint(const BPoint&amp; point)
 37     : m_x(static_cast&lt;int&gt;(point.x))
 38     , m_y(static_cast&lt;int&gt;(point.y))
 39 {
 40 }

See how CGPoint is handled.

Yeah, it seems that BRect, BPoint, BSize should only map to the Float* variants (similar to how CG* works).  Why a FIXME here, but not before?
42 IntRect::operator BRect() const
 43 {
 44     // FIXME: subtract 1 from height and width?
 45     return BRect(BPoint(x(), y()), BSize(width(), height()));
 46 }

Parts of this would be easy to approve.  I think you need to double-check how you do the B* to Float*/Int* conversions.  Since it seems that B* are all floating-point values, you can follow exactly what the CG* types do, since those are all floating point values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138510</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 07:47:30 -0700</bug_when>
    <thetext>The parts that I didn&apos;t comment on could be split out into a separate patch if you wanted quicker approval there.  This patch is definitely reviewable at this size however (it&apos;s mostly boilerplate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138534</commentid>
    <comment_count>4</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 09:50:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34407 [details])
&gt; What does the color struct look like?  Could you just use a COMPILE_ASSERT to
&gt; assert identical layout with the WebCore:RGBA32 type and not need to call
&gt; make_color, etc?

Indeed rgb_color is a struct of { red, green, blue, alpha } like WebCore::RGBA32, So I should change this.

&gt; Why are the +1 needed for one way conversion:
&gt;  38     , m_size(rect.Width() + 1, rect.Height() + 1)
&gt; 
&gt; and -1 is not needed the other way:
&gt;  44     return BRect(BPoint(x(), y()), BSize(width(), height()));

I assume that the +1/-1 are from the previous port and are what was done in the Syllable port. But I&apos;m pretty sure they aren&apos;t necessary.

&gt; It seems if BPoint is a float point you don&apos;t want to have it implicitly
&gt; constructed.
&gt;  IntPoint::IntPoint(const BPoint&amp; point)
&gt;  37     : m_x(static_cast&lt;int&gt;(point.x))
&gt;  38     , m_y(static_cast&lt;int&gt;(point.y))
&gt;  39 {
&gt;  40 }
&gt; 
&gt; See how CGPoint is handled.

In CGPoint they used a static_cast as I did. :D

&gt; I think you need to double-check how
&gt; you do the B* to Float*/Int* conversions.  Since it seems that B* are all
&gt; floating-point values, you can follow exactly what the CG* types do, since
&gt; those are all floating point values.

I know that both BRect and BSize have IntegerWidth() and IntegerHeight() methods, but BPoint needs a cast to int.
That&apos;s what I used, but I will check again, and at least remove the +1/-1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138537</commentid>
    <comment_count>5</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 10:35:57 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34407 [details])
&gt; What does the color struct look like?  Could you just use a COMPILE_ASSERT to
&gt; assert identical layout with the WebCore:RGBA32 type and not need to call
&gt; make_color, etc?
&gt; 
&gt; See how I did things in ColorSkia (where we just cast directly).  Your current
&gt; solution is *totally fine*.  I just wanted to bring the opportunity of casting
&gt; directly to your attention.

ColorSkia? I do not want to sound boring, but there is no such file.
In fact I was wrong, I can&apos;t cast an unsigned (RGBA32) to a struct of unsigned (rgb_color). So it would still use the make_color function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138538</commentid>
    <comment_count>6</comment_count>
      <attachid>34426</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 11:20:43 -0700</bug_when>
    <thetext>Created attachment 34426
Patch to add eight graphic files for WebCore/platform/graphics/haiku.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138540</commentid>
    <comment_count>7</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-09 11:28:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; ColorSkia? I do not want to sound boring, but there is no such file.

I don&apos;t see that either.

&gt; In fact I was wrong, I can&apos;t cast an unsigned (RGBA32) to a struct of unsigned
&gt; (rgb_color). So it would still use the make_color function.

Are you sure? Doing a cast instead of calling a function would probably be
faster and I&apos;m sure this conversion would need to be done a lot.

Eric, our rgb_color struct is defined here:

http://svn.berlios.de/viewcvs/haiku/haiku/trunk/headers/os/interface/GraphicsDefs.h?revision=25797&amp;view=markup

Since this is C++ code the rgb_color struct is essentially a public class, so
maybe it can&apos;t be just cast even if the members are in the same order (then of
course there is endianness, which may also be an issue, right?)

I am not particularly skilled at the moment on these low-level types of issues
(too much Ruby, HTML and JavaScript these last few years), so any insight is
appreciated.

Also in regards to all the BRect and IntRect stuff, that probably does need an
audit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138542</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 11:51:34 -0700</bug_when>
    <thetext>Note that the CG constructors are explicit:
    explicit IntPoint(const CGPoint&amp;); // don&apos;t do this implicitly since it&apos;s lossy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138543</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 11:52:14 -0700</bug_when>
    <thetext>An old ColorSkia:
http://src.chromium.org/viewvc/chrome/trunk/src/webkit/port/platform/graphics/ColorSkia.cpp?revision=3958&amp;view=markup&amp;sortby=date&amp;pathrev=3958</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139407</commentid>
    <comment_count>10</comment_count>
      <attachid>34426</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:37:38 -0700</bug_when>
    <thetext>Comment on attachment 34426
Patch to add eight graphic files for WebCore/platform/graphics/haiku.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139492</commentid>
    <comment_count>11</comment_count>
      <attachid>34426</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:16:28 -0700</bug_when>
    <thetext>Comment on attachment 34426
Patch to add eight graphic files for WebCore/platform/graphics/haiku.

Clearing flags on attachment: 34426

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/haiku/ColorHaiku.cpp
	A	WebCore/platform/graphics/haiku/FloatPointHaiku.cpp
	A	WebCore/platform/graphics/haiku/FloatRectHaiku.cpp
	A	WebCore/platform/graphics/haiku/GradientHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntPointHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntRectHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntSizeHaiku.cpp
	A	WebCore/platform/graphics/haiku/PathHaiku.cpp
Committed r47142
	M	WebCore/ChangeLog
	A	WebCore/platform/graphics/haiku/PathHaiku.cpp
	A	WebCore/platform/graphics/haiku/GradientHaiku.cpp
	A	WebCore/platform/graphics/haiku/ColorHaiku.cpp
	A	WebCore/platform/graphics/haiku/FloatPointHaiku.cpp
	A	WebCore/platform/graphics/haiku/FloatRectHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntPointHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntSizeHaiku.cpp
	A	WebCore/platform/graphics/haiku/IntRectHaiku.cpp
r47142 = e4c305eb83f3dda05416b0db9336be7cd0e99ba8 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/47142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139493</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:16:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34407</attachid>
            <date>2009-08-09 05:16:50 -0700</date>
            <delta_ts>2009-08-09 11:20:43 -0700</delta_ts>
            <desc>Patch to add eight graphic files.</desc>
            <filename>Haiku-Adding-8-simple-graphic-files.patch</filename>
            <type>text/plain</type>
            <size>22115</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3M2Q4N2I0OWU0MzlhYjBlMzk4YmVjZjMxYmJjM2U5ODczNDVlZTc5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAxNDoxNDo0MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtI
YWlrdV0gQWRkaW5nIDggc2ltcGxlIGdyYXBoaWMgZmlsZXMuCgotLS0KIFdlYkNvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NyArKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwICAgICB8ICAgNTQgKysr
KysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAgICAg
fCAgIDQ4ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RI
YWlrdS5jcHAgfCAgIDQ4ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFkaWVudEhhaWt1LmNwcCAgfCAgIDUzICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAgIHwgICA0OCArKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKysrKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcCAgIHwgICA0OCArKysr
KysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcCAgICAgIHwg
IDE2MSArKysrKysrKysrKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA1NjYgaW5zZXJ0aW9u
cygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YWRpZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1
LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMzFiYTA0OC4uYWVhY2Y3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wOC0wOSAgTWF4aW1l
IFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyA4IHNpbXBsZSBncmFwaGlj
IGZpbGVzOgorICAgICAgICBDb2xvckhhaWt1LmNwcCwgRmxvYXRQb2ludEhhaWt1LmNwcCwgRmxv
YXRSZWN0SGFpa3UuY3BwLAorICAgICAgICBHcmFkaWVudEhhaWt1LmNwcCwgSW50UG9pbnRIYWlr
dS5jcHAsIEludFJlY3RIYWlrdS5jcHAsCisgICAgICAgIEludFNpemVIYWlrdS5jcHAgYW5kIFBh
dGhIYWlrdS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI4MTIyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpm
b2N1c1JpbmdDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQ
b2ludEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9h
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OnBsYXRmb3JtR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpJbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkludFJlY3Q6OkludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6b3BlcmF0b3Ig
QlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50U2l6ZTo6SW50U2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRTaXplOjpvcGVyYXRvciBCU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpoYXNDdXJy
ZW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5k
aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjptb3ZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkTGluZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFF1YWRD
dXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJlemllckN1cnZlVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyYyk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjphZGRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEVs
bGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpkZWJ1Z1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
Ojp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KToKKwogMjAwOS0wOC0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk5ODI5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb2xvci5oIgorCisjaW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQ29sb3I6OkNvbG9yKGNvbnN0IHJnYl9jb2xvciYgY29sb3IpCisg
ICAgOiBtX2NvbG9yKG1ha2VSR0JBKGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUs
IGNvbG9yLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlkID0gdHJ1ZTsKK30KKworQ29sb3I6Om9wZXJh
dG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VfY29sb3IocmVkKCksIGdy
ZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisKKworQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQor
eworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9uYXZpZ2F0aW9uX2NvbG9yKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wZjUwODk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQb2ludC5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBCUG9pbnQmIHBv
aW50KQorICAgIDogbV94KHBvaW50LngpCisgICAgLCBtX3kocG9pbnQueSkKK3sKK30KKworRmxv
YXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50KG1f
eCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMWQyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxSZWN0Lmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBC
UmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAgLCBtX3Np
emUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWlnaHQoKSArIDEpCit7Cit9CisKK0Zsb2F0UmVj
dDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBCUmVjdChCUG9pbnQoeCgp
LCB5KCkpLCBCU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWExN2YKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2
aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUB0aGVv
bGxpdmllcnMuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYWRpZW50OjpwbGF0Zm9y
bURlc3Ryb3koKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BsYXRmb3JtR3JhZGll
bnQgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ludFBvaW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjMyN2U1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ludFBvaW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRQb2ludC5oIgorCisjaW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ludFBvaW50OjpJbnRQb2ludChjb25zdCBCUG9pbnQmIHBvaW50KQorICAgIDogbV94
KHN0YXRpY19jYXN0PGludD4ocG9pbnQueCkpCisgICAgLCBtX3koc3RhdGljX2Nhc3Q8aW50Pihw
b2ludC55KSkKK3sKK30KKworSW50UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEJQb2ludChtX3gsIG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYWM0MTQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1
ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFJlY3Q6OkludFJlY3Qo
Y29uc3QgQlJlY3QmIHJlY3QpCisgICAgOiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQorICAg
ICwgbV9zaXplKHJlY3QuSW50ZWdlcldpZHRoKCkgKyAxLCByZWN0LkludGVnZXJIZWlnaHQoKSAr
IDEpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogc3VidHJhY3QgMSBmcm9tIGhlaWdodCBhbmQgd2lkdGg/CisgICAgcmV0dXJuIEJSZWN0
KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbnRTaXplSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4
YzNhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ludFNpemVIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKworI2luY2x1ZGUgPFNpemUuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ludFNpemU6OkludFNpemUoY29uc3QgQlNpemUmIHNpemUpCisgICAgOiBtX3dpZHRoKHNpemUu
SW50ZWdlcldpZHRoKCkpCisgICAgLCBtX2hlaWdodChzaXplLkludGVnZXJIZWlnaHQoKSkKK3sK
K30KKworSW50U2l6ZTo6b3BlcmF0b3IgQlNpemUoKSBjb25zdAoreworICAgIHJldHVybiBCU2l6
ZSh3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGEwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAsMCArMSwxNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29k
QGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSA8UmVnaW9uLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRoOjpQ
YXRoKCkKKyAgICA6IG1fcGF0aChuZXcgQlJlZ2lvbigpKQoreworfQorCitQYXRoOjp+UGF0aCgp
Cit7CisgICAgZGVsZXRlIG1fcGF0aDsKK30KKworUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhl
cikKKyAgICA6IG1fcGF0aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorewor
fQorCitQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgaWYg
KCZvdGhlciAhPSB0aGlzKQorICAgICAgICBtX3BhdGggPSBvdGhlci5wbGF0Zm9ybVBhdGgoKTsK
KworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBj
b25zdAoreworICAgIHJldHVybiAhaXNFbXB0eSgpOworfQorCitib29sIFBhdGg6OmNvbnRhaW5z
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zs
b2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgt
PkZyYW1lKCk7Cit9CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQoreworICAgIC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBj
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBw
LCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCit7CisgICAgbV9wYXRoLT5JbmNsdWRlKHIpOworfQorCit2b2lkIFBhdGg6OmFk
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGF0aDo6Y2xlYXIoKQoreworICAgIG1fcGF0aC0+TWFrZUVtcHR5KCk7Cit9CisK
K2Jvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BhdGgtPkZyYW1l
KCkuSXNWYWxpZCgpOworfQorCitTdHJpbmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFBh
dGg6OmFwcGx5KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxl
QXBwbGllciogYXBwbGllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="18588"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34426</attachid>
            <date>2009-08-09 11:20:43 -0700</date>
            <delta_ts>2009-08-12 13:16:27 -0700</delta_ts>
            <desc>Patch to add eight graphic files for WebCore/platform/graphics/haiku.</desc>
            <filename>Adding-eight-simple-files-to-WebCore-platform-graphi.patch</filename>
            <type>text/plain</type>
            <size>21929</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBhZWE2NDFmOGM3YjQ1ZjJhY2UxOGYyMzJjNjk1MWNjMDIwNDkwYzYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAyMDoxODo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGluZyBlaWdodCBzaW1wbGUgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDU0ICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JI
YWlrdS5jcHAgICAgIHwgICA1NCArKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCB8ICAgNDggKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwICB8ICAgNTMgKysrKysrKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcCAgfCAgIDQ4
ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3Bw
ICAgfCAgIDQ4ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXpl
SGFpa3UuY3BwICAgfCAgIDQ4ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9QYXRoSGFpa3UuY3BwICAgICAgfCAgMTYxICsrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVz
IGNoYW5nZWQsIDU2MiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9p
bnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFp
a3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbnRTaXplSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMWJhMDQ4Li41ZDdhZmQ5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3
IEBACisyMDA5LTA4LTA5ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtIYWlrdV0g
QWRkaW5nIGVpZ2h0IHNpbXBsZSBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgx
MjIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmlu
Z0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxh
dGZvcm1HcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkludFBvaW50OjpvcGVyYXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ludFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVj
dDo6SW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkludFNpemU6Om9wZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9QYXRoSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjphZGRMaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjphZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1
YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAy
MDA5LTA4LTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvQ29sb3JIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTlhYzE4NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvQ29sb3JIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisKKyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDb2xvcjo6Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjb2xvcikKKyAgICA6IG1f
Y29sb3IobWFrZVJHQkEoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgY29sb3Iu
YWxwaGEpKQorICAgICwgbV92YWxpZCh0cnVlKQoreworfQorCitDb2xvcjo6b3BlcmF0b3Igcmdi
X2NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZV9jb2xvcihyZWQoKSwgZ3JlZW4oKSwg
Ymx1ZSgpLCBhbHBoYSgpKTsKK30KKworCitDb2xvciBmb2N1c1JpbmdDb2xvcigpCit7CisgICAg
cmV0dXJuIENvbG9yKGtleWJvYXJkX25hdmlnYXRpb25fY29sb3IoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9GbG9hdFBvaW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjBmNTA4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCisg
ICAgOiBtX3gocG9pbnQueCkKKyAgICAsIG1feShwb2ludC55KQoreworfQorCitGbG9hdFBvaW50
OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjdhZjNhZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEJSZWN0JiBy
ZWN0KQorICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyZWN0
LldpZHRoKCksIHJlY3QuSGVpZ2h0KCkpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgQlJl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBCUmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3
aWR0aCgpLCBoZWlnaHQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWExN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtl
dmlub0B0aGVvbGxpdmllcnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUB0aGVvbGxpdmllcnMuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKworI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BsYXRmb3JtR3JhZGllbnQgR3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9p
bnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2U1MDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFp
a3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
CisjaW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50
OjpJbnRQb2ludChjb25zdCBCUG9pbnQmIHBvaW50KQorICAgIDogbV94KHN0YXRpY19jYXN0PGlu
dD4ocG9pbnQueCkpCisgICAgLCBtX3koc3RhdGljX2Nhc3Q8aW50Pihwb2ludC55KSkKK3sKK30K
KworSW50UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJQb2lu
dChtX3gsIG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTBiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RA
Z21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHJl
Y3QpCisgICAgOiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQorICAgICwgbV9zaXplKHJlY3Qu
SW50ZWdlcldpZHRoKCksIHJlY3QuSW50ZWdlckhlaWdodCgpKQoreworfQorCitJbnRSZWN0Ojpv
cGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHko
KSksIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXpl
SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YzNhOWQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5j
cHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2lu
Y2x1ZGUgPFNpemUuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemU6OkludFNp
emUoY29uc3QgQlNpemUmIHNpemUpCisgICAgOiBtX3dpZHRoKHNpemUuSW50ZWdlcldpZHRoKCkp
CisgICAgLCBtX2hlaWdodChzaXplLkludGVnZXJIZWlnaHQoKSkKK3sKK30KKworSW50U2l6ZTo6
b3BlcmF0b3IgQlNpemUoKSBjb25zdAoreworICAgIHJldHVybiBCU2l6ZSh3aWR0aCgpLCBoZWln
aHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmQwZGEwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8UmVn
aW9uLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRoOjpQYXRoKCkKKyAgICA6IG1f
cGF0aChuZXcgQlJlZ2lvbigpKQoreworfQorCitQYXRoOjp+UGF0aCgpCit7CisgICAgZGVsZXRl
IG1fcGF0aDsKK30KKworUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKKyAgICA6IG1fcGF0
aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQoreworfQorCitQYXRoJiBQYXRo
OjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgaWYgKCZvdGhlciAhPSB0aGlz
KQorICAgICAgICBtX3BhdGggPSBvdGhlci5wbGF0Zm9ybVBhdGgoKTsKKworICAgIHJldHVybiAq
dGhpczsKK30KKworYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAoreworICAgIHJl
dHVybiAhaXNFbXB0eSgpOworfQorCitib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPkNv
bnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQYXRoOjpi
b3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPkZyYW1lKCk7Cit9CisK
K3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIC8vIEZJ
WE1FOiBVc2UgT2Zmc2V0Qnk/CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRo
OjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBj
b25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9h
dCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit7Cisg
ICAgbV9wYXRoLT5JbmNsdWRlKHIpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6
Y2xlYXIoKQoreworICAgIG1fcGF0aC0+TWFrZUVtcHR5KCk7Cit9CisKK2Jvb2wgUGF0aDo6aXNF
bXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BhdGgtPkZyYW1lKCkuSXNWYWxpZCgpOwor
fQorCitTdHJpbmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFBhdGg6OmFwcGx5KHZvaWQq
IGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9h
dFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGll
cikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>