<?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>179933</bug_id>
          
          <creation_ts>2017-11-21 17:12:06 -0800</creation_ts>
          <short_desc>FELighting cleanup and optimization</short_desc>
          <delta_ts>2017-11-23 14:23:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1374122</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-21 17:12:06 -0800</bug_when>
    <thetext>FELighting cleanup and optimization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374123</commentid>
    <comment_count>1</comment_count>
      <attachid>327438</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-21 17:19:54 -0800</bug_when>
    <thetext>Created attachment 327438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374124</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-21 17:21:00 -0800</bug_when>
    <thetext>Attachment 327438 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/filters/FELighting.cpp:269:  Declaration has space between type name and * in factorX * static_cast  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/graphics/filters/FELighting.cpp:269:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/filters/FELighting.cpp:270:  Declaration has space between type name and * in factorY * static_cast  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/graphics/filters/FELighting.cpp:270:  static_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374218</commentid>
    <comment_count>3</comment_count>
      <attachid>327438</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-22 10:03:41 -0800</bug_when>
    <thetext>Comment on attachment 327438
Patch

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

Looks great. Hope the test coverage is already good.

&gt; Source/WebCore/platform/graphics/filters/DistantLightSource.cpp:45
&gt; +        cosf(azimuth) * cosf(elevation),
&gt; +        sinf(azimuth) * cosf(elevation),
&gt; +        sinf(elevation)

Seems nicer to use the overloaded std::cos and std::sin rather than the float-only sinf/cosf.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:270
&gt; +            factorX * static_cast&lt;float&gt;(normal2DVector.width()) * data.surfaceScale,
&gt; +            factorY * static_cast&lt;float&gt;(normal2DVector.height()) * data.surfaceScale,

While they are not new, I don’t think these static_cast&lt;float&gt; are helpful or needed. I think the compiler knows how to do &quot;float * int * float -&gt; float&quot; without casting help.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:296
&gt; +    unsigned char pixelValue[4] = {

Why &quot;4&quot; here, but &quot;3&quot; below in the call to setRange? Should be 3.

In code below you use uint8_t for this kind of thing, as does much new code. I think you should use it here too. Benefits: uint8_t is shorter and helps clarify that these bytes are not &quot;characters&quot;. Disadvantages: type definition rather than built-in name for the type.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:299
&gt; +        static_cast&lt;unsigned char&gt;(lightStrength * lightingData.colorVector.x()),
&gt; +        static_cast&lt;unsigned char&gt;(lightStrength * lightingData.colorVector.y()),
&gt; +        static_cast&lt;unsigned char&gt;(lightStrength * lightingData.colorVector.z()),

Truncation is what we want here, not rounding?

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:307
&gt; +void FELighting::platformApplyGenericPaint(const LightingData&amp; data, const LightSource::PaintingData&amp; paintingData, int startY, int endY)

The names start/end don’t make it clear to me that this stops *before* the end. Wish there was consistent naming for this.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:309
&gt; +    ASSERT(startY);

Why is this an important assertion?

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:396
&gt; +    TimingScope scope(&quot;FELighting::drawLighting&quot;, 100);

I think you want to remove this before landing?

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:403
&gt; +    paintingData.intialLightingData.colorVector = FloatPoint3D(m_lightingColor.red(), m_lightingColor.green(), m_lightingColor.blue());

I think it would be nice to use a helper function rather than writing out the integer-to-float conversion here, so this can work properly with ExtendedColor. Although I suppose that would only be sufficient to initialize the color vector, not necessarily enough to do the rest. One confusing aspect is that there are at least two kinds of floating point color channels, 0.0-&gt;1.0 and 0.0-&gt;255.0. Or is the second one 0.0-&gt;255.99999999? So using Color::getRGBA would not help.

&gt; Source/WebCore/platform/graphics/filters/FELighting.h:68
&gt; +        uint8_t alpha[3][3] { };

Might consider using std::array instead.

&gt; Source/WebCore/platform/graphics/filters/FELighting.h:70
&gt; +        // The implemtations are lined up to make comparing indices easier.

Misspelling of implementations here.

&gt; Source/WebCore/platform/graphics/filters/FELighting.h:85
&gt; +        uint8_t topLeft() const             { return alpha[0][0]; }
&gt; +        uint8_t left() const                { return alpha[1][0]; }
&gt; +        uint8_t bottomLeft() const          { return alpha[2][0]; }
&gt; +
&gt; +        uint8_t top() const                 { return alpha[0][1]; }
&gt; +        uint8_t center() const              { return alpha[1][1]; }
&gt; +        uint8_t bottom() const              { return alpha[2][1]; }
&gt; +
&gt; +        void setTop(uint8_t value)          { alpha[0][1] = value; }
&gt; +        void setCenter(uint8_t value)       { alpha[1][1] = value; }
&gt; +        void setBottom(uint8_t value)       { alpha[2][1] = value; }
&gt; +
&gt; +        void setTopRight(uint8_t value)     { alpha[0][2] = value; }
&gt; +        void setRight(uint8_t value)        { alpha[1][2] = value; }
&gt; +        void setBottomRight(uint8_t value)  { alpha[2][2] = value; }

Our coding style guidelines say we don’t line things up vertically like this.

&gt; Source/WebCore/platform/graphics/filters/FELighting.h:87
&gt; +        static void shiftRow(uint8_t alpha[3])

Using std::array&amp; here would give us better type checking, but this function is only used in shift() below, so I guess that’s no big deal.

&gt; Source/WebCore/platform/graphics/filters/PointLightSource.cpp:54
&gt; +    return {
&gt; +        lightVector,
&gt; +        { },
&gt; +        lightVector.length()
&gt; +    };

I would write this on a single line. Not sure these always need to be vertical. Maybe even the same thing for the lightVector above.

&gt; Source/WebCore/platform/graphics/filters/SpotLightSource.cpp:86
&gt; +        return {
&gt; +            lightVector,
&gt; +            { },
&gt; +            lightVectorLength
&gt; +        };

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374478</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-23 14:22:59 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/225122/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374481</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-23 14:23:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/35678184&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327438</attachid>
            <date>2017-11-21 17:19:54 -0800</date>
            <delta_ts>2017-11-22 10:03:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179933-20171121171953.patch</filename>
            <type>text/plain</type>
            <size>33618</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTViMTlhYzBiODYxYTBj
MDE2MDJhNGMyODdiMjIzM2YwZDM5ZDkzOS4uZWFjZjI3ZDg2NzZlNGJkNjA0NTcxMDIxNDA5ZDlh
MzU0MjFkZGNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY1IEBACiAyMDE3LTExLTIxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEZFTGlnaHRpbmcg
Y2xlYW51cCBhbmQgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzk5MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIEZFTGlnaHRpbmcgYWJvdXQgMjUlIGZhc3RlciBieSBtYWlu
dGFpbmluZyBhbiAiYWxwaGEiIHdpbmRvdyBvZiB0aGUgYWxwaGEKKyAgICAgICAgdmFsdWVzIG9m
IHRoZSA5IHBpeGVscyBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBwaXhlbCwgYW5kIHNsaWRpbmcg
dGhpcyB3aW5kb3cgb3ZlcgorICAgICAgICB3aGVuIG1vdmluZyB0byB0aGUgbmV4dCBwaXhlbC4g
VGhpcyBhdm9pZHMgcmVhZGluZyB0aGUgc2FtZSBhbHBoYSB2YWx1ZXMgZnJvbSB0aGUgb3JpZ2lu
YWwKKyAgICAgICAgYnVmZmVyIG11bHRpcGxlIHRpbWVzLgorCisgICAgICAgIENsZWFuIHVwIExp
Z2h0U291cmNlIGFuZCBzdWJjbGFzc2VzLCBhZGRpbmcgU1BFQ0lBTElaRV9UWVBFX1RSQUlUUyBt
YWNyb3MsCisgICAgICAgIGFuZCB0dXJuaW5nIHVwZGF0ZVBhaW50aW5nRGF0YSgpIGludG8gYSBm
dW5jdGlvbiB3aXRoIG5vIHNpZGUgZWZmZWN0cyB0aGF0IHJldHVybnMKKyAgICAgICAgdGhlIHJl
cXVpcmVkIGRhdGEuCisKKyAgICAgICAgUmVtb3ZlIGV4cGxpY2l0ICdpbmxpbmUnIGtleXdvcmRz
LCBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gbWFrZSBpbmxpbmluZyBkZWNpc2lvbnMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdo
dGluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExpZ2h0U291cmNlOjp1
cGRhdGVQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmlubGluZVNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0UmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbVJpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UG9pbnRMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRp
bmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVs
TGlnaHRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6
dXBkYXRlUGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorCisyMDE3LTExLTIxICBTaW1vbiBGcmFzZXIg
IDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFNvbWUgRkVMaWdodGluZyBjbGVh
bnVwCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5
MjQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2Fy
bS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAppbmRleCA1MWRkYTE3ODE3M2M5
YWVlNGM1ZWJmNmRjNTFjM2RjNDViY2UwNGQ3Li5hYmIzMmU1NTZhNjRmODI0NDAyOGZiYmU1YjJm
MWMwODc2MzNhODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaApAQCAtOTMs
NyArOTMsNyBAQCBleHRlcm4gIkMiIHsKIHZvaWQgbmVvbkRyYXdMaWdodGluZyhGRUxpZ2h0aW5n
UGFpbnRpbmdEYXRhRm9yTmVvbiopOwogfQogCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5TmVvbihMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlO
ZW9uKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIEZFTGlnaHRpbmdGbG9hdEFyZ3VtZW50c0Zvck5l
b24gZmxvYXRBcmd1bWVudHMgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTYpKSk7CiAgICAg
RkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24gbmVvbkRhdGEgPSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5jcHAKaW5kZXggYjJlNTUzMTZkNDc0ZmExZTc1ZTlhY2FhZmMzNTk0YmIyOGMz
NjY1YS4uNWRlNGI5YzM1ZDdhZDcwMzBjZjk2YzliYzI3MmZlYzEwNGI0N2FiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmNwcApAQCAtMzksMTQgKzM5LDE3IEBAIHZvaWQgRGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQog
ewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxl
dmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnNldFgoY29zZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7Ci0g
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFooc2luZihlbGV2YXRpb24pKTsKLSAgICBw
YWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSAxOworICAgIHBhaW50aW5nRGF0YS5pbnRp
YWxMaWdodGluZ0RhdGEubGlnaHRWZWN0b3IgPSB7CisgICAgICAgIGNvc2YoYXppbXV0aCkgKiBj
b3NmKGVsZXZhdGlvbiksCisgICAgICAgIHNpbmYoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbiks
CisgICAgICAgIHNpbmYoZWxldmF0aW9uKQorICAgIH07CisgICAgcGFpbnRpbmdEYXRhLmludGlh
bExpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCA9IDE7CiB9CiAKLXZvaWQgRGlzdGFudExp
Z2h0U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQsIGZs
b2F0KQorTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIERpc3RhbnRMaWdodFNvdXJj
ZTo6Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQsIGludCwgZmxvYXQpIGNvbnN0CiB7CisgICAgcmV0dXJuIHBhaW50aW5nRGF0YS5p
bnRpYWxMaWdodGluZ0RhdGE7CiB9CiAKIGJvb2wgRGlzdGFudExpZ2h0U291cmNlOjpzZXRBemlt
dXRoKGZsb2F0IGF6aW11dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCA2ZGJhNmQ0
Nzc0ZmFhZTA2ZTkxZDEzOWYxMDc0ZDU2NGQzNDYyM2ZmLi5mY2NlNWNlYzBjZjZmNjA4NzZmYzZj
Mjg3NGNmZWM0ZjFjMTIzNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTIwLDgg
KzIwLDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
RGlzdGFudExpZ2h0U291cmNlX2gKLSNkZWZpbmUgRGlzdGFudExpZ2h0U291cmNlX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+
CkBAIC00Miw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldEVsZXZhdGlvbihmbG9hdCkg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KSBvdmVycmlkZTsKKyAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNjAsNCAr
NTksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBE
aXN0YW50TGlnaHRTb3VyY2VfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MSUdIVFNPVVJDRShE
aXN0YW50TGlnaHRTb3VyY2UsIExTX0RJU1RBTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwZTE1MDkw
YzU0OTc3NjQ3OGIyZmVkYTFmMzQyNDFkZjg2OTJkNGEwLi5mMzgwZDBjNzU2ZmFmNjcyZTE4MTdk
MmI4NGE3YmJmMmEyYWYyOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgorI2luY2x1ZGUgPHd0Zi9UaW1pbmdTY29wZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTE0OSwxOCArMTUwLDMwIEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25z
dAogewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAy
ICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OworICAgIAorICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQpKTsKKyAgICBp
bnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zm
c2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKworICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVm
dCgpOworICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOworICAgIGludCB0
b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKKworICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5k
b3cuYm90dG9tTGVmdCgpOworICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsK
KworICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBm
aWxsIGluIHRoZSByaWdodCBjb2x1bW4uCisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0
b3BSaWdodDsKKyAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0OworICAgIGFscGhh
V2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7CisgICAgCisgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVja3MuCisgICAg
QVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOyAvLyB0b3BMZWZ0CisgICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+
aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsgLy8gdG9wCisKICAgICByZXR1cm4gewogICAgICAgICAtdG9wTGVmdCArIHRvcFJp
Z2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCiAg
ICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBi
b3R0b20gKyBib3R0b21SaWdodApAQCAtMjI0LDE4ICsyMzcsMjcgQEAgaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBj
b25zdAogICAgIH07CiB9CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OmlubGluZVNldFBpeGVs
KGludCBvZmZzZXQsIExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBm
bG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQordm9pZCBGRUxpZ2h0aW5nOjpz
ZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQogewotICAgIG1f
bGlnaHRTb3VyY2UtPnVwZGF0ZVBhaW50aW5nRGF0YShwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGln
aHRZLCBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAgIHNldFBpeGVsSW50ZXJu
YWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5v
cm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Cit9CisKK3ZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK3sKKyAgICBmbG9hdCB6
ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VTY2FsZTsKKyAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRM
aWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGln
aHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CiAKICAgICBmbG9hdCBsaWdodFN0cmVu
Z3RoOwogICAgIGlmIChub3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewogICAgICAgICAvLyBOb3Jt
YWwgdmVjdG9yIGlzICgwLCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCiAg
ICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcp
Ci0gICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3IueigpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwor
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBh
aW50aW5nRGF0YS5saWdodFZlY3RvcjsKLSAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0Wiho
YWxmd2F5VmVjdG9yLnooKSArIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAg
ICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxl
bmd0aCgpOwogICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQogICAgICAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVj
dG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CkBAIC0yNDMsMTcgKzI2NSwyMSBAQCBpbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0Rh
dGEmIGRhdGEsIExpZ2h0U291cgogICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxl
bmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7Ci0gICAgICAgIG5vcm1hbFZlY3Rvci5zZXRY
KGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0b3Iud2lkdGgoKSkgKiBk
YXRhLnN1cmZhY2VTY2FsZSk7Ci0gICAgICAgIG5vcm1hbFZlY3Rvci5zZXRZKGZhY3RvclkgKiBz
dGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkpICogZGF0YS5zdXJmYWNl
U2NhbGUpOwotICAgICAgICBub3JtYWxWZWN0b3Iuc2V0WigxKTsKKyAgICAgICAgRmxvYXRQb2lu
dDNEIG5vcm1hbFZlY3RvciA9IHsKKyAgICAgICAgICAgIGZhY3RvclggKiBzdGF0aWNfY2FzdDxm
bG9hdD4obm9ybWFsMkRWZWN0b3Iud2lkdGgoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKKyAgICAg
ICAgICAgIGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0b3IuaGVpZ2h0
KCkpICogZGF0YS5zdXJmYWNlU2NhbGUsCisgICAgICAgICAgICAxLjBmCisgICAgICAgIH07CiAg
ICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsK
IAogICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0
aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5v
cm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVu
Z3RoICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7Ci0gICAgICAgICAgICBo
YWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7
CisgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKKyAgICAgICAg
ICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAgICAgICAgIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgKKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3Ro
ID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKICAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhw
b25lbnQgPT0gMSkKICAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNv
bnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxl
bmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOwpAQCAtMjY3LDIyICsyOTMsNDMgQEAgaW5saW5l
IHZvaWQgRkVMaWdodGluZzo6aW5saW5lU2V0UGl4ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdEYXRh
JiBkYXRhLCBMaWdodFNvdXIKICAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCiAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSAwOwogCi0gICAgZGF0YS5waXhlbHMtPnNldChvZmZzZXQsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0
b3IueCgpKSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChvZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnko
KSkpOwotICAgIGRhdGEucGl4ZWxzLT5zZXQob2Zmc2V0ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56KCkpKTsK
KyAgICB1bnNpZ25lZCBjaGFyIHBpeGVsVmFsdWVbNF0gPSB7CisgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3Iu
eCgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAq
IGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci55KCkpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSks
CisgICAgICAgIDAKKyAgICB9OworICAgIAorICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShwaXhl
bFZhbHVlLCAzLCBvZmZzZXQpOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBv
ZmZzZXQsIExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBm
YWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvcikKKy8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZy
b20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMg
dGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KK3Zv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7Ci0gICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWxW
ZWN0b3IpOwotfQorICAgIEFTU0VSVChzdGFydFkpOwogCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsK
ICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCBv
ZmZzZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7
CisgICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0
IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IG5leHRSb3dT
dGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
KworICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVl
cy4KKyAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVm
dCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgorICAgICAgICAvLyBGb3IgZWFjaCBw
aXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4K
KyAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7CisgICAgICAgIGFscGhhV2luZG93LnNl
dFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRl
bShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KworICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3Rh
cnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNl
dFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0
YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93
U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGlu
dCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50
IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4
ZWxTaXplKSB7Ci0gICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JO
b3JtYWwob2Zmc2V0KSk7CisgICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOworICAgICAg
ICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
Y0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBh
bHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTI5Miw3ICszMzksNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYQogICAgIHBhcmFtZXRl
cnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBw
YXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+
eUVuZCk7CiB9CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
KExpZ2h0aW5nRGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKQordm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSkKIHsKICAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9ICgoZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lIC0gMSkgKiAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDEpKSAvIHNfbWluaW1h
bFJlY3REaW1lbnNpb247CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CkBAIC0z
MjYsNyArMzczLDcgQEAgaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWMoTGlnaHRpbmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGEKICAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSk7CiB9CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoTGlnaHRp
bmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitp
bmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYg
ZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewog
ICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1p
Y2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RS
QURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCkBAIC0zNDYsMTIgKzM5MywxNCBA
QCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSogcGl4ZWxz
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9
IDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFRpbWluZ1Njb3BlIHNjb3BlKCJGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmciLCAxMDApOworCiAgICAgZGF0YS5waXhlbHMgPSBwaXhlbHM7
CiAgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKICAgICBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwogICAg
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKICAgICBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Ig
PSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJlZCgpLCBtX2xpZ2h0aW5nQ29sb3IuZ3Jl
ZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7CisgICAgcGFpbnRpbmdEYXRhLmludGlhbExp
Z2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChtX2xpZ2h0aW5nQ29sb3IucmVk
KCksIG1fbGlnaHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3IuYmx1ZSgpKTsKICAg
ICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7CiAKICAgICAv
LyBUb3AgbGVmdC4KQEAgLTM3NCwyNCArNDIzLDI0IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
ICAgICAgICAgLy8gVG9wIHJvdy4KICAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKICAgICAg
ICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zm
c2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEu
dG9wUm93Tm9ybWFsKG9mZnNldCkpOworICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLnRv
cFJvd05vcm1hbChvZmZzZXQpKTsKIAogICAgICAgICAvLyBCb3R0b20gcm93LgogICAgICAgICBv
ZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAg
ICAgICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJv
dHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRp
djMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CiAgICAgfQog
CiAgICAgaWYgKGhlaWdodCA+PSAzKSB7CiAgICAgICAgIC8vIExlZnQgY29sdW1uLgogICAgICAg
ICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgICAgICBmb3Ig
KGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBpbmxpbmVTZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNG
YWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8v
IFJpZ2h0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwogICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIs
IGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVh
c2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1u
Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAogICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+
PSAzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCmluZGV4IGI0MWEyZTEyMjcwNjdhNTRkY2Q2NjI5OWFmZDgzNTZiYWY2
YmU0NGEuLmU1MTkzZGE1Y2I0YzkxYmI4NWUwNGZiNDk3NmM4NjNhMTliZmYzZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5oCkBAIC02Myw2ICs2Myw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIERpZmZ1c2VMaWdodGlu
ZywKICAgICAgICAgU3BlY3VsYXJMaWdodGluZwogICAgIH07CisgICAgCisgICAgc3RydWN0IEFs
cGhhV2luZG93IHsKKyAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07CisgICAgICAgIAor
ICAgICAgICAvLyBUaGUgaW1wbGVtdGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJp
bmcgaW5kaWNlcyBlYXNpZXIuCisgICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNv
bnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgICAgIHVpbnQ4
X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9CisK
KyAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMF1bMV07IH0KKyAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMV1bMV07IH0KKyAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KKworICAgICAgICB2b2lkIHNldFRv
cCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZh
bHVlOyB9CisgICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxw
aGFbMl1bMV0gPSB2YWx1ZTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2
YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFJpZ2h0
KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICAgICAg
dm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVl
OyB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKKyAgICAgICAgICAgIGFs
cGhhWzFdID0gYWxwaGFbMl07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2hp
ZnQoKQorICAgICAgICB7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7CisgICAgICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7
CisgICAgICAgIH0KKyAgICB9OwogCiAgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7CiAgICAgICAg
IC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0
YQpAQCAtNzYsNyArMTEwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBJbnRTaXplIHRv
cFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSW50U2l6ZSBs
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6
ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKICAgICAg
ICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CiAg
ICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
CiAgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKQEAgLTEwMCwyMyArMTM0LDIwIEBAIHByb3RlY3RlZDoKICAgICBGRUxpZ2h0aW5nKEZpbHRl
ciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgYm9vbCBkcmF3TGln
aHRpbmcoVWludDhDbGFtcGVkQXJyYXkqLCBpbnQsIGludCk7Ci0gICAgaW5saW5lIHZvaWQgaW5s
aW5lU2V0UGl4ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYsCi0gICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKIAotICAgIC8vIE5vdCB3b3J0
aCB0byBpbmxpbmUgZXZlcnkgb2NjdXJlbmNlIG9mIHNldFBpeGVsLgotICAgIHZvaWQgc2V0UGl4
ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYs
Ci0gICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZh
Y3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKKyAgICB2b2lkIHNldFBpeGVsKGludCBvZmZz
ZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9y
bWFsVmVjdG9yKTsKKyAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3Is
IGZsb2F0IGFscGhhKTsKIAogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CiAKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5KExpZ2h0aW5nRGF0YSYsIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogCi0gICAgaW5s
aW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChMaWdodGluZ0RhdGEmLCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYpOworICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBM
aWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0
WCwgaW50IHN0YXJ0WSk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdo
dGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAKICNpZiBDUFUo
QVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9uZW50KTsK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihMaWdodGluZ0RhdGEmLCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJik7CisgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24o
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwog
I2VuZGlmCiAKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5k
ZXggMTQ1MDI5MDI0YTM2MDlmMmExZWUxM2VjMzk4ZmJiNDRmOTU5ZGZkNS4uYzIyMmVjMTc0OTc2
YWE2MjUxNTcxNjFiODIzYmYwODE2MGZjNDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtMjEsOCArMjEs
NyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBMaWdo
dFNvdXJjZV9oCi0jZGVmaW5lIExpZ2h0U291cmNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQxLDIw
ICs0MCwxNSBAQCBlbnVtIExpZ2h0VHlwZSB7CiAKIGNsYXNzIExpZ2h0U291cmNlIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGlnaHRTb3VyY2U+IHsKIHB1YmxpYzoKLQotICAgIC8vIExpZ2h0IHZlY3Rv
cnMgbXVzdCBiZSBjYWxjdWxhdGVkIGZvciBldmVyeSBwaXhlbCBkdXJpbmcKLSAgICAvLyBwYWlu
dGluZy4gSXQgaXMgZXhwZW5zaXZlIHRvIHBhc3MgYWxsIHRoZXNlIGFyZ3VtZW50cyB0bwotICAg
IC8vIGEgZnJlcXVlbnRseSBjYWxsZWQgZnVuY3Rpb24sIGVzcGVjaWFsbHkgYmVjYXVzZSBub3Qg
YWxsCi0gICAgLy8gbGlnaHQgc291cmNlcyByZXF1aXJlIGFsbCBvZiB0aGVtLiBJbnN0ZWFkLCB3
ZSBqdXN0IHBhc3MKLSAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVy
ZQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICAvLyBTVkdGRUxpZ2h0aW5nIGFs
c28gdXNlIHRoZW0KKyAgICBzdHJ1Y3QgQ29tcHV0ZWRMaWdodGluZ0RhdGEgewogICAgICAgICBG
bG9hdFBvaW50M0QgbGlnaHRWZWN0b3I7CiAgICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZlY3Rv
cjsKICAgICAgICAgZmxvYXQgbGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIC8vIFByaXZhdGUg
bWVtYmVycworICAgIH07CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAgQ29t
cHV0ZWRMaWdodGluZ0RhdGEgaW50aWFsTGlnaHRpbmdEYXRhOwogICAgICAgICBGbG9hdFBvaW50
M0QgZGlyZWN0aW9uVmVjdG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgcHJpdmF0ZUNvbG9yVmVj
dG9yOwogICAgICAgICBmbG9hdCBjb25lQ3V0T2ZmTGltaXQ7CiAgICAgICAgIGZsb2F0IGNvbmVG
dWxsTGlnaHQ7CiAgICAgICAgIGludCBzcGVjdWxhckV4cG9uZW50OwpAQCAtNzIsNyArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRh
JikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBo
YSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUi
IGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSwgZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29t
cHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgeikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNldEF6aW11dGgoZmxvYXQp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNldEVsZXZhdGlvbihmbG9hdCkg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTkxLDQgKzg1LDcgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gTGlnaHRTb3VyY2VfaAorI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0xJR0hUU09VUkNFKENsYXNzTmFtZSwgVHlwZSkgXAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGlnaHRTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291
cmNlLnR5cGUoKSA9PSBXZWJDb3JlOjpUeXBlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDdjYzQ4NWNlNzBkNTU4YjRiMTE2
YjViNzU5ZTVhMjk1ZjY1MzI0NTcuLjQ0NTgzMDU0M2ExOTNkZjE2OTRiMmQ0NTRhZGM2OTY1MjRk
MWM1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAtMzksMTIgKzM5LDE5IEBAIHZv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmKQogewog
fQogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KQorTGlnaHRTb3VyY2U6OkNv
bXB1dGVkTGlnaHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5n
RGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0CiB7
Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsK
LSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwot
ICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0g
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLmxlbmd0aCgpOworICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvciA9IHsKKyAgICAgICAg
bV9wb3NpdGlvbi54KCkgLSB4LAorICAgICAgICBtX3Bvc2l0aW9uLnkoKSAtIHksCisgICAgICAg
IG1fcG9zaXRpb24ueigpIC0gegorICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICBsaWdo
dFZlY3RvciwKKyAgICAgICAgeyB9LAorICAgICAgICBsaWdodFZlY3Rvci5sZW5ndGgoKQorICAg
IH07CiB9CiAKIGJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WChmbG9hdCB4KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuaAppbmRleCA1ZDQzMDg3MWY5ZmVhNGY3MWFjYmUyOWE0Yjg1OTlkZmI2MDlhYmY4
Li5lZTczZGQ2ZDIwYTZhYjFiOGQ0ODVhZTJlODJkNWQ1NjkzMmUzMDg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuaApAQCAtMjAsOCArMjAsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBQb2ludExpZ2h0U291cmNlX2gKLSNkZWZpbmUgUG9pbnRMaWdo
dFNvdXJjZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZi5oPgpAQCAtNDEsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRa
KGZsb2F0KSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShQYWludGluZ0Rh
dGEmKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHksIGZsb2F0IHopIG92ZXJyaWRlOworICAgIENvbXB1dGVkTGlnaHRpbmdE
YXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwg
aW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC01Nyw0ICs1Niw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIFBvaW50TGlnaHRTb3VyY2VfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MSUdIVFNP
VVJDRShQb2ludExpZ2h0U291cmNlLCBMU19QT0lOVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApp
bmRleCAwZjdmYjU2N2Q2Y2Q2MTI1MmUzMWRkODkzNWE4OWUwY2MyNjFhNjdmLi40MzVkNjAzNGZl
Y2VhM2NmZGM4ZTlmZDA5NTJiY2VlMmFhMzA0MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CkBAIC00MiwxMCArNDIsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQg
PSAwLjAxNmY7CiAKIHZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAgIHBhaW50aW5nRGF0YS5wcml2YXRlQ29sb3JW
ZWN0b3IgPSBwYWludGluZ0RhdGEuY29sb3JWZWN0b3I7Ci0gICAgcGFpbnRpbmdEYXRhLmRpcmVj
dGlvblZlY3Rvci5zZXRYKG1fZGlyZWN0aW9uLngoKSAtIG1fcG9zaXRpb24ueCgpKTsKLSAgICBw
YWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLnNldFkobV9kaXJlY3Rpb24ueSgpIC0gbV9wb3Np
dGlvbi55KCkpOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iuc2V0WihtX2RpcmVj
dGlvbi56KCkgLSBtX3Bvc2l0aW9uLnooKSk7CisgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZl
Y3RvciA9IG1fZGlyZWN0aW9uIC0gbV9wb3NpdGlvbjsKICAgICBwYWludGluZ0RhdGEuZGlyZWN0
aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOwogCiAgICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7
CkBAIC03MCwyMCArNjcsMjMgQEAgdm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMjsKIH0KIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50
aW5nRGF0YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6
KQorTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFNwb3RMaWdodFNvdXJjZTo6Y29t
cHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0CiB7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwotICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
ci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLmxlbmd0aCgpOwotCi0gICAgZmxvYXQg
Y29zaW5lT2ZBbmdsZSA9IChwYWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEu
ZGlyZWN0aW9uVmVjdG9yKSAvIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICBG
bG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7CisgICAgICAgIG1fcG9zaXRpb24ueCgpIC0geCwK
KyAgICAgICAgbV9wb3NpdGlvbi55KCkgLSB5LAorICAgICAgICBtX3Bvc2l0aW9uLnooKSAtIHoK
KyAgICB9OworICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRWZWN0b3IubGVuZ3Ro
KCk7CisKKyAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9yICogcGFpbnRpbmdE
YXRhLmRpcmVjdGlvblZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKICAgICBpZiAoY29zaW5l
T2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKICAgICAgICAgLy8gTm8g
bGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKLSAgICAgICAgcGFp
bnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgoMC4wZik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5j
b2xvclZlY3Rvci5zZXRZKDAuMGYpOwotICAgICAgICBwYWludGluZ0RhdGEuY29sb3JWZWN0b3Iu
c2V0WigwLjBmKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgbGlnaHRWZWN0b3IsCisgICAgICAgICAgICB7IH0sCisgICAgICAgICAgICBsaWdodFZlY3Rv
ckxlbmd0aAorICAgICAgICB9OwogICAgIH0KIAogICAgIC8vIFNldCB0aGUgY29sb3Igb2YgdGhl
IHBpeGVsCkBAIC0xMDYsOSArMTA2LDExIEBAIHZvaWQgU3BvdExpZ2h0U291cmNlOjp1cGRhdGVQ
YWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQKICAgICBp
ZiAobGlnaHRTdHJlbmd0aCA+IDEuMGYpCiAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxLjBmOwog
Ci0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgocGFpbnRpbmdEYXRhLnByaXZhdGVD
b2xvclZlY3Rvci54KCkgKiBsaWdodFN0cmVuZ3RoKTsKLSAgICBwYWludGluZ0RhdGEuY29sb3JW
ZWN0b3Iuc2V0WShwYWludGluZ0RhdGEucHJpdmF0ZUNvbG9yVmVjdG9yLnkoKSAqIGxpZ2h0U3Ry
ZW5ndGgpOwotICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRaKHBhaW50aW5nRGF0YS5w
cml2YXRlQ29sb3JWZWN0b3IueigpICogbGlnaHRTdHJlbmd0aCk7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgbGlnaHRWZWN0b3IsCisgICAgICAgIHBhaW50aW5nRGF0YS5pbnRpYWxMaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IgKiBsaWdodFN0cmVuZ3RoLAorICAgICAgICBsaWdodFZlY3Rvckxlbmd0
aAorICAgIH07CiB9CiAKIGJvb2wgU3BvdExpZ2h0U291cmNlOjpzZXRYKGZsb2F0IHgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaAppbmRleCA1MzllYTA2YWYyZjkxMzZiYmE2ZTEzMjliNTgzZDQ3NTczY2Jl
MTZkLi40MTk5MWFmN2ZiOTg5YTk2ZjdkOTM1OTU2MjEwNWM4Njc4NDg3MjU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmgKQEAgLTIwLDggKzIwLDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgU3BvdExpZ2h0U291cmNlX2gKLSNkZWZpbmUgU3BvdExpZ2h0
U291cmNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvUmVmLmg+CkBAIC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldExp
bWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5pdFBhaW50aW5n
RGF0YShQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZVBhaW50aW5nRGF0
YShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIG92ZXJyaWRlOworICAgIENv
bXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOwogCkBAIC03Niw0ICs3NSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIFNwb3RMaWdodFNvdXJjZV9oCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0xJR0hUU09VUkNFKFNwb3RMaWdodFNvdXJjZSwgTFNfU1BPVCkK
</data>
<flag name="review"
          id="346661"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>