<?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>47370</bug_id>
          
          <creation_ts>2010-10-07 12:46:27 -0700</creation_ts>
          <short_desc>Make line boxes place themselves correctly in the inline direction.</short_desc>
          <delta_ts>2010-10-07 14:17:01 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291194</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-07 12:46:27 -0700</bug_when>
    <thetext>Make line boxes place themselves correctly in the inline direction.  This means the y-position for vertical line boxes will now be correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291202</commentid>
    <comment_count>1</comment_count>
      <attachid>70135</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-07 12:51:42 -0700</bug_when>
    <thetext>Created attachment 70135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291239</commentid>
    <comment_count>2</comment_count>
      <attachid>70135</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 14:03:10 -0700</bug_when>
    <thetext>Comment on attachment 70135
Patch

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

Looks good other than the &amp; issue.

&gt; WebCore/rendering/style/RenderStyle.h:643
&gt; +    void getTextShadowExtent(int &amp;top, int &amp;right, int &amp;bottom, int &amp;left) const { getShadowExtent(textShadow(), top, right, bottom, left); }
&gt; +    void getTextShadowHorizontalExtent(int &amp;left, int &amp;right) const { getShadowHorizontalExtent(textShadow(), left, right); }
&gt; +    void getTextShadowVerticalExtent(int &amp;top, int &amp;bottom) const { getShadowVerticalExtent(textShadow(), top, bottom); }
&gt; +    void getTextShadowInlineDirectionExtent(int &amp;logicalLeft, int &amp;logicalRight) { getShadowInlineDirectionExtent(textShadow(), logicalLeft, logicalRight); }

The &amp; are on the wrong side.

&gt; WebCore/rendering/style/RenderStyle.h:662
&gt; +    void getBoxShadowExtent(int &amp;top, int &amp;right, int &amp;bottom, int &amp;left) const { getShadowExtent(boxShadow(), top, right, bottom, left); }
&gt; +    void getBoxShadowHorizontalExtent(int &amp;left, int &amp;right) const { getShadowHorizontalExtent(boxShadow(), left, right); }
&gt; +    void getBoxShadowVerticalExtent(int &amp;top, int &amp;bottom) const { getShadowVerticalExtent(boxShadow(), top, bottom); }
&gt; +    void getBoxShadowInlineDirectionExtent(int &amp;logicalLeft, int &amp;logicalRight) { getShadowInlineDirectionExtent(boxShadow(), logicalLeft, logicalRight); }

Here too.

&gt; WebCore/rendering/style/RenderStyle.h:1278
&gt; +    void getShadowExtent(const ShadowData*, int &amp;top, int &amp;right, int &amp;bottom, int &amp;left) const;
&gt; +    void getShadowHorizontalExtent(const ShadowData*, int &amp;left, int &amp;right) const;
&gt; +    void getShadowVerticalExtent(const ShadowData*, int &amp;top, int &amp;bottom) const;
&gt; +    void getShadowInlineDirectionExtent(const ShadowData* shadow, int &amp;logicalLeft, int &amp;logicalRight) const
&gt; +    {
&gt; +        return isHorizontalWritingMode() ? getShadowHorizontalExtent(shadow, logicalLeft, logicalRight) : getShadowVerticalExtent(shadow, logicalLeft, logicalRight);
&gt; +    }

And here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291250</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-07 14:17:01 -0700</bug_when>
    <thetext>Fixed in r69341.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70135</attachid>
            <date>2010-10-07 12:51:42 -0700</date>
            <delta_ts>2010-10-07 14:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35644</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTAtMDcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM3MAorICAgICAgICAKKyAgICAg
ICAgTWFrZSBsaW5lIGJveCBwbGFjZW1lbnQgaW4gdGhlIGlubGluZSBkaXJlY3Rpb24gd3JpdGlu
Zy1tb2RlLWF3YXJlLiAgTGluZXMgbm93IHNldCB0aGVpciB5LXBvc2l0aW9uIGluc3RlYWQgb2Yg
eC1wb3NpdGlvbgorICAgICAgICB3aGVuIHZlcnRpY2FsLgorICAgICAgICAKKyAgICAgICAgUmVm
YWN0b3JlZCBzaGFkb3cgb3ZlcmZsb3cgdG8gZ2l2ZSB0ZXh0LXNoYWRvdyB0aGUgc2FtZSBoZWxw
ZXJzIGluIFJlbmRlclN0eWxlIHRoYXQgYm94LXNoYWRvdyBoYXMgc28gdGhhdCB0aGUgc2hhZG93
LXdhbGtpbmcgbG9vcCBpbgorICAgICAgICBwbGFjZUJveGVzSW5JbmxpbmVEaXJlY3Rpb24gY2Fu
IGJlIHJlcGxhY2VkIHdpdGggdGhlIGhlbHBlci4KKworICAgICAgICBPdmVyZmxvdyBoYWQgdG8g
YmUgcGF0Y2hlZCB0byBiZSB3cml0aW5nLW1vZGUtYXdhcmUgc28gdGhhdCB0aGUgY29ycmVjdCBw
aHlzaWNhbCBkaXJlY3Rpb25zIHdvdWxkIGJlIHNldCBmb3IgdmVydGljYWwgbGluZQorICAgICAg
ICBib3hlcy4KKworICAgICAgICBWZXJ0aWNhbCBsaW5lcyBhcmUgc3RpbGwgbm90IHRlc3RhYmxl
IHVudGlsIHRoZXkgY2FuIGJlIHBsYWNlZCBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLiAgVGhlbiB0
aGUgcmVuZGVyIHRyZWUgZHVtcHMKKyAgICAgICAgYmVjb21lIG1lYW5pbmdmdWwgKGV2ZW4gaWYg
dGhlIHBpeGVsIHJlc3VsdHMgbG9vayBob3JyaWJsZSkuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmxvZ2ljYWxSaWdodCk6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxv
d0JveDo6bG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVGbG93Qm94Ojpsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVGbG93Qm94Ojpsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUZsb3dCb3g6OmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNldElubGluZURpcmVjdGlvbk92ZXJmbG93UG9z
aXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9z
aXRpb25zRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRTaGFkb3dFeHRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFNoYWRvd0hvcml6b250YWxFeHRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpnZXRUZXh0U2hhZG93RXh0ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpnZXRUZXh0U2hhZG93SG9yaXpvbnRhbEV4dGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Z2V0VGV4dFNoYWRvd1ZlcnRpY2FsRXh0ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpnZXRUZXh0U2hhZG93SW5saW5l
RGlyZWN0aW9uRXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpnZXRC
b3hTaGFkb3dFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmdldEJv
eFNoYWRvd0hvcml6b250YWxFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxh
Z3M6OmdldEJveFNoYWRvd1ZlcnRpY2FsRXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVy
aXRlZEZsYWdzOjpnZXRCb3hTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmdldFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudCk6
CisKIDIwMTAtMTAtMDcgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
CShyZXZpc2lvbiA2OTIyMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIGxvZ2lj
YWxMZWZ0IHBvc2l0aW9uIGlzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxpbmUgYm94IGluIGEgaG9y
aXpvbnRhbCBsaW5lIGFuZCB0aGUgdG9wIGVkZ2UgaW4gYSB2ZXJ0aWNhbCBsaW5lLgogICAgIGlu
dCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuICFtX2lzVmVydGljYWwgPyBtX3ggOiBtX3k7
IH0KKyAgICBpbnQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSAr
IGxvZ2ljYWxXaWR0aCgpOyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChpbnQgbGVmdCkKICAg
ICB7CiAgICAgICAgIGlmICghbV9pc1ZlcnRpY2FsKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAJKHJldmlzaW9uIDY5MzE5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MywyNCArMjUzLDI0IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0ZvckYKICAgICB9CiB9CiAKLWludCBJbmxpbmVG
bG93Qm94OjpwbGFjZUJveGVzSW5JbmxpbmVEaXJlY3Rpb24oaW50IHhQb3MsIGJvb2wmIG5lZWRz
V29yZFNwYWNpbmcsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0
YU1hcCkKK2ludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5JbmxpbmVEaXJlY3Rpb24oaW50
IGxvZ2ljYWxMZWZ0LCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXApCiB7CiAgICAgLy8gU2V0IG91ciB4IHBvc2l0
aW9uLgotICAgIHNldFgoeFBvcyk7CisgICAgc2V0TG9naWNhbExlZnQobG9naWNhbExlZnQpOwog
Ci0gICAgaW50IGxlZnRMYXlvdXRPdmVyZmxvdyA9IHhQb3M7Ci0gICAgaW50IHJpZ2h0TGF5b3V0
T3ZlcmZsb3cgPSB4UG9zOwotICAgIGludCBsZWZ0VmlzdWFsT3ZlcmZsb3cgPSB4UG9zOwotICAg
IGludCByaWdodFZpc3VhbE92ZXJmbG93ID0geFBvczsKKyAgICBpbnQgbG9naWNhbExlZnRMYXlv
dXRPdmVyZmxvdyA9IGxvZ2ljYWxMZWZ0OworICAgIGludCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVy
ZmxvdyA9IGxvZ2ljYWxMZWZ0OworICAgIGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0g
bG9naWNhbExlZnQ7CisgICAgaW50IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbG9naWNh
bExlZnQ7CiAKLSAgICBpbnQgYm94U2hhZG93TGVmdDsKLSAgICBpbnQgYm94U2hhZG93UmlnaHQ7
Ci0gICAgcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5nZXRCb3hTaGFkb3dIb3Jpem9u
dGFsRXh0ZW50KGJveFNoYWRvd0xlZnQsIGJveFNoYWRvd1JpZ2h0KTsKKyAgICBpbnQgYm94U2hh
ZG93TG9naWNhbExlZnQ7CisgICAgaW50IGJveFNoYWRvd0xvZ2ljYWxSaWdodDsKKyAgICByZW5k
ZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmdldEJveFNoYWRvd0lubGluZURpcmVjdGlvbkV4
dGVudChib3hTaGFkb3dMb2dpY2FsTGVmdCwgYm94U2hhZG93TG9naWNhbFJpZ2h0KTsKIAotICAg
IGxlZnRWaXN1YWxPdmVyZmxvdyA9IG1pbih4UG9zICsgYm94U2hhZG93TGVmdCwgbGVmdFZpc3Vh
bE92ZXJmbG93KTsKKyAgICBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKGxvZ2ljYWxM
ZWZ0ICsgYm94U2hhZG93TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cpOwog
Ci0gICAgaW50IHN0YXJ0WCA9IHhQb3M7Ci0gICAgeFBvcyArPSBib3JkZXJMb2dpY2FsTGVmdCgp
ICsgcGFkZGluZ0xvZ2ljYWxMZWZ0KCk7CisgICAgaW50IHN0YXJ0TG9naWNhbExlZnQgPSBsb2dp
Y2FsTGVmdDsKKyAgICBsb2dpY2FsTGVmdCArPSBib3JkZXJMb2dpY2FsTGVmdCgpICsgcGFkZGlu
Z0xvZ2ljYWxMZWZ0KCk7CiAgICAgCiAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENo
aWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgaWYgKGN1
cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpKSB7CkBAIC0yNzgsODEgKzI3OCw4OSBAQCBpbnQgSW5s
aW5lRmxvd0JveDo6cGxhY2VCb3hlc0luSW5saW5lRGlyCiAgICAgICAgICAgICBSZW5kZXJUZXh0
KiBydCA9IHRvUmVuZGVyVGV4dCh0ZXh0LT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmIChy
dC0+dGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcg
JiYgaXNTcGFjZU9yTmV3bGluZShydC0+Y2hhcmFjdGVycygpW3RleHQtPnN0YXJ0KCldKSkKLSAg
ICAgICAgICAgICAgICAgICAgeFBvcyArPSBydC0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCku
d29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gcnQtPnN0
eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAg
bmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJzKClbdGV4
dC0+ZW5kKCldKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRleHQtPnNldFgoeFBvcyk7
CisgICAgICAgICAgICB0ZXh0LT5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGludCBzdHJva2VPdmVyZmxvdyA9IHN0YXRpY19jYXN0PGludD4o
Y2VpbGYocnQtPnN0eWxlKCktPnRleHRTdHJva2VXaWR0aCgpIC8gMi4wZikpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBJZiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZSwgd2Ugc2hv
dWxkIGZhY3RvciB0aGF0IGludG8gcmlnaHQgbGF5b3V0IG92ZXJmbG93LiAoRXZlbiBpbiBSVEws
IGxldHRlci1zcGFjaW5nIGlzCiAgICAgICAgICAgICAvLyBhcHBsaWVkIHRvIHRoZSByaWdodCwg
c28gdGhpcyBpcyBub3QgYW4gaXNzdWUgd2l0aCBsZWZ0IG92ZXJmbG93LgogICAgICAgICAgICAg
aW50IGxldHRlclNwYWNpbmcgPSBtaW4oMCwgKGludClydC0+c3R5bGUobV9maXJzdExpbmUpLT5m
b250KCkubGV0dGVyU3BhY2luZygpKTsKLSAgICAgICAgICAgIHJpZ2h0TGF5b3V0T3ZlcmZsb3cg
PSBtYXgoeFBvcyArIHRleHQtPmxvZ2ljYWxXaWR0aCgpIC0gbGV0dGVyU3BhY2luZywgcmlnaHRM
YXlvdXRPdmVyZmxvdyk7CisgICAgICAgICAgICBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdyA9
IG1heChsb2dpY2FsTGVmdCArIHRleHQtPmxvZ2ljYWxXaWR0aCgpIC0gbGV0dGVyU3BhY2luZywg
bG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3cpOwogCiAgICAgICAgICAgICBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5maW5kKHN0
YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKSk7CiAgICAgICAgICAgICBHbHlwaE92ZXJm
bG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0
LT5zZWNvbmQuc2Vjb25kOwogCi0gICAgICAgICAgICBpbnQgbGVmdEdseXBoT3ZlcmZsb3cgPSAt
c3Ryb2tlT3ZlcmZsb3cgLSAoZ2x5cGhPdmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ctPmxlZnQgOiAw
KTsKLSAgICAgICAgICAgIGludCByaWdodEdseXBoT3ZlcmZsb3cgPSBzdHJva2VPdmVyZmxvdyAt
IGxldHRlclNwYWNpbmcgKyAoZ2x5cGhPdmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ctPnJpZ2h0IDog
MCk7CisgICAgICAgICAgICBpbnQgbG9naWNhbExlZnRHbHlwaE92ZXJmbG93ID0gLXN0cm9rZU92
ZXJmbG93IC0gKGdseXBoT3ZlcmZsb3cgPyBnbHlwaE92ZXJmbG93LT5sZWZ0IDogMCk7CisgICAg
ICAgICAgICBpbnQgbG9naWNhbFJpZ2h0R2x5cGhPdmVyZmxvdyA9IHN0cm9rZU92ZXJmbG93IC0g
bGV0dGVyU3BhY2luZyArIChnbHlwaE92ZXJmbG93ID8gZ2x5cGhPdmVyZmxvdy0+cmlnaHQgOiAw
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IGNoaWxkT3ZlcmZsb3dMZWZ0ID0gbGVm
dEdseXBoT3ZlcmZsb3c7Ci0gICAgICAgICAgICBpbnQgY2hpbGRPdmVyZmxvd1JpZ2h0ID0gcmln
aHRHbHlwaE92ZXJmbG93OwotICAgICAgICAgICAgZm9yIChjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3cgPSBydC0+c3R5bGUoKS0+dGV4dFNoYWRvdygpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdy0+
bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGRPdmVyZmxvd0xlZnQgPSBtaW4oY2hpbGRP
dmVyZmxvd0xlZnQsIHNoYWRvdy0+eCgpIC0gc2hhZG93LT5ibHVyKCkgKyBsZWZ0R2x5cGhPdmVy
Zmxvdyk7Ci0gICAgICAgICAgICAgICAgY2hpbGRPdmVyZmxvd1JpZ2h0ID0gbWF4KGNoaWxkT3Zl
cmZsb3dSaWdodCwgc2hhZG93LT54KCkgKyBzaGFkb3ctPmJsdXIoKSArIHJpZ2h0R2x5cGhPdmVy
Zmxvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxlZnRWaXN1
YWxPdmVyZmxvdyA9IG1pbih4UG9zICsgY2hpbGRPdmVyZmxvd0xlZnQsIGxlZnRWaXN1YWxPdmVy
Zmxvdyk7Ci0gICAgICAgICAgICByaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHhQb3MgKyB0ZXh0
LT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkT3ZlcmZsb3dSaWdodCwgcmlnaHRWaXN1YWxPdmVyZmxv
dyk7CisgICAgICAgICAgICBpbnQgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0ID0gbG9naWNhbExl
ZnRHbHlwaE92ZXJmbG93OworICAgICAgICAgICAgaW50IGNoaWxkT3ZlcmZsb3dMb2dpY2FsUmln
aHQgPSBsb2dpY2FsUmlnaHRHbHlwaE92ZXJmbG93OworICAgICAgICAgICAgaW50IHRleHRTaGFk
b3dMb2dpY2FsTGVmdDsKKyAgICAgICAgICAgIGludCB0ZXh0U2hhZG93TG9naWNhbFJpZ2h0Owor
ICAgICAgICAgICAgcnQtPnN0eWxlKG1fZmlyc3RMaW5lKS0+Z2V0VGV4dFNoYWRvd0lubGluZURp
cmVjdGlvbkV4dGVudCh0ZXh0U2hhZG93TG9naWNhbExlZnQsIHRleHRTaGFkb3dMb2dpY2FsUmln
aHQpOworICAgICAgICAgICAgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0ID0gbWluKGNoaWxkT3Zl
cmZsb3dMb2dpY2FsTGVmdCwgdGV4dFNoYWRvd0xvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIGNo
aWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQgPSBtYXgoY2hpbGRPdmVyZmxvd0xvZ2ljYWxSaWdodCwg
dGV4dFNoYWRvd0xvZ2ljYWxSaWdodCk7CisgICAgICAgICAgICBsb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93ID0gbWluKGxvZ2ljYWxMZWZ0ICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0LCBsb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93KTsKKyAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZpc3VhbE92
ZXJmbG93ID0gbWF4KGxvZ2ljYWxMZWZ0ICsgdGV4dC0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZE92
ZXJmbG93TG9naWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHhQb3MgKz0gdGV4dC0+bG9naWNhbFdpZHRoKCk7CisgICAgICAg
ICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5wYXJlbnQoKS0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBjdXJyLT5zZXRY
KHhQb3MpOworICAgICAgICAgICAgICAgICAgICBjdXJyLT5zZXRMb2dpY2FsTGVmdChsb2dpY2Fs
TGVmdCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBPdXIg
b2Zmc2V0IHRoYXQgd2UgY2FjaGUgbmVlZHMgdG8gYmUgZnJvbSB0aGUgZWRnZSBvZiB0aGUgcmln
aHQgYm9yZGVyIGJveCBhbmQKICAgICAgICAgICAgICAgICAgICAgLy8gbm90IHRoZSBsZWZ0IGJv
cmRlciBib3guICBXZSBoYXZlIHRvIHN1YnRyYWN0IHx4fCBmcm9tIHRoZSB3aWR0aCBvZiB0aGUg
YmxvY2sKICAgICAgICAgICAgICAgICAgICAgLy8gKHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBmcm9t
IHRoZSByb290IGxpbmUgYm94KS4KLSAgICAgICAgICAgICAgICAgICAgY3Vyci0+c2V0WChyb290
KCktPmJsb2NrKCktPndpZHRoKCkgLSB4UG9zKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+
c2V0TG9naWNhbExlZnQocm9vdCgpLT5ibG9jaygpLT5sb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxM
ZWZ0KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIHBvc2l0aW9uZWQgb2JqZWN0
IGhhcyBubyBlZmZlY3Qgb24gdGhlIHdpZHRoLgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGN1cnItPnJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIp
OwotICAgICAgICAgICAgICAgIHhQb3MgKz0gZmxvdy0+bWFyZ2luTG9naWNhbExlZnQoKTsKLSAg
ICAgICAgICAgICAgICB4UG9zID0gZmxvdy0+cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKHhQ
b3MsIG5lZWRzV29yZFNwYWNpbmcsIHRleHRCb3hEYXRhTWFwKTsKLSAgICAgICAgICAgICAgICB4
UG9zICs9IGZsb3ctPm1hcmdpbkxvZ2ljYWxSaWdodCgpOwotICAgICAgICAgICAgICAgIGxlZnRM
YXlvdXRPdmVyZmxvdyA9IG1pbihsZWZ0TGF5b3V0T3ZlcmZsb3csIGZsb3ctPmxlZnRMYXlvdXRP
dmVyZmxvdygpKTsKLSAgICAgICAgICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHJp
Z2h0TGF5b3V0T3ZlcmZsb3csIGZsb3ctPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKSk7Ci0gICAgICAg
ICAgICAgICAgbGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKGxlZnRWaXN1YWxPdmVyZmxvdywgZmxv
dy0+bGVmdFZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAgICAgIHJpZ2h0VmlzdWFsT3Zl
cmZsb3cgPSBtYXgocmlnaHRWaXN1YWxPdmVyZmxvdywgZmxvdy0+cmlnaHRWaXN1YWxPdmVyZmxv
dygpKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBmbG93LT5tYXJnaW5Mb2dpY2Fs
TGVmdCgpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ID0gZmxvdy0+cGxhY2VCb3hlc0lu
SW5saW5lRGlyZWN0aW9uKGxvZ2ljYWxMZWZ0LCBuZWVkc1dvcmRTcGFjaW5nLCB0ZXh0Qm94RGF0
YU1hcCk7CisgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gZmxvdy0+bWFyZ2luTG9naWNh
bFJpZ2h0KCk7CisgICAgICAgICAgICAgICAgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdyA9IG1p
bihsb2dpY2FsTGVmdExheW91dE92ZXJmbG93LCBmbG93LT5sb2dpY2FsTGVmdExheW91dE92ZXJm
bG93KCkpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93ID0gbWF4
KGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93LCBmbG93LT5sb2dpY2FsUmlnaHRMYXlvdXRPdmVy
ZmxvdygpKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWlu
KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGZsb3ctPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3coKSk7CisgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBtYXgo
bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3csIGZsb3ctPmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJm
bG93KCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+cmVuZGVyZXIoKS0+aXNMaXN0
TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFya2VyKGN1cnItPnJlbmRlcmVyKCkpLT5pc0luc2lk
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgeFBvcyArPSBjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5t
YXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICAgICAgY3Vyci0+c2V0WCh4UG9zKTsKLSAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIGJveCBjYW4gaGF2ZSBhIGRpZmZlcmVu
dCB3cml0aW5nLW1vZGUgdGhhbiB0aGUgb3ZlcmFsbCBsaW5lLCBzbyB0aGlzIGlzIGEgYml0IGNv
bXBsaWNhdGVkLgorICAgICAgICAgICAgICAgIC8vIEp1c3QgZ2V0IGFsbCB0aGUgcGh5c2ljYWwg
bWFyZ2luIGFuZCBvdmVyZmxvdyB2YWx1ZXMgYnkgaGFuZCBiYXNlZCBvZmYgfGlzSG9yaXpvbnRh
bHwuCisgICAgICAgICAgICAgICAgYm9vbCBpc0hvcml6b250YWwgPSByZW5kZXJlcigpLT5zdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworCisgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxMZWZ0TWFyZ2luID0gaXNIb3Jpem9udGFsID8gY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+
bWFyZ2luTGVmdCgpIDogY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+bWFyZ2luVG9wKCk7CisgICAg
ICAgICAgICAgICAgaW50IGxvZ2ljYWxSaWdodE1hcmdpbiA9IGlzSG9yaXpvbnRhbCA/IGN1cnIt
PmJveE1vZGVsT2JqZWN0KCktPm1hcmdpblJpZ2h0KCkgOiBjdXJyLT5ib3hNb2RlbE9iamVjdCgp
LT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsb2dp
Y2FsTGVmdCArPSBsb2dpY2FsTGVmdE1hcmdpbjsKKyAgICAgICAgICAgICAgICBjdXJyLT5zZXRY
KGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
UmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChjdXJyLT5yZW5kZXJlcigpKTsKLSAgICAgICAg
ICAgICAgICBpbnQgY2hpbGRMZWZ0T3ZlcmZsb3cgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpID8g
MCA6IGJveC0+bGVmdExheW91dE92ZXJmbG93KCk7Ci0gICAgICAgICAgICAgICAgaW50IGNoaWxk
UmlnaHRPdmVyZmxvdyA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBjdXJyLT5sb2dpY2FsV2lk
dGgoKSA6IGJveC0+cmlnaHRMYXlvdXRPdmVyZmxvdygpOworCisgICAgICAgICAgICAgICAgaW50
IGNoaWxkT3ZlcmZsb3dMb2dpY2FsTGVmdCA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyAwIDog
KGlzSG9yaXpvbnRhbCA/IGJveC0+bGVmdExheW91dE92ZXJmbG93KCkgOiBib3gtPnRvcExheW91
dE92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgIGludCBjaGlsZE92ZXJmbG93TG9naWNhbFJp
Z2h0ID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSA/IGN1cnItPmxvZ2ljYWxXaWR0aCgpIDogKGlz
SG9yaXpvbnRhbCA/IGJveC0+cmlnaHRMYXlvdXRPdmVyZmxvdygpIDogYm94LT5ib3R0b21MYXlv
dXRPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsZWZ0TGF5
b3V0T3ZlcmZsb3cgPSBtaW4oeFBvcyArIGNoaWxkTGVmdE92ZXJmbG93LCBsZWZ0TGF5b3V0T3Zl
cmZsb3cpOwotICAgICAgICAgICAgICAgIHJpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBtYXgoeFBvcyAr
IGNoaWxkUmlnaHRPdmVyZmxvdywgcmlnaHRMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgICAgICAg
ICAgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdyA9IG1pbihsb2dpY2FsTGVmdCArIGNoaWxkT3Zl
cmZsb3dMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgICAg
ICAgICAgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBtYXgobG9naWNhbExlZnQgKyBjaGls
ZE92ZXJmbG93TG9naWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdyk7CiAKLSAg
ICAgICAgICAgICAgICBsZWZ0VmlzdWFsT3ZlcmZsb3cgPSBtaW4oeFBvcyArIGJveC0+bGVmdFZp
c3VhbE92ZXJmbG93KCksIGxlZnRWaXN1YWxPdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgcmln
aHRWaXN1YWxPdmVyZmxvdyA9IG1heCh4UG9zICsgYm94LT5yaWdodFZpc3VhbE92ZXJmbG93KCks
IHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmlzdWFs
T3ZlcmZsb3cgPSBtaW4obG9naWNhbExlZnQgKyAoaXNIb3Jpem9udGFsID8gYm94LT5sZWZ0Vmlz
dWFsT3ZlcmZsb3coKSA6IGJveC0+dG9wVmlzdWFsT3ZlcmZsb3coKSksIGxvZ2ljYWxMZWZ0Vmlz
dWFsT3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93
ID0gbWF4KGxvZ2ljYWxMZWZ0ICsgKGlzSG9yaXpvbnRhbCA/IGJveC0+cmlnaHRWaXN1YWxPdmVy
ZmxvdygpIDogYm94LT5ib3R0b21WaXN1YWxPdmVyZmxvdygpKSwgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3cpOwogICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgeFBvcyArPSBjdXJy
LT5sb2dpY2FsV2lkdGgoKSArIGN1cnItPmJveE1vZGVsT2JqZWN0KCktPm1hcmdpblJpZ2h0KCk7
CisgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCkgKyBs
b2dpY2FsUmlnaHRNYXJnaW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB4UG9zICs9IGJvcmRlckxvZ2ljYWxSaWdodCgpICsgcGFkZGluZ0xvZ2ljYWxSaWdodCgpOwot
ICAgIHNldExvZ2ljYWxXaWR0aCh4UG9zIC0gc3RhcnRYKTsKLSAgICByaWdodFZpc3VhbE92ZXJm
bG93ID0gbWF4KHgoKSArIGxvZ2ljYWxXaWR0aCgpICsgYm94U2hhZG93UmlnaHQsIHJpZ2h0Vmlz
dWFsT3ZlcmZsb3cpOwotICAgIHJpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBtYXgoeCgpICsgbG9naWNh
bFdpZHRoKCksIHJpZ2h0TGF5b3V0T3ZlcmZsb3cpOworICAgIGxvZ2ljYWxMZWZ0ICs9IGJvcmRl
ckxvZ2ljYWxSaWdodCgpICsgcGFkZGluZ0xvZ2ljYWxSaWdodCgpOworICAgIHNldExvZ2ljYWxX
aWR0aChsb2dpY2FsTGVmdCAtIHN0YXJ0TG9naWNhbExlZnQpOworICAgIGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93ID0gbWF4KGxvZ2ljYWxMZWZ0ICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyk7CisgICAgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZs
b3cgPSBtYXgobG9naWNhbExlZnQsIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93KTsKIAotICAg
IHNldElubGluZURpcmVjdGlvbk92ZXJmbG93UG9zaXRpb25zKGxlZnRMYXlvdXRPdmVyZmxvdywg
cmlnaHRMYXlvdXRPdmVyZmxvdywgbGVmdFZpc3VhbE92ZXJmbG93LCByaWdodFZpc3VhbE92ZXJm
bG93KTsKLSAgICByZXR1cm4geFBvczsKKyAgICBzZXRJbmxpbmVEaXJlY3Rpb25PdmVyZmxvd1Bv
c2l0aW9ucyhsb2dpY2FsTGVmdExheW91dE92ZXJmbG93LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVy
ZmxvdywgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZs
b3cpOworICAgIHJldHVybiBsb2dpY2FsTGVmdDsKIH0KIAogdm9pZCBJbmxpbmVGbG93Qm94Ojph
ZGp1c3RNYXhBc2NlbnRBbmREZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQs
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA2OTIyMSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDE1
ICsxODUsMjEgQEAgcHVibGljOgogICAgIGludCBsZWZ0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7
IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGVmdExheW91dE92ZXJmbG93KCkgOiBt
X3g7IH0KICAgICBpbnQgcmlnaHRMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3Zl
cmZsb3cgPyBtX292ZXJmbG93LT5yaWdodExheW91dE92ZXJmbG93KCkgOiBtX3ggKyBtX2xvZ2lj
YWxXaWR0aDsgfQogICAgIEludFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpIDogSW50UmVj
dChtX3gsIG1feSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KLQorICAgIGlu
dCBsb2dpY2FsTGVmdExheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxlZnRMYXlvdXRPdmVyZmxvdygp
IDogdG9wTGF5b3V0T3ZlcmZsb3coKTsgfQorICAgIGludCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyByaWdodExheW91dE92ZXJmbG93KCkgOiBib3R0b21MYXlvdXRPdmVyZmxv
dygpOyB9CisgICAgCiAgICAgaW50IHRvcFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnRvcFZpc3VhbE92ZXJmbG93KCkgOiBtX3k7IH0KICAg
ICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8g
bV9vdmVyZmxvdy0+Ym90dG9tVmlzdWFsT3ZlcmZsb3coKSA6IG1feSArIGxvZ2ljYWxIZWlnaHQo
KTsgfQogICAgIGludCBsZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJm
bG93ID8gbV9vdmVyZmxvdy0+bGVmdFZpc3VhbE92ZXJmbG93KCkgOiBtX3g7IH0KICAgICBpbnQg
cmlnaHRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJm
bG93LT5yaWdodFZpc3VhbE92ZXJmbG93KCkgOiBtX3ggKyBtX2xvZ2ljYWxXaWR0aDsgfQogICAg
IEludFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/
IG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpIDogSW50UmVjdChtX3gsIG1feSwgbV9s
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KLQotICAgIHZvaWQgc2V0SW5saW5lRGly
ZWN0aW9uT3ZlcmZsb3dQb3NpdGlvbnMoaW50IGxlZnRMYXlvdXRPdmVyZmxvdywgaW50IHJpZ2h0
TGF5b3V0T3ZlcmZsb3csIGludCBsZWZ0VmlzdWFsT3ZlcmZsb3csIGludCByaWdodFZpc3VhbE92
ZXJmbG93KTsKLSAgICB2b2lkIHNldEJsb2NrRGlyZWN0aW9uT3ZlcmZsb3dQb3NpdGlvbnMoaW50
IHRvcExheW91dE92ZXJmbG93LCBpbnQgYm90dG9tTGF5b3V0T3ZlcmZsb3csIGludCB0b3BWaXN1
YWxPdmVyZmxvdywgaW50IGJvdHRvbVZpc3VhbE92ZXJmbG93LCBpbnQgYm94SGVpZ2h0KTsKKyAg
ICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVy
KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsZWZ0VmlzdWFsT3ZlcmZs
b3coKSA6IHRvcFZpc3VhbE92ZXJmbG93KCk7IH0KKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gcmlnaHRWaXN1YWxPdmVyZmxvdygpIDogYm90dG9tVmlzdWFsT3Zl
cmZsb3coKTsgfQorICAgIAorICAgIHZvaWQgc2V0SW5saW5lRGlyZWN0aW9uT3ZlcmZsb3dQb3Np
dGlvbnMoaW50IGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3csIGludCBsb2dpY2FsUmlnaHRMYXlv
dXRPdmVyZmxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3Zl
cmZsb3cpOworICAgIHZvaWQgc2V0QmxvY2tEaXJlY3Rpb25PdmVyZmxvd1Bvc2l0aW9ucyhpbnQg
bG9naWNhbFRvcExheW91dE92ZXJmbG93LCBpbnQgbG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcFZpc3VhbE92ZXJmbG93LCBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93LCBpbnQg
Ym94TG9naWNhbEhlaWdodCk7CiAKIHByb3RlY3RlZDoKICAgICBPd25QdHI8UmVuZGVyT3ZlcmZs
b3c+IG1fb3ZlcmZsb3c7CkBAIC0yMTUsMTggKzIyMSwzMSBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYK
IH07CiAKLWlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OnNldElubGluZURpcmVjdGlvbk92ZXJm
bG93UG9zaXRpb25zKGludCBsZWZ0TGF5b3V0T3ZlcmZsb3csIGludCByaWdodExheW91dE92ZXJm
bG93LCBpbnQgbGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdykgCitp
bmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRJbmxpbmVEaXJlY3Rpb25PdmVyZmxvd1Bvc2l0
aW9ucyhpbnQgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdywgaW50IGxvZ2ljYWxSaWdodExheW91
dE92ZXJmbG93LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgbG9n
aWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cpIAogeyAKICAgICBpZiAoIW1fb3ZlcmZsb3cpIHsKLSAg
ICAgICAgaWYgKGxlZnRMYXlvdXRPdmVyZmxvdyA9PSBtX3ggJiYgcmlnaHRMYXlvdXRPdmVyZmxv
dyA9PSBtX3ggKyBtX2xvZ2ljYWxXaWR0aCAmJiBsZWZ0VmlzdWFsT3ZlcmZsb3cgPT0gbV94ICYm
IHJpZ2h0VmlzdWFsT3ZlcmZsb3cgPT0gbV94ICsgbV9sb2dpY2FsV2lkdGgpCisgICAgICAgIGlm
IChsb2dpY2FsTGVmdExheW91dE92ZXJmbG93ID09IGxvZ2ljYWxMZWZ0KCkgJiYgbG9naWNhbFJp
Z2h0TGF5b3V0T3ZlcmZsb3cgPT0gbG9naWNhbFJpZ2h0KCkgCisgICAgICAgICAgICAmJiBsb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93ID09IGxvZ2ljYWxMZWZ0KCkgJiYgbG9naWNhbFJpZ2h0Vmlz
dWFsT3ZlcmZsb3cgPT0gbG9naWNhbFJpZ2h0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fb3ZlcmZsb3cgPSBhZG9wdFB0cihuZXcgUmVuZGVyT3ZlcmZsb3coSW50UmVjdChtX3gs
IG1feSwgbV9sb2dpY2FsV2lkdGgsIG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9u
dCgpLmhlaWdodCgpKSkpOyAgICAKKyAgICAgICAgCisgICAgICAgIGludCB3aWR0aCA9IGlzVmVy
dGljYWwoKSA/IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmhlaWdodCgp
IDogbG9naWNhbFdpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBpc1ZlcnRpY2FsKCkgPyBs
b2dpY2FsV2lkdGgoKSA6IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmhl
aWdodCgpOworICAgICAgICAKKyAgICAgICAgbV9vdmVyZmxvdyA9IGFkb3B0UHRyKG5ldyBSZW5k
ZXJPdmVyZmxvdyhJbnRSZWN0KG1feCwgbV95LCB3aWR0aCwgaGVpZ2h0KSkpOyAgIAogICAgIH0K
IAotICAgIG1fb3ZlcmZsb3ctPnNldExlZnRMYXlvdXRPdmVyZmxvdyhsZWZ0TGF5b3V0T3ZlcmZs
b3cpOwotICAgIG1fb3ZlcmZsb3ctPnNldFJpZ2h0TGF5b3V0T3ZlcmZsb3cocmlnaHRMYXlvdXRP
dmVyZmxvdyk7Ci0gICAgbV9vdmVyZmxvdy0+c2V0TGVmdFZpc3VhbE92ZXJmbG93KGxlZnRWaXN1
YWxPdmVyZmxvdyk7IAotICAgIG1fb3ZlcmZsb3ctPnNldFJpZ2h0VmlzdWFsT3ZlcmZsb3cocmln
aHRWaXN1YWxPdmVyZmxvdyk7ICAKKyAgICBpZiAoaXNWZXJ0aWNhbCgpKSB7CisgICAgICAgIG1f
b3ZlcmZsb3ctPnNldFRvcExheW91dE92ZXJmbG93KGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3cp
OworICAgICAgICBtX292ZXJmbG93LT5zZXRCb3R0b21MYXlvdXRPdmVyZmxvdyhsb2dpY2FsUmln
aHRMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgIG1fb3ZlcmZsb3ctPnNldFRvcFZpc3VhbE92ZXJm
bG93KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cpOyAKKyAgICAgICAgbV9vdmVyZmxvdy0+c2V0
Qm90dG9tVmlzdWFsT3ZlcmZsb3cobG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cpOyAgCisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9vdmVyZmxvdy0+c2V0TGVmdExheW91dE92ZXJmbG93KGxvZ2lj
YWxMZWZ0TGF5b3V0T3ZlcmZsb3cpOworICAgICAgICBtX292ZXJmbG93LT5zZXRSaWdodExheW91
dE92ZXJmbG93KGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93KTsKKyAgICAgICAgbV9vdmVyZmxv
dy0+c2V0TGVmdFZpc3VhbE92ZXJmbG93KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cpOyAKKyAg
ICAgICAgbV9vdmVyZmxvdy0+c2V0UmlnaHRWaXN1YWxPdmVyZmxvdyhsb2dpY2FsUmlnaHRWaXN1
YWxPdmVyZmxvdyk7CisgICAgfQogfQogCiBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRC
bG9ja0RpcmVjdGlvbk92ZXJmbG93UG9zaXRpb25zKGludCB0b3BMYXlvdXRPdmVyZmxvdywgaW50
IGJvdHRvbUxheW91dE92ZXJmbG93LCBpbnQgdG9wVmlzdWFsT3ZlcmZsb3csIGludCBib3R0b21W
aXN1YWxPdmVyZmxvdywgaW50IGJveEhlaWdodCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gNjkzMTkpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
OSArMjk0LDkgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbgogCiB2
b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShS
b290SW5saW5lQm94KiBsaW5lQm94LCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RSdW4s
IEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwKQogewotICAgIC8vIEZpcnN0IGRl
dGVybWluZSBvdXIgdG90YWwgd2lkdGguCi0gICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxh
YmxlTG9naWNhbFdpZHRoRm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIGZpcnN0TGluZSk7Ci0gICAg
aW50IHRvdFdpZHRoID0gbGluZUJveC0+Z2V0Rmxvd1NwYWNpbmdMb2dpY2FsV2lkdGgoKTsKKyAg
ICAvLyBGaXJzdCBkZXRlcm1pbmUgb3VyIHRvdGFsIGxvZ2ljYWwgd2lkdGguCisgICAgaW50IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUobG9naWNh
bEhlaWdodCgpLCBmaXJzdExpbmUpOworICAgIGludCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxpbmVC
b3gtPmdldEZsb3dTcGFjaW5nTG9naWNhbFdpZHRoKCk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFj
aW5nID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbnVtU3BhY2VzID0gMDsKICAgICBFVGV4dEFsaWdu
IHRleHRBbGlnbiA9IHN0eWxlKCktPnRleHRBbGlnbigpOwpAQCAtMzIwLDcgKzMyMCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb24KIAogICAgICAgICAgICAgaWYg
KGludCBsZW5ndGggPSBydC0+dGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFy
LT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShydC0+Y2hh
cmFjdGVycygpW3ItPm1fc3RhcnRdKSkKLSAgICAgICAgICAgICAgICAgICAgdG90V2lkdGggKz0g
cnQtPnN0eWxlKGZpcnN0TGluZSktPmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAg
ICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCArPSBydC0+c3R5bGUoZmlyc3RMaW5lKS0+Zm9udCgp
LndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1Nw
YWNlT3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJzKClbci0+bV9zdG9wIC0gMV0pICYmIHItPm1fc3Rv
cCA9PSBsZW5ndGg7ICAgICAgICAgIAogICAgICAgICAgICAgfQogICAgICAgICAgICAgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+IGZhbGxiYWNrRm9udHM7CkBAIC0zMzAsNyArMzMwLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gcnQtPnN0eWxlKCktPmh5cGhl
blN0cmluZygpOwogICAgICAgICAgICAgICAgIGh5cGhlbldpZHRoID0gcnQtPnN0eWxlKGZpcnN0
TGluZSktPmZvbnQoKS53aWR0aChUZXh0UnVuKGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5
cGhlblN0cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgci0+bV9i
b3gtPnNldExvZ2ljYWxXaWR0aChydC0+d2lkdGgoci0+bV9zdGFydCwgci0+bV9zdG9wIC0gci0+
bV9zdGFydCwgdG90V2lkdGgsIGZpcnN0TGluZSwgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJm
bG93KSArIGh5cGhlbldpZHRoKTsKKyAgICAgICAgICAgIHItPm1fYm94LT5zZXRMb2dpY2FsV2lk
dGgocnQtPndpZHRoKHItPm1fc3RhcnQsIHItPm1fc3RvcCAtIHItPm1fc3RhcnQsIHRvdGFsTG9n
aWNhbFdpZHRoLCBmaXJzdExpbmUsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdykgKyBo
eXBoZW5XaWR0aCk7CiAgICAgICAgICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHItPm1fYm94LT5pc1RleHQoKSk7CiAgICAgICAgICAg
ICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4
dEJveERhdGFNYXAuYWRkKHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyLT5tX2JveCksIG1h
a2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkp
KS5maXJzdDsKQEAgLTM0NSwzNyArMzQ1LDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb24KICAgICAgICAgfSBlbHNlIGlmICghci0+bV9vYmplY3QtPmlzUmVuZGVy
SW5saW5lKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJC
b3goci0+bV9vYmplY3QpOwogICAgICAgICAgICAgcmVuZGVyQm94LT5jb21wdXRlTG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgICAgICByLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKHJlbmRlckJveC0+
d2lkdGgoKSk7Ci0gICAgICAgICAgICB0b3RXaWR0aCArPSByZW5kZXJCb3gtPm1hcmdpbkxlZnQo
KSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQoKTsKKyAgICAgICAgICAgIHItPm1fYm94LT5zZXRM
b2dpY2FsV2lkdGgobG9naWNhbFdpZHRoRm9yQ2hpbGQocmVuZGVyQm94KSk7CisgICAgICAgICAg
ICB0b3RhbExvZ2ljYWxXaWR0aCArPSBtYXJnaW5TdGFydEZvckNoaWxkKHJlbmRlckJveCkgKyBt
YXJnaW5FbmRGb3JDaGlsZChyZW5kZXJCb3gpOwogICAgICAgICB9CiAKLSAgICAgICAgdG90V2lk
dGggKz0gci0+bV9ib3gtPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICB0b3RhbExvZ2ljYWxXaWR0
aCArPSByLT5tX2JveC0+bG9naWNhbFdpZHRoKCk7CiAgICAgfQogCiAgICAgLy8gQXJtZWQgd2l0
aCB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGxpbmUgKHdpdGhvdXQganVzdGlmaWNhdGlvbiksCiAg
ICAgLy8gd2Ugbm93IGV4YW1pbmUgb3VyIHRleHQtYWxpZ24gcHJvcGVydHkgaW4gb3JkZXIgdG8g
ZGV0ZXJtaW5lIHdoZXJlIHRvIHBvc2l0aW9uIHRoZQogICAgIC8vIG9iamVjdHMgaG9yaXpvbnRh
bGx5LiAgVGhlIHRvdGFsIHdpZHRoIG9mIHRoZSBsaW5lIGNhbiBiZSBpbmNyZWFzZWQgaWYgd2Ug
ZW5kIHVwCiAgICAgLy8ganVzdGlmeWluZyB0ZXh0LgotICAgIGludCB4ID0gbG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKGhlaWdodCgpLCBmaXJzdExpbmUpOworICAgIGludCBsb2dpY2FsTGVmdCA9
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIGZpcnN0TGluZSk7CiAg
ICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKICAgICAgICAgY2FzZSBMRUZUOgogICAgICAgICBjYXNl
IFdFQktJVF9MRUZUOgogICAgICAgICAgICAgLy8gVGhlIGRpcmVjdGlvbiBvZiB0aGUgYmxvY2sg
c2hvdWxkIGRldGVybWluZSB3aGF0IGhhcHBlbnMgd2l0aCB3aWRlIGxpbmVzLiAgSW4KICAgICAg
ICAgICAgIC8vIHBhcnRpY3VsYXIgd2l0aCBSVEwgYmxvY2tzLCB3aWRlIGxpbmVzIHNob3VsZCBz
dGlsbCBzcGlsbCBvdXQgdG8gdGhlIGxlZnQuCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdFdpZHRoID4g
YXZhaWxhYmxlV2lkdGggJiYgdHJhaWxpbmdTcGFjZVJ1bikKLSAgICAgICAgICAgICAgICAgICAg
dHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChtYXgoMCwgdHJhaWxpbmdT
cGFjZVJ1bi0+bV9ib3gtPmxvZ2ljYWxXaWR0aCgpIC0gdG90V2lkdGggKyBhdmFpbGFibGVXaWR0
aCkpOworICAgICAgICAgICAgICAgIGlmICh0b3RhbExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCAmJiB0cmFpbGluZ1NwYWNlUnVuKQorICAgICAgICAgICAgICAgICAgICB0cmFp
bGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNl
UnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RhbExvZ2ljYWxXaWR0aCArIGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBp
ZiAodHJhaWxpbmdTcGFjZVJ1bikKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVJ1
bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0
b3RXaWR0aCA+IGF2YWlsYWJsZVdpZHRoKQotICAgICAgICAgICAgICAgICAgICB4IC09ICh0b3RX
aWR0aCAtIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0b3RhbExv
Z2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAg
bG9naWNhbExlZnQgLT0gKHRvdGFsTG9naWNhbFdpZHRoIC0gYXZhaWxhYmxlTG9naWNhbFdpZHRo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpVU1RJ
Rlk6CiAgICAgICAgICAgICBpZiAobnVtU3BhY2VzICYmICFyZWFjaGVkRW5kICYmICFsaW5lQm94
LT5lbmRzV2l0aEJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdTcGFjZVJ1
bikgewotICAgICAgICAgICAgICAgICAgICB0b3RXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5t
X2JveC0+bG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdp
ZHRoIC09IHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
ICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aCgwKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zODUsOCArMzg1
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgICAgICAg
ICAgbnVtU3BhY2VzID0gMDsKICAgICAgICAgICAgIC8vIGZvciByaWdodCB0byBsZWZ0IGZhbGwg
dGhyb3VnaCB0byByaWdodCBhbGlnbmVkCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdFdpZHRoID4gYXZh
aWxhYmxlV2lkdGggJiYgdHJhaWxpbmdTcGFjZVJ1bikKLSAgICAgICAgICAgICAgICAgICAgdHJh
aWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChtYXgoMCwgdHJhaWxpbmdTcGFj
ZVJ1bi0+bV9ib3gtPmxvZ2ljYWxXaWR0aCgpIC0gdG90V2lkdGggKyBhdmFpbGFibGVXaWR0aCkp
OworICAgICAgICAgICAgICAgIGlmICh0b3RhbExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCAmJiB0cmFpbGluZ1NwYWNlUnVuKQorICAgICAgICAgICAgICAgICAgICB0cmFpbGlu
Z1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNlUnVu
LT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RhbExvZ2ljYWxXaWR0aCArIGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICBjYXNlIFJJR0hUOgpAQCAtMzk2LDMxICszOTYsMzEgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgICAgICAgICAgLy8gc2lkZSBvZiB0aGUgYmxvY2su
CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHRyYWlsaW5nU3BhY2VSdW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG90V2lkdGggLT0gdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPmxvZ2ljYWxXaWR0aCgpOwor
ICAgICAgICAgICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVu
LT5tX2JveC0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3Bh
Y2VSdW4tPm1fYm94LT5zZXRMb2dpY2FsV2lkdGgoMCk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0b3RXaWR0aCA8IGF2YWlsYWJsZVdpZHRoKQotICAgICAgICAgICAg
ICAgICAgICB4ICs9IGF2YWlsYWJsZVdpZHRoIC0gdG90V2lkdGg7CisgICAgICAgICAgICAgICAg
aWYgKHRvdGFsTG9naWNhbFdpZHRoIDwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKQorICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBhdmFpbGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExv
Z2ljYWxXaWR0aDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
dFdpZHRoID4gYXZhaWxhYmxlV2lkdGggJiYgdHJhaWxpbmdTcGFjZVJ1bikgewotICAgICAgICAg
ICAgICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgw
LCB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RXaWR0aCArIGF2
YWlsYWJsZVdpZHRoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdFdpZHRoIC09IHRyYWlsaW5n
U3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBpZiAodG90
YWxMb2dpY2FsV2lkdGggPiBhdmFpbGFibGVMb2dpY2FsV2lkdGggJiYgdHJhaWxpbmdTcGFjZVJ1
bikgeworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0TG9n
aWNhbFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCkg
LSB0b3RhbExvZ2ljYWxXaWR0aCArIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkpOworICAgICAgICAg
ICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+
bG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHggKz0gYXZhaWxhYmxlV2lkdGggLSB0b3RXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGg7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDRU5URVI6
CiAgICAgICAgIGNhc2UgV0VCS0lUX0NFTlRFUjoKICAgICAgICAgICAgIGludCB0cmFpbGluZ1Nw
YWNlV2lkdGggPSAwOwogICAgICAgICAgICAgaWYgKHRyYWlsaW5nU3BhY2VSdW4pIHsKLSAgICAg
ICAgICAgICAgICB0b3RXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVdpZHRoID0gbWluKHRyYWlsaW5n
U3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKSwgKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lk
dGggKyAxKSAvIDIpOworICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoIC09IHRyYWls
aW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgICAgICB0cmFp
bGluZ1NwYWNlV2lkdGggPSBtaW4odHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPmxvZ2ljYWxXaWR0
aCgpLCAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGggKyAxKSAvIDIp
OwogICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5zZXRMb2dpY2FsV2lk
dGgobWF4KDAsIHRyYWlsaW5nU3BhY2VXaWR0aCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgICAg
ICB4ICs9IG1heCgoYXZhaWxhYmxlV2lkdGggLSB0b3RXaWR0aCkgLyAyLCAwKTsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsTGVmdCArPSBtYXgoKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFs
TG9naWNhbFdpZHRoKSAvIDIsIDApOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHggKz0gdG90V2lkdGggPiBhdmFpbGFibGVXaWR0aCA/IChhdmFpbGFibGVXaWR0aCAtIHRvdFdp
ZHRoKSA6IChhdmFpbGFibGVXaWR0aCAtIHRvdFdpZHRoKSAvIDIgLSB0cmFpbGluZ1NwYWNlV2lk
dGg7CisgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdG90YWxMb2dpY2FsV2lkdGggPiBh
dmFpbGFibGVMb2dpY2FsV2lkdGggPyAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dp
Y2FsV2lkdGgpIDogKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIHRvdGFsTG9naWNhbFdpZHRoKSAv
IDIgLSB0cmFpbGluZ1NwYWNlV2lkdGg7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQ0Myw5ICs0NDMsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9u
CiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGp1c3RpZnkgdGV4dCBpZiB3aGl0ZXNwYWNlIGlz
IGNvbGxhcHNlZC4KICAgICAgICAgICAgICAgICBpZiAoci0+bV9vYmplY3QtPnN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlQWRkID0gKGF2
YWlsYWJsZVdpZHRoIC0gdG90V2lkdGgpICogc3BhY2VzIC8gbnVtU3BhY2VzOworICAgICAgICAg
ICAgICAgICAgICBzcGFjZUFkZCA9IChhdmFpbGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExvZ2lj
YWxXaWR0aCkgKiBzcGFjZXMgLyBudW1TcGFjZXM7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PElubGluZVRleHRCb3gqPihyLT5tX2JveCktPnNldFNwYWNlQWRkKHNwYWNlQWRkKTsK
LSAgICAgICAgICAgICAgICAgICAgdG90V2lkdGggKz0gc3BhY2VBZGQ7CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IHNwYWNlQWRkOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBudW1TcGFjZXMgLT0gc3BhY2VzOwogICAgICAgICAgICAgICAgIGlm
ICghbnVtU3BhY2VzKQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVJbmxpbmVEaXJlY3Rpb24KICAgICAvLyBUaGUgd2lkdGhzIG9mIGFsbCBydW5zIGFyZSBub3cg
a25vd24uICBXZSBjYW4gbm93IHBsYWNlIGV2ZXJ5IGlubGluZSBib3ggKGFuZAogICAgIC8vIGNv
bXB1dGUgYWNjdXJhdGUgd2lkdGhzIGZvciB0aGUgaW5saW5lIGZsb3cgYm94ZXMpLgogICAgIG5l
ZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKLSAgICBsaW5lQm94LT5wbGFjZUJveGVzSW5JbmxpbmVE
aXJlY3Rpb24oeCwgbmVlZHNXb3JkU3BhY2luZywgdGV4dEJveERhdGFNYXApOworICAgIGxpbmVC
b3gtPnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbihsb2dpY2FsTGVmdCwgbmVlZHNXb3JkU3Bh
Y2luZywgdGV4dEJveERhdGFNYXApOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxv
Y2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlS
dW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERh
dGFNYXApCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZp
c2lvbiA2OTIyMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTM1LDUyICs5MzUsNTIgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0
QmxlbmRlZEZvbnRTaXplKGludAogICAgIGZvbnQoKS51cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rv
cik7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OmdldEJveFNoYWRvd0V4dGVudChpbnQgJnRvcCwg
aW50ICZyaWdodCwgaW50ICZib3R0b20sIGludCAmbGVmdCkgY29uc3QKK3ZvaWQgUmVuZGVyU3R5
bGU6OmdldFNoYWRvd0V4dGVudChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGludCAmdG9wLCBp
bnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSwgaW50ICZsZWZ0KSBjb25zdAogewogICAgIHRvcCA9IDA7
CiAgICAgcmlnaHQgPSAwOwogICAgIGJvdHRvbSA9IDA7CiAgICAgbGVmdCA9IDA7CiAKLSAgICBm
b3IgKGNvbnN0IFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHRoaXMtPmJveFNoYWRvdygpOyBib3hT
aGFkb3c7IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpKSB7Ci0gICAgICAgIGlmIChib3hT
aGFkb3ctPnN0eWxlKCkgPT0gSW5zZXQpCisgICAgZm9yICggOyBzaGFkb3c7IHNoYWRvdyA9IHNo
YWRvdy0+bmV4dCgpKSB7CisgICAgICAgIGlmIChzaGFkb3ctPnN0eWxlKCkgPT0gSW5zZXQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IGJsdXJBbmRTcHJlYWQgPSBib3hTaGFk
b3ctPmJsdXIoKSArIGJveFNoYWRvdy0+c3ByZWFkKCk7CisgICAgICAgIGludCBibHVyQW5kU3By
ZWFkID0gc2hhZG93LT5ibHVyKCkgKyBzaGFkb3ctPnNwcmVhZCgpOwogCi0gICAgICAgIHRvcCA9
IG1pbih0b3AsIGJveFNoYWRvdy0+eSgpIC0gYmx1ckFuZFNwcmVhZCk7Ci0gICAgICAgIHJpZ2h0
ID0gbWF4KHJpZ2h0LCBib3hTaGFkb3ctPngoKSArIGJsdXJBbmRTcHJlYWQpOwotICAgICAgICBi
b3R0b20gPSBtYXgoYm90dG9tLCBib3hTaGFkb3ctPnkoKSArIGJsdXJBbmRTcHJlYWQpOwotICAg
ICAgICBsZWZ0ID0gbWluKGxlZnQsIGJveFNoYWRvdy0+eCgpIC0gYmx1ckFuZFNwcmVhZCk7Cisg
ICAgICAgIHRvcCA9IG1pbih0b3AsIHNoYWRvdy0+eSgpIC0gYmx1ckFuZFNwcmVhZCk7CisgICAg
ICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBzaGFkb3ctPngoKSArIGJsdXJBbmRTcHJlYWQpOworICAg
ICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBzaGFkb3ctPnkoKSArIGJsdXJBbmRTcHJlYWQpOwor
ICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHNoYWRvdy0+eCgpIC0gYmx1ckFuZFNwcmVhZCk7CiAg
ICAgfQogfQogCi12b2lkIFJlbmRlclN0eWxlOjpnZXRCb3hTaGFkb3dIb3Jpem9udGFsRXh0ZW50
KGludCAmbGVmdCwgaW50ICZyaWdodCkgY29uc3QKK3ZvaWQgUmVuZGVyU3R5bGU6OmdldFNoYWRv
d0hvcml6b250YWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBpbnQgJmxlZnQsIGlu
dCAmcmlnaHQpIGNvbnN0CiB7CiAgICAgbGVmdCA9IDA7CiAgICAgcmlnaHQgPSAwOwogCi0gICAg
Zm9yIChjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSB0aGlzLT5ib3hTaGFkb3coKTsgYm94
U2hhZG93OyBib3hTaGFkb3cgPSBib3hTaGFkb3ctPm5leHQoKSkgewotICAgICAgICBpZiAoYm94
U2hhZG93LT5zdHlsZSgpID09IEluc2V0KQorICAgIGZvciAoIDsgc2hhZG93OyBzaGFkb3cgPSBz
aGFkb3ctPm5leHQoKSkgeworICAgICAgICBpZiAoc2hhZG93LT5zdHlsZSgpID09IEluc2V0KQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBibHVyQW5kU3ByZWFkID0gYm94U2hh
ZG93LT5ibHVyKCkgKyBib3hTaGFkb3ctPnNwcmVhZCgpOworICAgICAgICBpbnQgYmx1ckFuZFNw
cmVhZCA9IHNoYWRvdy0+Ymx1cigpICsgc2hhZG93LT5zcHJlYWQoKTsKIAotICAgICAgICBsZWZ0
ID0gbWluKGxlZnQsIGJveFNoYWRvdy0+eCgpIC0gYmx1ckFuZFNwcmVhZCk7Ci0gICAgICAgIHJp
Z2h0ID0gbWF4KHJpZ2h0LCBib3hTaGFkb3ctPngoKSArIGJsdXJBbmRTcHJlYWQpOworICAgICAg
ICBsZWZ0ID0gbWluKGxlZnQsIHNoYWRvdy0+eCgpIC0gYmx1ckFuZFNwcmVhZCk7CisgICAgICAg
IHJpZ2h0ID0gbWF4KHJpZ2h0LCBzaGFkb3ctPngoKSArIGJsdXJBbmRTcHJlYWQpOwogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6Z2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoaW50ICZ0
b3AsIGludCAmYm90dG9tKSBjb25zdAordm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93VmVydGlj
YWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBpbnQgJnRvcCwgaW50ICZib3R0b20p
IGNvbnN0CiB7CiAgICAgdG9wID0gMDsKICAgICBib3R0b20gPSAwOwogCi0gICAgZm9yIChjb25z
dCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSB0aGlzLT5ib3hTaGFkb3coKTsgYm94U2hhZG93OyBi
b3hTaGFkb3cgPSBib3hTaGFkb3ctPm5leHQoKSkgewotICAgICAgICBpZiAoYm94U2hhZG93LT5z
dHlsZSgpID09IEluc2V0KQorICAgIGZvciAoIDsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5l
eHQoKSkgeworICAgICAgICBpZiAoc2hhZG93LT5zdHlsZSgpID09IEluc2V0KQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGludCBibHVyQW5kU3ByZWFkID0gYm94U2hhZG93LT5ibHVy
KCkgKyBib3hTaGFkb3ctPnNwcmVhZCgpOworICAgICAgICBpbnQgYmx1ckFuZFNwcmVhZCA9IHNo
YWRvdy0+Ymx1cigpICsgc2hhZG93LT5zcHJlYWQoKTsKIAotICAgICAgICB0b3AgPSBtaW4odG9w
LCBib3hTaGFkb3ctPnkoKSAtIGJsdXJBbmRTcHJlYWQpOwotICAgICAgICBib3R0b20gPSBtYXgo
Ym90dG9tLCBib3hTaGFkb3ctPnkoKSArIGJsdXJBbmRTcHJlYWQpOworICAgICAgICB0b3AgPSBt
aW4odG9wLCBzaGFkb3ctPnkoKSAtIGJsdXJBbmRTcHJlYWQpOworICAgICAgICBib3R0b20gPSBt
YXgoYm90dG9tLCBzaGFkb3ctPnkoKSArIGJsdXJBbmRTcHJlYWQpOwogICAgIH0KIH0KIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA2OTIyMSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzNyw2ICs2MzcsMTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IFNoYWRvd0RhdGEq
IHRleHRTaGFkb3coKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNoYWRv
dzsgfQorICAgIHZvaWQgZ2V0VGV4dFNoYWRvd0V4dGVudChpbnQgJnRvcCwgaW50ICZyaWdodCwg
aW50ICZib3R0b20sIGludCAmbGVmdCkgY29uc3QgeyBnZXRTaGFkb3dFeHRlbnQodGV4dFNoYWRv
dygpLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOyB9CisgICAgdm9pZCBnZXRUZXh0U2hhZG93
SG9yaXpvbnRhbEV4dGVudChpbnQgJmxlZnQsIGludCAmcmlnaHQpIGNvbnN0IHsgZ2V0U2hhZG93
SG9yaXpvbnRhbEV4dGVudCh0ZXh0U2hhZG93KCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIHZvaWQg
Z2V0VGV4dFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGludCAmdG9wLCBpbnQgJmJvdHRvbSkgY29uc3Qg
eyBnZXRTaGFkb3dWZXJ0aWNhbEV4dGVudCh0ZXh0U2hhZG93KCksIHRvcCwgYm90dG9tKTsgfQor
ICAgIHZvaWQgZ2V0VGV4dFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChpbnQgJmxvZ2ljYWxM
ZWZ0LCBpbnQgJmxvZ2ljYWxSaWdodCkgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQo
dGV4dFNoYWRvdygpLCBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0KTsgfQorCiAgICAgZmxvYXQg
dGV4dFN0cm9rZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRT
dHJva2VXaWR0aDsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PENvbG9yU3BhY2U+KHJhcmVJbmhlcml0ZWREYXRhLT5jb2xvclNwYWNlKTsg
fQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0
YS0+b3BhY2l0eTsgfQpAQCAtNjUxLDkgKzY1NiwxMCBAQCBwdWJsaWM6CiAgICAgRUJveEFsaWdu
bWVudCBib3hQYWNrKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUJveEFsaWdubWVudD4o
cmFyZU5vbkluaGVyaXRlZERhdGEtPmZsZXhpYmxlQm94LT5wYWNrKTsgfQogCiAgICAgY29uc3Qg
U2hhZG93RGF0YSogYm94U2hhZG93KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fYm94U2hhZG93LmdldCgpOyB9Ci0gICAgdm9pZCBnZXRCb3hTaGFkb3dFeHRlbnQoaW50
ICZ0b3AsIGludCAmcmlnaHQsIGludCAmYm90dG9tLCBpbnQgJmxlZnQpIGNvbnN0OwotICAgIHZv
aWQgZ2V0Qm94U2hhZG93SG9yaXpvbnRhbEV4dGVudChpbnQgJmxlZnQsIGludCAmcmlnaHQpIGNv
bnN0OwotICAgIHZvaWQgZ2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoaW50ICZ0b3AsIGludCAm
Ym90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldEJveFNoYWRvd0V4dGVudChpbnQgJnRvcCwgaW50
ICZyaWdodCwgaW50ICZib3R0b20sIGludCAmbGVmdCkgY29uc3QgeyBnZXRTaGFkb3dFeHRlbnQo
Ym94U2hhZG93KCksIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7IH0KKyAgICB2b2lkIGdldEJv
eFNoYWRvd0hvcml6b250YWxFeHRlbnQoaW50ICZsZWZ0LCBpbnQgJnJpZ2h0KSBjb25zdCB7IGdl
dFNoYWRvd0hvcml6b250YWxFeHRlbnQoYm94U2hhZG93KCksIGxlZnQsIHJpZ2h0KTsgfQorICAg
IHZvaWQgZ2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQoaW50ICZ0b3AsIGludCAmYm90dG9tKSBj
b25zdCB7IGdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGJveFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7
IH0KKyAgICB2b2lkIGdldEJveFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChpbnQgJmxvZ2lj
YWxMZWZ0LCBpbnQgJmxvZ2ljYWxSaWdodCkgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRl
bnQoYm94U2hhZG93KCksIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQpOyB9CiAKICAgICBTdHls
ZVJlZmxlY3Rpb24qIGJveFJlZmxlY3QoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9ib3hSZWZsZWN0LmdldCgpOyB9CiAgICAgRUJveFNpemluZyBib3hTaXppbmcoKSBj
b25zdCB7IHJldHVybiBtX2JveC0+Ym94U2l6aW5nKCk7IH0KQEAgLTEyNjMsNiArMTI2OSwxNCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIGdldFNoYWRvd0V4dGVudChj
b25zdCBTaGFkb3dEYXRhKiwgaW50ICZ0b3AsIGludCAmcmlnaHQsIGludCAmYm90dG9tLCBpbnQg
JmxlZnQpIGNvbnN0OworICAgIHZvaWQgZ2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudChjb25zdCBT
aGFkb3dEYXRhKiwgaW50ICZsZWZ0LCBpbnQgJnJpZ2h0KSBjb25zdDsKKyAgICB2b2lkIGdldFNo
YWRvd1ZlcnRpY2FsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBpbnQgJnRvcCwgaW50ICZib3R0
b20pIGNvbnN0OworICAgIHZvaWQgZ2V0U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvdywgaW50ICZsb2dpY2FsTGVmdCwgaW50ICZsb2dpY2FsUmlnaHQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGdldFNoYWRvd0hvcml6b250YWxFeHRlbnQoc2hhZG93LCBsb2dpY2FsTGVmdCwgbG9naWNhbFJp
Z2h0KSA6IGdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KHNoYWRvdywgbG9naWNhbExlZnQsIGxvZ2lj
YWxSaWdodCk7CisgICAgfQorCiAgICAgLy8gQ29sb3IgYWNjZXNzb3JzIGFyZSBhbGwgcHJpdmF0
ZSB0byBtYWtlIHN1cmUgY2FsbGVycyB1c2UgdmlzaXRlZERlcGVuZGVudENvbG9yIGluc3RlYWQg
dG8gYWNjZXNzIHRoZW0uCiAgICAgY29uc3QgQ29sb3ImIGJvcmRlckxlZnRDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIubGVmdCgpLmNvbG9yKCk7IH0KICAgICBjb25zdCBD
b2xvciYgYm9yZGVyUmlnaHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIu
cmlnaHQoKS5jb2xvcigpOyB9Cg==
</data>
<flag name="review"
          id="59919"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>