<?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>17108</bug_id>
          
          <creation_ts>2008-01-30 18:13:46 -0800</creation_ts>
          <short_desc>CSS parser should NOT return raw CSSValue* from creation functions</short_desc>
          <delta_ts>2008-02-01 00:02:30 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>68882</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-30 18:13:46 -0800</bug_when>
    <thetext>CSS parser should NOT return raw CSSValue* from creation functions

Instead it should use PassRefPtr&lt;CSSValue&gt; for single returns, and use RefPtr&lt;CSSValue&gt;&amp; for multiple return values.

I expect we have leaks in this code and just don&apos;t know it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68896</commentid>
    <comment_count>1</comment_count>
      <attachid>18812</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-31 00:01:31 -0800</bug_when>
    <thetext>Created attachment 18812
Beat CSSParser with the RefPtr stick

 WebCore/ChangeLog            |   29 +++++
 WebCore/css/CSSParser.cpp    |  287 +++++++++++++++++++----------------------
 WebCore/css/CSSParser.h      |   38 +++---
 WebCore/css/SVGCSSParser.cpp |   17 +--
 4 files changed, 188 insertions(+), 183 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68897</commentid>
    <comment_count>2</comment_count>
      <attachid>18812</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-31 00:37:22 -0800</bug_when>
    <thetext>Comment on attachment 18812
Beat CSSParser with the RefPtr stick

Actually this one had one bug.  I&apos;ve fixed it.  Uploading a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68898</commentid>
    <comment_count>3</comment_count>
      <attachid>18813</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-31 00:38:07 -0800</bug_when>
    <thetext>Created attachment 18813
Beat CSSParser with the RefPtr stick

 WebCore/ChangeLog                          |   29 +++
 WebCore/css/CSSMutableStyleDeclaration.cpp |    5 +-
 WebCore/css/CSSParser.cpp                  |  313 +++++++++++++---------------
 WebCore/css/CSSParser.h                    |   38 ++--
 WebCore/css/SVGCSSParser.cpp               |   17 +-
 5 files changed, 205 insertions(+), 197 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68929</commentid>
    <comment_count>4</comment_count>
      <attachid>18813</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-31 10:19:00 -0800</bug_when>
    <thetext>Comment on attachment 18813
Beat CSSParser with the RefPtr stick

 1097                     values-&gt;append(parsedValue.get()); // FIXME: why woule one ever append the same value twice?

Typo &quot;woule&quot;.

I also think that this comment should be more clear on the point. Something along the lines of, &quot;If we know this could never be done with the same value twice, we could change this to release() and get rid of a little bit of reference count churn.&quot;

And I think the comment should go on its own line. The way to do that is to change the code to early-break if parsedValue is 0 instead of having an else.

Same below for values-&gt;length(). It should be an early exit that calls return false.

 1138         PassRefPtr&lt;Pair&gt; pair = new Pair(parsedValue1.release(), parsedValue2.release());
 1139         RefPtr&lt;CSSPrimitiveValue&gt; val = new CSSPrimitiveValue(pair);

How about just doing this all on one line without the local variable? Or doing it with a RefPtr and a call to release(). It seems a little ugly to have a local variable of type PassRefPtr.

 1585     Vector&lt;RefPtr&lt;CSSValue&gt;, numProperties&gt; values(numProperties);

Why not

     RefPtr&lt;CSSValue&gt; values[numProperties];

here? I don&apos;t think a Vector is better than an array here.

I think CSSParser::parseSVGValue would look better with early exits too.

I&apos;ll say r=me, although I&apos;m not so happy with the Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69014</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-01 00:02:30 -0800</bug_when>
    <thetext>r29910</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18812</attachid>
            <date>2008-01-31 00:01:31 -0800</date>
            <delta_ts>2008-01-31 00:37:22 -0800</delta_ts>
            <desc>Beat CSSParser with the RefPtr stick</desc>
            <filename>Beat-CSSParser-with-the-RefPtr-stick.patch</filename>
            <type>text/plain</type>
            <size>38137</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZDFkNmFiMDMxNWQwODIxNzdlM2FiYTZlY2NjYjlmMzE1NzhhOWYwOQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMjE3Yjc1Li44YzIxZTdk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA4LTAxLTMwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWF0
IENTU1BhcnNlciB3aXRoIHRoZSBSZWZQdHIgc3RpY2suICBIb3BlZnVsbHkgc3F1YXNoaW5nIGFu
eSBsZWFrcyBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKERlcGxveSBSZWZQdHIgYW5kIFBhc3NS
ZWZQdHIgdGhyb3VnaG91dCBDU1NQYXJzZXIpCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTA4CisKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2Vz
LCB0aHVzIG5vIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkQmFj
a2dyb3VuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3Jv
dW5kU2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkVHJhbnNpdGlv
blZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hv
cnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dQYXJzZUNvbnRleHQ6OlNoYWRvd1BhcnNlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJvcmRlckltYWdlUGFyc2VDb250ZXh0OjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZSk6
CisKIDIwMDgtMDEtMzAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggZjNiNWJhYS4uNzliZDc3
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Q29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQog
CiAgICAgLy8gRmlyc3QgdHJ5IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUgb3Ig
dGhlICIjIiBzeW50YXguCiAgICAgaWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcsIGNvbG9y
LCBzdHJpY3QpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj5k
dW1teVN0eWxlRGVjbGFyYXRpb24gPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Cisg
ICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZHVtbXlTdHlsZURlY2xh
cmF0aW9uKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik7CiAKICAgICAgICAgLy8gTm93
IHRyeSB0byBjcmVhdGUgYSBjb2xvciBmcm9tIHRoZSByZ2IoKSBvciByZ2JhKCkgc3ludGF4Lgog
ICAgICAgICBpZiAocGFyc2VyLnBhcnNlQ29sb3IoZHVtbXlTdHlsZURlY2xhcmF0aW9uLmdldCgp
LCBzdHJpbmcpKSB7CkBAIC01MjksNyArNTI5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogCiAgICAgYm9vbCB2YWxpZF9w
cmltaXRpdmUgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZSAqcGFyc2VkVmFsdWUgPSAwOworICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2Ug
d2lsbCBsb29rIGZvciB1bml0cyB0aGF0IGhhdmUgYmVlbiBpbmNvcnJlY3RseSBzZXBhcmF0ZWQg
ZnJvbSB0aGUgbnVtYmVyIHRoZXkgYmVsb25nIHRvCiAgICAgLy8gYnkgYSBzcGFjZS4gIFdlIGdv
IGFoZWFkIGFuZCBhc3NvY2lhdGUgdGhlIHVuaXQgd2l0aCB0aGUgbnVtYmVyIGV2ZW4gdGhvdWdo
IGl0IGlzIGludmFsaWQgQ1NTLgpAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAvLyBbPHVyaT4s
XSogIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1bHQgfCBwb2ludGVyIHwgcHJvZ3Jlc3MgfCBt
b3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAogICAgICAgICAvLyBudy1yZXNpemUgfCBuLXJl
c2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6ZSB8IHMtcmVzaXplIHwgdy1yZXNpemUgfCBldy1y
ZXNpemUgfCAKICAgICAgICAgLy8gbnMtcmVzaXplIHwgbmVzdy1yZXNpemUgfCBud3NlLXJlc2l6
ZSB8IGNvbC1yZXNpemUgfCByb3ctcmVzaXplIHwgdGV4dCB8IHdhaXQgfCBoZWxwIF0gXSB8IGlu
aGVyaXQKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gMDsKKyAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdDsKICAgICAgICAgd2hpbGUgKHZhbHVlICYmIHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICBpZiAoIWxpc3QpCiAg
ICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7IApAQCAtODEwLDEwICs4MTAs
OCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgICAgIEludFBvaW50IGhvdHNwb3Q7CiAgICAgICAgICAgICBpbnQgbnJjb29y
ZHMgPSBjb29yZHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKG5yY29vcmRzID4gMCAmJiBucmNv
b3JkcyAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgeyAvLyBvbmx5IHN1cHBv
cnQgaG90c3BvdCBwYWlycyBpbiBzdHJpY3QgbW9kZQotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgbGlzdDsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSAvLyBvbmx5IHN1cHBvcnQgaG90
c3BvdCBwYWlycyBpbiBzdHJpY3QgbW9kZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmljdCAmJiBu
cmNvb3JkcyA9PSAyKQogICAgICAgICAgICAgICAgIGhvdHNwb3QgPSBJbnRQb2ludChjb29yZHNb
MF0sIGNvb3Jkc1sxXSk7CiAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8IGNvb3Jkcy5zaXplKCkg
PT0gMCkgewpAQCAtODI4LDI0ICs4MjYsMjAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBob3RzcG90LCBzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoKHN0cmljdCAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAh
KHZhbHVlLT51bml0ID09IFZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykp
KSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGxpc3Q7CisgICAgICAgICAgICBpZiAoKHN0cmlj
dCAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IFZhbHVlOjpPcGVyYXRv
ciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0LT5uZXh0KCk7
IC8vIGNvbW1hCiAgICAgICAgIH0KICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgIGlm
ICghdmFsdWUpIHsgLy8gbm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBjb21wYXRpYmls
aXR5KQotICAgICAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBsaXN0OworICAgICAgICAgICAgICAgIGlmIChsaXN0LT5sZW5n
dGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHZhbHVlLT5pZCA9PSBD
U1NfVkFMX0hBTkQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCiAgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NfVkFMX1BPSU5URVIpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICYmICgodmFsdWUtPmlkID49IENTU19WQUxfQVVUTyAm
JiB2YWx1ZS0+aWQgPD0gQ1NTX1ZBTF9BTExfU0NST0xMKSB8fCB2YWx1ZS0+aWQgPT0gQ1NTX1ZB
TF9DT1BZIHx8IHZhbHVlLT5pZCA9PSBDU1NfVkFMX05PTkUpKQogICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAg
ICB2YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbGlzdDsKKyAg
ICAgICAgICAgIHBhcnNlZFZhbHVlID0gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBpZCA9IHZhbHVlLT5pZDsKQEAgLTg2NywxMiArODYxLDEz
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9ZOgogICAgIGNhc2UgQ1NT
X1BST1BfX1dFQktJVF9CQUNLR1JPVU5EX1NJWkU6CiAgICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JP
VU5EX1JFUEVBVDogewotICAgICAgICBDU1NWYWx1ZSAqdmFsMSA9IDAsICp2YWwyID0gMDsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwxOworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bDI7CiAgICAgICAgIGludCBwcm9wSWQxLCBwcm9wSWQyOwogICAgICAgICBpZiAocGFyc2VCYWNr
Z3JvdW5kUHJvcGVydHkocHJvcElkLCBwcm9wSWQxLCBwcm9wSWQyLCB2YWwxLCB2YWwyKSkgewot
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMSwgdmFsMSwgaW1wb3J0YW50KTsKKyAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIHZhbDEucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwog
ICAgICAgICAgICAgaWYgKHZhbDIpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
MiwgdmFsMiwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQy
LCB2YWwyLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDIsNyArMTAzNyw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAg
ICAgICBpZiAoaWQgPT0gQ1NTX1ZBTF9OT05FKSB7CiAgICAgICAgICAgICB2YWxpZF9wcmltaXRp
dmUgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0ICps
aXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3QobmV3IENTU1ZhbHVlTGlzdCk7CiAgICAgICAgICAgICBib29sIGlzX3ZhbGlkID0gdHJ1
ZTsKICAgICAgICAgICAgIHdoaWxlKGlzX3ZhbGlkICYmIHZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKQEAgLTEwNTgsMTEgKzEwNTMsMTAgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZihsaXN0LT5sZW5ndGgoKSAmJiBpc192YWxpZCkgewot
ICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbGlzdDsKKyAgICAgICAgICAgIGlmIChsaXN0
LT5sZW5ndGgoKSAmJiBpc192YWxpZCkgeworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
bGlzdC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBkZWxldGUgbGlzdDsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtMTA4OCw5ICsxMDgyLDkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIGlmIChpZCA9PSBDU1NfVkFMX05PTkUpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB0cnVlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVz
ID0gbmV3IENTU1ZhbHVlTGlzdCgpOworICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlcyhuZXcgQ1NTVmFsdWVMaXN0KCkpOwogICAgICAgICAgICAgVmFsdWUqIHZhbDsK
LSAgICAgICAgICAgIENTU1ZhbHVlKiBwYXJzZWRWYWx1ZSA9IDA7CisgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwogICAgICAgICAgICAgd2hpbGUgKCh2YWwgPSB2YWx1
ZUxpc3QtPmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAodmFsLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2
YWx1ZSA9IHBhcnNlVVJMKGRvbVN0cmluZyh2YWwtPnN0cmluZykpOwpAQCAtMTEwMCw3ICsxMDk0
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHBh
cnNlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQocGFyc2VkVmFs
dWUuZ2V0KCkpOyAvLyBGSVhNRTogd2h5IHdvdWxlIG9uZSBldmVyIGFwcGVuZCB0aGUgc2FtZSB2
YWx1ZSB0d2ljZT8KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtMTExMCw3ICsxMTA0
LDYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWxldGUgdmFsdWVzOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTExMzEsMjEg
KzExMjQsMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxl
bmd0aCwgc3RyaWN0KTsKICAgICAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwYXJzZWRWYWx1ZTEg
PSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKLSAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKKyAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQp
OworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMjsKICAgICAg
ICAgaWYgKG51bSA9PSAyKSB7CiAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlTGlzdC0+bmV4dCgp
OwogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3Ro
LCBzdHJpY3QpOwotICAgICAgICAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgcGFyc2VkVmFsdWUxOworICAgICAgICAgICAgaWYgKCF2YWxpZF9wcmlt
aXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcGFyc2VkVmFsdWUyID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKLSAgICAgICAg
fQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVl
MTsKICAgICAgICAgCi0gICAgICAgIFBhaXIqIHBhaXIgPSBuZXcgUGFpcihwYXJzZWRWYWx1ZTEs
IHBhcnNlZFZhbHVlMik7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWwgPSBuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUocGFpcik7CisgICAgICAgIFBhc3NSZWZQdHI8UGFpcj4gcGFpciA9IG5l
dyBQYWlyKHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpOwor
ICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwgPSBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUocGFpcik7CiAgICAgICAgIGlmIChwcm9wSWQgPT0gQ1NTX1BST1BfX1dFQktJVF9C
T1JERVJfUkFESVVTKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsg
Q1NTX1BST1BfX1dFQktJVF9CT1JERVJfVE9QX1JJR0hUX1JBRElVUywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9fV0VCS0lUX0JPUkRFUl9UT1BfTEVG
VF9SQURJVVMsCkBAIC0xMjY4LDEyICsxMjU5LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTX1BST1BfX1dFQktJ
VF9UUkFOU0ZPUk1fT1JJR0lOOgogICAgIGNhc2UgQ1NTX1BST1BfX1dFQktJVF9UUkFOU0ZPUk1f
T1JJR0lOX1g6CiAgICAgY2FzZSBDU1NfUFJPUF9fV0VCS0lUX1RSQU5TRk9STV9PUklHSU5fWTog
ewotICAgICAgICBDU1NWYWx1ZSAqdmFsMSA9IDAsICp2YWwyID0gMDsKKyAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWwxOworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7CiAgICAgICAg
IGludCBwcm9wSWQxLCBwcm9wSWQyOwogICAgICAgICBpZiAocGFyc2VUcmFuc2Zvcm1PcmlnaW4o
cHJvcElkLCBwcm9wSWQxLCBwcm9wSWQyLCB2YWwxLCB2YWwyKSkgewotICAgICAgICAgICAgYWRk
UHJvcGVydHkocHJvcElkMSwgdmFsMSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZDEsIHZhbDEucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgaWYg
KHZhbDIpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMiwgdmFsMiwgaW1wb3J0
YW50KTsKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCB2YWwyLnJlbGVhc2Uo
KSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODIsOSArMTI3NCw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTX1BST1Bf
X1dFQktJVF9UUkFOU0lUSU9OX1JFUEVBVF9DT1VOVDoKICAgICBjYXNlIENTU19QUk9QX19XRUJL
SVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT046CiAgICAgY2FzZSBDU1NfUFJPUF9fV0VCS0lU
X1RSQU5TSVRJT05fUFJPUEVSVFk6IHsKLSAgICAgICAgQ1NTVmFsdWUqIHZhbCA9IDA7CisgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwogICAgICAgICBpZiAocGFyc2VUcmFuc2l0aW9uUHJv
cGVydHkocHJvcElkLCB2YWwpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHZh
bCwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsLnJlbGVh
c2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NTMsMjUgKzE1NDUsMjQgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogICAgIGlm
IChwYXJzZWRWYWx1ZSkgewogICAgICAgICBpZiAoIXZhbHVlTGlzdC0+Y3VycmVudCgpIHx8IGlu
U2hvcnRoYW5kKCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VkVmFs
dWUsIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBhcnNlZFZh
bHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9Ci0gICAgICAgIGRlbGV0ZSBwYXJzZWRWYWx1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIENTU1BhcnNlcjo6YWRkQmFja2dyb3VuZFZhbHVlKENTU1ZhbHVlKiYg
bHZhbCwgQ1NTVmFsdWUqIHJ2YWwpCit2b2lkIENTU1BhcnNlcjo6YWRkQmFja2dyb3VuZFZhbHVl
KFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpCiB7CiAg
ICAgaWYgKGx2YWwpIHsKICAgICAgICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihsdmFsKS0+YXBwZW5kKHJ2YWwpOworICAg
ICAgICAgICAgc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NWYWx1ZUxpc3Q+KGx2YWwpLT5hcHBlbmQo
cnZhbCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1NTVmFsdWUqIG9sZFZhbCA9IGx2
YWw7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7
Ci0gICAgICAgICAgICBsdmFsID0gbGlzdDsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChvbGRW
YWwpOworICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gb2xkbFZhbChsdmFsLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdChuZXcgQ1NT
VmFsdWVMaXN0KCkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG9sZGxWYWwpOwogICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKHJ2YWwpOworICAgICAgICAgICAgbHZhbCA9IGxpc3Q7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMTU5MSw4ICsxNTgyLDggQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICBTaG9ydGhh
bmRTY29wZSBzY29wZSh0aGlzLCBDU1NfUFJPUF9CQUNLR1JPVU5EKTsKIAogICAgIGJvb2wgcGFy
c2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07IC8vIGNvbXBpbGVyIHdpbGwg
cmVwZWF0IGZhbHNlIGFzIG5lY2Vzc2FyeQotICAgIENTU1ZhbHVlKiB2YWx1ZXNbbnVtUHJvcGVy
dGllc10gPSB7IDAgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgMCBhcyBuZWNlc3NhcnkKLSAg
ICBDU1NWYWx1ZSogcG9zaXRpb25ZVmFsdWUgPSAwOworICAgIFZlY3RvcjxSZWZQdHI8Q1NTVmFs
dWU+LCBudW1Qcm9wZXJ0aWVzPiB2YWx1ZXMobnVtUHJvcGVydGllcyk7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiBwb3NpdGlvbllWYWx1ZTsKICAgICBpbnQgaTsKIAogICAgIHdoaWxlICh2YWx1ZUxp
c3QtPmN1cnJlbnQoKSkgewpAQCAtMTYwNCw3ICsxNTk1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydGllc1tpXSA9PSBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SICYmIHBhcnNlZFBy
b3BlcnR5W2ldKQogICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBpcyBub3QgYWxsb3dlZCBl
eGNlcHQgYXMgdGhlIGxhc3QgaXRlbSBpbiBhIGxpc3QuICBSZWplY3QgdGhlIGVudGlyZQogICAg
ICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgZ290byBm
YWlsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgICAg
ICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTX1BST1BfQkFD
S0dST1VORF9DT0xPUikgewogICAgICAgICAgICAgICAgICAgICBhZGRCYWNrZ3JvdW5kVmFsdWUo
dmFsdWVzW2ldLCBuZXcgQ1NTSW5pdGlhbFZhbHVlKHRydWUpKTsKQEAgLTE2MjAsMTMgKzE2MTEs
MTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9y
dGFudCkKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGkgPSAwOyAh
Zm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlICp2YWwxID0gMCwgKnZh
bDIgPSAwOworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMTsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7CiAgICAgICAgICAgICAgICAgaW50IHByb3BJ
ZDEsIHByb3BJZDI7CiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZFByb3BlcnR5
KHByb3BlcnRpZXNbaV0sIHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBhZGRCYWNrZ3JvdW5kVmFsdWUodmFsdWVzW2ldLCB2YWwxKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkQmFja2dyb3VuZFZhbHVlKHZhbHVlc1tpXSwgdmFsMS5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NfUFJPUF9CQUNL
R1JPVU5EX1BPU0lUSU9OKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQmFja2dyb3VuZFZh
bHVlKHBvc2l0aW9uWVZhbHVlLCB2YWwyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEJh
Y2tncm91bmRWYWx1ZShwb3NpdGlvbllWYWx1ZSwgdmFsMi5yZWxlYXNlKCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTYzNCw3ICsxNjI2LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9ydGFudCkK
ICAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlz
IGFuCiAgICAgICAgIC8vIGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBp
dAogICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICAvLyBGaWxsIGluIGFueSByZW1haW5p
bmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgpAQCAtMTY1NywyNSArMTY0OSwx
OSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KQogICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ1ZTsKLQotZmFpbDoKLSAgICBmb3IgKGlu
dCBrID0gMDsgayA8IG51bVByb3BlcnRpZXM7IGsrKykKLSAgICAgICAgZGVsZXRlIHZhbHVlc1tr
XTsKLSAgICBkZWxldGUgcG9zaXRpb25ZVmFsdWU7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKENTU1ZhbHVlKiYgbHZhbCwgQ1NTVmFs
dWUqIHJ2YWwpCit2b2lkIENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKFJlZlB0cjxDU1NW
YWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwp
IHsKICAgICAgICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3QqPihsdmFsKS0+YXBwZW5kKHJ2YWwpOworICAgICAgICAgICAgc3Rh
dGljX3BvaW50ZXJfY2FzdDxDU1NWYWx1ZUxpc3Q+KGx2YWwpLT5hcHBlbmQocnZhbCk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ1NTVmFsdWUqIG9sZFZhbCA9IGx2YWw7Ci0gICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7Ci0gICAgICAgICAg
ICBsdmFsID0gbGlzdDsKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IG9sZFZhbChs
dmFsLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlz
dChuZXcgQ1NTVmFsdWVMaXN0KCkpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG9sZFZhbCk7
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocnZhbCk7CisgICAgICAgICAgICBsdmFsID0gbGlz
dDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0xNjkxLDcgKzE2NzcsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAg
IFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTik7
CiAKICAgICBib29sIHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9OyAv
LyBjb21waWxlciB3aWxsIHJlcGVhdCBmYWxzZSBhcyBuZWNlc3NhcnkKLSAgICBDU1NWYWx1ZSog
dmFsdWVzW251bVByb3BlcnRpZXNdID0geyAwIH07IC8vIGNvbXBpbGVyIHdpbGwgcmVwZWF0IDAg
YXMgbmVjZXNzYXJ5CisgICAgVmVjdG9yPFJlZlB0cjxDU1NWYWx1ZT4sIG51bVByb3BlcnRpZXM+
IHZhbHVlcyhudW1Qcm9wZXJ0aWVzKTsKICAgICAKICAgICBpbnQgaTsKICAgICB3aGlsZSAodmFs
dWVMaXN0LT5jdXJyZW50KCkpIHsKQEAgLTE3MTEsMTAgKzE2OTcsMTAgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewot
ICAgICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWwgPSAwOworICAgICAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsOwogICAgICAgICAgICAgICAgIGlmIChwYXJzZVRyYW5zaXRpb25Qcm9w
ZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBy
b3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0
aW9uVmFsdWUodmFsdWVzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0
aW9uVmFsdWUodmFsdWVzW2ldLCB2YWwucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3MjIsNyArMTcwOCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIC8v
IGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgogICAgICAg
ICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKICAgICAgICAg
aWYgKCFmb3VuZCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRp
ZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KQEAgLTE3MzYsMTEgKzE3MjIsNiBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWx1ZXNbaV0sIGltcG9ydGFudCk7CiAgICAg
CiAgICAgcmV0dXJuIHRydWU7Ci0KLWZhaWw6Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBudW1Q
cm9wZXJ0aWVzOyBrKyspCi0gICAgICAgIGRlbGV0ZSB2YWx1ZXNba107Ci0gICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTaG9ydGhhbmQoaW50IHByb3BJZCwgY29u
c3QgaW50ICpwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCBpbXBvcnRhbnQpCkBA
IC0xOTAzLDcgKzE4ODQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb250ZW50KGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ1NTVmFsdWUqIENT
U1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kQ29sb3IoKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAgaW50IGlkID0gdmFsdWVMaXN0
LT5jdXJyZW50KCktPmlkOwogICAgIGlmIChpZCA9PSBDU1NfVkFMX19XRUJLSVRfVEVYVCB8fCAo
aWQgPj0gQ1NTX1ZBTF9BUVVBICYmIGlkIDw9IENTU19WQUxfV0lORE9XVEVYVCkgfHwgaWQgPT0g
Q1NTX1ZBTF9NRU5VIHx8CkBAIC0xOTEyLDcgKzE4OTMsNyBAQCBDU1NWYWx1ZSogQ1NTUGFyc2Vy
OjpwYXJzZUJhY2tncm91bmRDb2xvcigpCiAgICAgcmV0dXJuIHBhcnNlQ29sb3IoKTsKIH0KIAot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZEltYWdlKENTU1ZhbHVlKiYgdmFsdWUpCiti
b29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kSW1hZ2UoUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBDU1NfVkFMX05PTkUp
IHsKICAgICAgICAgdmFsdWUgPSBuZXcgQ1NTSW1hZ2VWYWx1ZSgpOwpAQCAtMTkyOCw3ICsxOTA5
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZEltYWdlKENTU1ZhbHVlKiYgdmFs
dWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZUJh
Y2tncm91bmRQb3NpdGlvblhZKGJvb2wmIHhGb3VuZCwgYm9vbCYgeUZvdW5kKQorUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQb3NpdGlvblhZKGJvb2wmIHhG
b3VuZCwgYm9vbCYgeUZvdW5kKQogewogICAgIGludCBpZCA9IHZhbHVlTGlzdC0+Y3VycmVudCgp
LT5pZDsKICAgICBpZiAoaWQgPT0gQ1NTX1ZBTF9MRUZUIHx8IGlkID09IENTU19WQUxfVE9QIHx8
IGlkID09IENTU19WQUxfUklHSFQgfHwgaWQgPT0gQ1NTX1ZBTF9CT1RUT00gfHwgaWQgPT0gQ1NT
X1ZBTF9DRU5URVIpIHsKQEAgLTE5NTksOSArMTk0MCw4IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6
OnBhcnNlQmFja2dyb3VuZFBvc2l0aW9uWFkoYm9vbCYgeEZvdW5kLCBib29sJiB5Rm91bmQpCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQb3NpdGlv
bihDU1NWYWx1ZSomIHZhbHVlMSwgQ1NTVmFsdWUqJiB2YWx1ZTIpCit2b2lkIENTU1BhcnNlcjo6
cGFyc2VCYWNrZ3JvdW5kUG9zaXRpb24oUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8
Q1NTVmFsdWU+JiB2YWx1ZTIpCiB7Ci0gICAgdmFsdWUxID0gdmFsdWUyID0gMDsKICAgICBWYWx1
ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICAKICAgICAvLyBQYXJzZSB0aGUg
Zmlyc3QgdmFsdWUuICBXZSdyZSBqdXN0IG1ha2luZyBzdXJlIHRoYXQgaXQgaXMgb25lIG9mIHRo
ZSB2YWxpZCBrZXl3b3JkcyBvciBhIHBlcmNlbnRhZ2UvbGVuZ3RoLgpAQCAtMTk4Niw4ICsxOTY2
LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFBvc2l0aW9uKENTU1ZhbHVlKiYg
dmFsdWUxLCBDU1NWYWx1ZSomIHZhbHVlMikKICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkgewotICAg
ICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZTE7Ci0gICAgICAgICAgICAgICAgdmFsdWUxID0gMDsK
KyAgICAgICAgICAgICAgICB2YWx1ZTEuY2xlYXIoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMDAsMTUgKzE5NzksMTEgQEAgdm9pZCBD
U1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFBvc2l0aW9uKENTU1ZhbHVlKiYgdmFsdWUxLCBDU1NW
YWx1ZSomIHZhbHVlMikKICAgICAgICAgLy8gRm9yIGxlZnQvcmlnaHQvY2VudGVyLCB0aGUgZGVm
YXVsdCBvZiA1MCUgaW4gdGhlIHkgaXMgc3RpbGwgY29ycmVjdC4KICAgICAgICAgdmFsdWUyID0g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKDUwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpOwogCi0gICAgaWYgKHZhbHVlMUlzWSB8fCB2YWx1ZTJJc1gpIHsKLSAgICAgICAgLy8gU3dh
cCBvdXIgdHdvIHZhbHVlcy4KLSAgICAgICAgQ1NTVmFsdWUqIHZhbCA9IHZhbHVlMjsKLSAgICAg
ICAgdmFsdWUyID0gdmFsdWUxOwotICAgICAgICB2YWx1ZTEgPSB2YWw7Ci0gICAgfQorICAgIGlm
ICh2YWx1ZTFJc1kgfHwgdmFsdWUySXNYKQorICAgICAgICB2YWx1ZTEuc3dhcCh2YWx1ZTIpOwog
fQogCi1DU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRTaXplKCkKK1Bhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kU2l6ZSgpCiB7CiAgICAgVmFs
dWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHBhcnNlZFZhbHVlMTsKQEAgLTIwMzksMTEgKzIwMTQsMTQgQEAgQ1NTVmFsdWUqIENTU1BhcnNl
cjo6cGFyc2VCYWNrZ3JvdW5kU2l6ZSgpCiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJhY2tn
cm91bmRQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqJiByZXRWYWx1
ZTEsIENTU1ZhbHVlKiYgcmV0VmFsdWUyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYg
cmV0VmFsdWUyKQogewotICAgIENTU1ZhbHVlTGlzdCAqdmFsdWVzID0gMCwgKnZhbHVlczIgPSAw
OworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKKyAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiB2YWx1ZXMyOwogICAgIFZhbHVlKiB2YWw7Ci0gICAgQ1NTVmFsdWUgKnZhbHVlID0gMCwg
KnZhbHVlMiA9IDA7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlMjsKKyAgICAKICAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKICAgICAK
ICAgICByZXRWYWx1ZTEgPSByZXRWYWx1ZTIgPSAwOwpAQCAtMjA1NSwxMCArMjAzMywxMiBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBw
cm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgfQogCiAgICAgd2hpbGUgKCh2YWwgPSB2YWx1ZUxp
c3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgQ1NTVmFsdWUgKmN1cnJWYWx1ZSA9IDAsICpjdXJy
VmFsdWUyID0gMDsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7CisgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlMjsKKyAgICAgICAgCiAgICAgICAgIGlmIChhbGxv
d0NvbW1hKSB7CiAgICAgICAgICAgICBpZiAodmFsLT51bml0ICE9IFZhbHVlOjpPcGVyYXRvciB8
fCB2YWwtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgICAgICBhbGxvd0NvbW1hID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0y
MTIyLDI5ICsyMTAyLDI3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQcm9wZXJ0
eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZSkK
LSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWVzKSB7CiAg
ICAgICAgICAgICAgICAgdmFsdWVzID0gbmV3IENTU1ZhbHVlTGlzdCgpOwotICAgICAgICAgICAg
ICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Cisg
ICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhbHVlMiAmJiAhdmFsdWVzMikg
ewogICAgICAgICAgICAgICAgIHZhbHVlczIgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7Ci0gICAgICAg
ICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAgdmFsdWUy
ID0gMDsKKyAgICAgICAgICAgICAgICB2YWx1ZXMyLT5hcHBlbmQodmFsdWUyLnJlbGVhc2UoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YWx1ZXMpCi0g
ICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB2YWx1ZSA9IGN1cnJWYWx1ZTsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IGN1cnJWYWx1ZS5yZWxlYXNlKCk7CiAgICAgICAgICAgICBpZiAoY3VyclZhbHVlMikgewog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMyKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZXMy
LT5hcHBlbmQoY3VyclZhbHVlMik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlczItPmFwcGVu
ZChjdXJyVmFsdWUyLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTIgPSBjdXJyVmFsdWUyOworICAgICAgICAgICAgICAgICAgICB2YWx1
ZTIgPSBjdXJyVmFsdWUyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFs
bG93Q29tbWEgPSB0cnVlOwogICAgICAgICB9CkBAIC0yMTU2LDI0ICsyMTM0LDIwIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJ
ZDEsIGludCYgcHJvcElkMiwKICAgICB9CiAKICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgcmV0VmFsdWUxID0gdmFsdWVzOworICAgICAgICByZXRWYWx1ZTEg
PSB2YWx1ZXMucmVsZWFzZSgpOwogICAgICAgICBpZiAodmFsdWVzMiAmJiB2YWx1ZXMyLT5sZW5n
dGgoKSkKLSAgICAgICAgICAgIHJldFZhbHVlMiA9IHZhbHVlczI7CisgICAgICAgICAgICByZXRW
YWx1ZTIgPSB2YWx1ZXMyLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh2YWx1ZSkgewotICAgICAgICByZXRWYWx1ZTEgPSB2YWx1ZTsKLSAgICAgICAgcmV0
VmFsdWUyID0gdmFsdWUyOworICAgICAgICByZXRWYWx1ZTEgPSB2YWx1ZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldFZhbHVlMiA9IHZhbHVlMi5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLQotZmFpbGVkOgotICAgIGRlbGV0ZSB2YWx1ZXM7IGRlbGV0ZSB2YWx1ZXMyOwot
ICAgIGRlbGV0ZSB2YWx1ZTsgZGVsZXRlIHZhbHVlMjsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUNTU1ZhbHVlKiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCkKK1Bhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKQogewogICAg
IFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWxpZFVuaXQo
dmFsdWUsIEZUaW1lLCBzdHJpY3QpKQpAQCAtMjE4MSw3ICsyMTU1LDcgQEAgQ1NTVmFsdWUqIENT
U1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKQogICAgIHJldHVybiAwOwogfQogCi1D
U1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpCitQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCkKIHsK
ICAgICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUt
PmlkID09IENTU19WQUxfSU5GSU5JVEUpCkBAIC0yMjA5LDcgKzIxODMsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKFZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYg
cmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1DU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJz
ZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkKIHsKICAgICBWYWx1ZSogdmFsdWUg
PSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU19WQUxfQVVU
TyB8fCB2YWx1ZS0+aWQgPT0gQ1NTX1ZBTF9MSU5FQVIgfHwgdmFsdWUtPmlkID09IENTU19WQUxf
RUFTRV9JTiB8fCB2YWx1ZS0+aWQgPT0gQ1NTX1ZBTF9FQVNFX09VVCB8fCB2YWx1ZS0+aWQgPT0g
Q1NTX1ZBTF9FQVNFX0lOX09VVCkKQEAgLTIyNDAsNyArMjIxNCw3IEBAIENTU1ZhbHVlKiBDU1NQ
YXJzZXI6OnBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAgICByZXR1cm4gbmV3IENT
U1RpbWluZ0Z1bmN0aW9uVmFsdWUoeDEsIHkxLCB4MiwgeTIpOwogfQogCi1DU1NWYWx1ZSogQ1NT
UGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCkKIHsKICAgICBWYWx1ZSogdmFsdWUg
PSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkgewpAQCAtMjI1OCwyMCArMjIzMiwyMCBAQCBDU1NWYWx1ZSog
Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpCiAgICAgcmV0dXJuIDA7CiB9CiAK
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBDU1NW
YWx1ZSomIHJlc3VsdCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShp
bnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiB7Ci0gICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZXMgPSAwOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKICAgICBWYWx1
ZSogdmFsOwotICAgIENTU1ZhbHVlKiB2YWx1ZSA9IDA7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZTsKICAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKICAgICAKICAgICByZXN1bHQgPSAw
OwogCiAgICAgd2hpbGUgKCh2YWwgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAg
Q1NTVmFsdWUqIGN1cnJWYWx1ZSA9IDA7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZh
bHVlOwogICAgICAgICBpZiAoYWxsb3dDb21tYSkgewogICAgICAgICAgICAgaWYgKHZhbC0+dW5p
dCAhPSBWYWx1ZTo6T3BlcmF0b3IgfHwgdmFsLT5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAg
ICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgYWxsb3dDb21tYSA9IGZhbHNlOwog
ICAgICAgICB9CkBAIC0yMzAwLDE4ICsyMjc0LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRy
YW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBDU1NWYWx1ZSomIHJlc3VsdCkKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAg
ICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewogICAgICAgICAg
ICAgICAgIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxpc3QoKTsKLSAgICAgICAgICAgICAgICB2YWx1
ZXMtPmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICAgICAgdmFs
dWVzLT5hcHBlbmQoY3VyclZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChj
dXJyVmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IGN1cnJWYWx1ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGN1cnJWYWx1ZS5yZWxl
YXNlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFsbG93Q29tbWEgPSB0cnVlOwogICAg
ICAgICB9CkBAIC0yMzIzLDE3ICsyMjk2LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5z
aXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBDU1NWYWx1ZSomIHJlc3VsdCkKICAgICB9CiAgICAg
CiAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IHZhbHVlczsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnJlbGVhc2UoKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh2YWx1ZSkgewotICAgICAgICByZXN1bHQgPSB2YWx1
ZTsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0KLWZhaWxlZDoKLSAgICBkZWxldGUgdmFsdWVzOwotICAgIGRlbGV0ZSB2YWx1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI2OTQsNyArMjY2Myw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1DU1NWYWx1ZUxpc3QqIENTU1BhcnNlcjo6cGFyc2VGb250RmFtaWx5KCkKK1Bhc3NSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCiB7CiAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKICAgICBWYWx1ZSogdmFsdWUgPSB2YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKQEAgLTI3NTcsMTkgKzI3MjYsMTggQEAgQ1NTVmFsdWVMaXN0KiBD
U1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
YWNlU3JjKCkKIHsKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxpc3Qo
KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMobmV3IENTU1ZhbHVlTGlzdCgpKTsK
ICAgICBWYWx1ZSogdmFsOwogICAgIGJvb2wgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAgICBib29s
IGFsbG93Rm9ybWF0ID0gZmFsc2U7CiAgICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKLSAgICBDU1NG
b250RmFjZVNyY1ZhbHVlKiBwYXJzZWRWYWx1ZSA9IDA7CiAgICAgQ1NTRm9udEZhY2VTcmNWYWx1
ZSogdXJpVmFsdWUgPSAwOwogICAgIHdoaWxlICgodmFsID0gdmFsdWVMaXN0LT5jdXJyZW50KCkp
KSB7Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gMDsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNl
U3JjVmFsdWU+IHBhcnNlZFZhbHVlOwogICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJICYmICFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgU3RyaW5n
IHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7CiAgICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IG5ldyBDU1NGb250RmFjZVNyY1ZhbHVlKEtVUkwoc3R5bGVFbGVtZW50LT5i
YXNlVVJMKCkuZGVwcmVjYXRlZFN0cmluZygpLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpLnN0
cmluZygpLCBmYWxzZSk7Ci0gICAgICAgICAgICB1cmlWYWx1ZSA9IHBhcnNlZFZhbHVlOworICAg
ICAgICAgICAgdXJpVmFsdWUgPSBwYXJzZWRWYWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGFsbG93
Rm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAg
fSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uKSB7CkBAIC0yODAxLDcgKzI3
NjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQo
cGFyc2VkVmFsdWUpOworICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQocGFyc2VkVmFsdWUucmVs
ZWFzZSgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yODEwLDEyICsyNzc4LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZvbnRGYWNlU3JjKCkKICAgICB9CiAgICAgCiAgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkg
JiYgIWZhaWxlZCkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NfUFJPUF9TUkMsIHZhbHVlcywg
aW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTX1BST1BfU1JDLCB2YWx1ZXMucmVs
ZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIGRlbGV0ZSB2YWx1ZXM7CisKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTI5ODgsNyArMjk1NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUhTTFBhcmFtZXRlcnMoVmFsdWUqIHZhbHVlLCBkb3VibGUqIGNvbG9yQXJyYXksIGJvb2wgcGFy
c2VBCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNTU1ByaW1pdGl2ZVZhbHVlICpDU1NQYXJzZXI6
OnBhcnNlQ29sb3IoVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKFZhbHVlKiB2YWx1ZSkKIHsKICAgICBSR0JBMzIgYyA9IENv
bG9yOjp0cmFuc3BhcmVudDsKICAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUodmFsdWUgPyB2
YWx1ZSA6IHZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKQEAgLTMwNTMsOSArMzAyMCwxMSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSogdmFsdWUsIFJHQkEzMiYg
YywgYm9vbCBzdmcpCiAvLyB3aXRob3V0IHRoZSBhbGxvd0JyZWFrIGJpdCBiZWluZyBzZXQsIHRo
ZW4gaXQgd2lsbCBjbGVhbiB1cCBhbGwgb2YgdGhlIG9iamVjdHMgYW5kIGRlc3Ryb3kgdGhlbS4K
IHN0cnVjdCBTaGFkb3dQYXJzZUNvbnRleHQgewogICAgIFNoYWRvd1BhcnNlQ29udGV4dCgpCi0g
ICAgOnZhbHVlcygwKSwgeCgwKSwgeSgwKSwgYmx1cigwKSwgY29sb3IoMCksCi0gICAgIGFsbG93
WCh0cnVlKSwgYWxsb3dZKGZhbHNlKSwgYWxsb3dCbHVyKGZhbHNlKSwgYWxsb3dDb2xvcih0cnVl
KSwKLSAgICAgYWxsb3dCcmVhayh0cnVlKQorICAgIDogYWxsb3dYKHRydWUpCisgICAgLCBhbGxv
d1koZmFsc2UpCisgICAgLCBhbGxvd0JsdXIoZmFsc2UpCisgICAgLCBhbGxvd0NvbG9yKHRydWUp
CisgICAgLCBhbGxvd0JyZWFrKHRydWUpCiAgICAge30KIAogICAgIGJvb2wgYWxsb3dMZW5ndGgo
KSB7IHJldHVybiBhbGxvd1ggfHwgYWxsb3dZIHx8IGFsbG93Qmx1cjsgfQpAQCAtMzA5Myw3ICsz
MDYyLDcgQEAgc3RydWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGNvbW1pdENvbG9yKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWwpIHsKKyAgICB2b2lk
IGNvbW1pdENvbG9yKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCkgewogICAgICAg
ICBjb2xvciA9IHZhbDsKICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwogICAgICAgICBpZiAo
YWxsb3dYKQpAQCAtMzE0MSw3ICszMTEwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhZG93
KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0J3Mgb2sgaXMg
YSBjb2xvciB2YWx1ZS4KLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwYXJzZWRDb2xv
ciA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZENvbG9y
OwogICAgICAgICAgICAgYm9vbCBpc0NvbG9yID0gKHZhbC0+aWQgPj0gQ1NTX1ZBTF9BUVVBICYm
IHZhbC0+aWQgPD0gQ1NTX1ZBTF9XSU5ET1dURVhUIHx8IHZhbC0+aWQgPT0gQ1NTX1ZBTF9NRU5V
IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbC0+aWQgPj0gQ1NTX1ZBTF9fV0VC
S0lUX0ZPQ1VTX1JJTkdfQ09MT1IgJiYgdmFsLT5pZCA8PSBDU1NfVkFMX19XRUJLSVRfVEVYVCAm
JiAhc3RyaWN0KSk7CiAgICAgICAgICAgICBpZiAoaXNDb2xvcikgewpAQCAtMzE1OCw3ICszMTI3
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyB2YWx1ZSBpcyBub3Qg
YSBjb2xvciBvciBsZW5ndGggYW5kIGlzIGludmFsaWQgb3IKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGl0IGlzIGEgY29sb3IsIGJ1dCBhIGNvbG9yIGlzbid0IGFsbG93ZWQgYXQg
dGhpcyBwb2ludC4KICAgICAgICAgICAgIAotICAgICAgICAgICAgY29udGV4dC5jb21taXRDb2xv
cihwYXJzZWRDb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdENvbG9yKHBhcnNlZENv
bG9yLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlTGlzdC0+
bmV4dCgpOwpAQCAtMzE3OSw5ICszMTQ4LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYWRv
dyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29u
dGV4dAogewogICAgIEJvcmRlckltYWdlUGFyc2VDb250ZXh0KCkKLSAgICA6bV9hbGxvd0JyZWFr
KGZhbHNlKSwgbV9hbGxvd051bWJlcihmYWxzZSksIG1fYWxsb3dTbGFzaChmYWxzZSksIG1fYWxs
b3dXaWR0aChmYWxzZSksCi0gICAgIG1fYWxsb3dSdWxlKGZhbHNlKSwgbV9pbWFnZSgwKSwgbV90
b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCksIG1fYm9yZGVyVG9wKDAp
LCBtX2JvcmRlclJpZ2h0KDApLCBtX2JvcmRlckJvdHRvbSgwKSwKLSAgICAgbV9ib3JkZXJMZWZ0
KDApLCBtX2hvcml6b250YWxSdWxlKDApLCBtX3ZlcnRpY2FsUnVsZSgwKQorICAgIDogbV9hbGxv
d0JyZWFrKGZhbHNlKQorICAgICwgbV9hbGxvd051bWJlcihmYWxzZSkKKyAgICAsIG1fYWxsb3dT
bGFzaChmYWxzZSkKKyAgICAsIG1fYWxsb3dXaWR0aChmYWxzZSkKKyAgICAsIG1fYWxsb3dSdWxl
KGZhbHNlKQorICAgICwgbV9ib3JkZXJUb3AoMCkKKyAgICAsIG1fYm9yZGVyUmlnaHQoMCkKKyAg
ICAsIG1fYm9yZGVyQm90dG9tKDApCisgICAgLCBtX2JvcmRlckxlZnQoMCkKKyAgICAsIG1faG9y
aXpvbnRhbFJ1bGUoMCkKKyAgICAsIG1fdmVydGljYWxSdWxlKDApCiAgICAge30KICAgICAKICAg
ICBib29sIGFsbG93QnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2FsbG93QnJlYWs7IH0KQEAgLTMx
OTIsOCArMzE2OSw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dAogCiAgICAgdm9p
ZCBjb21taXRJbWFnZShDU1NJbWFnZVZhbHVlKiBpbWFnZSkgeyBtX2ltYWdlID0gaW1hZ2U7IG1f
YWxsb3dOdW1iZXIgPSB0cnVlOyB9CiAgICAgdm9pZCBjb21taXROdW1iZXIoVmFsdWUqIHYpIHsK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2
LT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2LT51bml0KTsK
KyAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsID0gbmV3IENTU1ByaW1p
dGl2ZVZhbHVlKHYtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdi0+dW5p
dCk7CiAgICAgICAgIGlmICghbV90b3ApCiAgICAgICAgICAgICBtX3RvcCA9IHZhbDsKICAgICAg
ICAgZWxzZSBpZiAoIW1fcmlnaHQpCkBAIC0zMjQ2LDggKzMyMjIsMTEgQEAgc3RydWN0IEJvcmRl
ckltYWdlUGFyc2VDb250ZXh0CiAgICAgICAgICAgICAgbV9sZWZ0ID0gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKG1fdG9wLT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyltX3RvcC0+cHJpbWl0aXZlVHlwZSgpKTsKICAgICAgICAgICAgICAKICAgICAgICAgLy8g
Tm93IGJ1aWxkIGEgcmVjdCB2YWx1ZSB0byBob2xkIGFsbCBmb3VyIG9mIG91ciBwcmltaXRpdmUg
dmFsdWVzLgotICAgICAgICBSZWN0KiByZWN0ID0gbmV3IFJlY3Q7Ci0gICAgICAgIHJlY3QtPnNl
dFRvcChtX3RvcCk7IHJlY3QtPnNldFJpZ2h0KG1fcmlnaHQpOyByZWN0LT5zZXRCb3R0b20obV9i
b3R0b20pOyByZWN0LT5zZXRMZWZ0KG1fbGVmdCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmVjdD4g
cmVjdCA9IG5ldyBSZWN0OworICAgICAgICByZWN0LT5zZXRUb3AobV90b3ApOworICAgICAgICBy
ZWN0LT5zZXRSaWdodChtX3JpZ2h0KTsKKyAgICAgICAgcmVjdC0+c2V0Qm90dG9tKG1fYm90dG9t
KTsKKyAgICAgICAgcmVjdC0+c2V0TGVmdChtX2xlZnQpOwogCiAgICAgICAgIC8vIEZpbGwgaW4g
U1RSRVRDSCBhcyB0aGUgZGVmYXVsdCBpZiBpdCB3YXNuJ3Qgc3BlY2lmaWVkLgogICAgICAgICBp
ZiAoIW1faG9yaXpvbnRhbFJ1bGUpCkBAIC0zNTAwLDcgKzM0NzksNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpbihpbnQgcHJv
cElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgQ1NTVmFsdWUqJiB2YWx1ZSwgQ1NTVmFs
dWUqJiB2YWx1ZTIpCitib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW4oaW50IHBy
b3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVl
LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTIpCiB7CiAgICAgcHJvcElkMSA9IHByb3BJZDsKICAg
ICBwcm9wSWQyID0gcHJvcElkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgg
Yi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAyZTBmNGRlLi4wYTcyNjdmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aApAQCAtMTM1LDI0ICsxMzUsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IHBhcnNlNFZhbHVlcyhpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGJvb2wgaW1w
b3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpOwogCi0gICAgICAgIENTU1ZhbHVlKiBwYXJzZUJhY2tncm91bmRDb2xvcigpOwotICAg
ICAgICBib29sIHBhcnNlQmFja2dyb3VuZEltYWdlKENTU1ZhbHVlKiYpOwotICAgICAgICBDU1NW
YWx1ZSogcGFyc2VCYWNrZ3JvdW5kUG9zaXRpb25YWShib29sJiB4Rm91bmQsIGJvb2wmIHlGb3Vu
ZCk7Ci0gICAgICAgIHZvaWQgcGFyc2VCYWNrZ3JvdW5kUG9zaXRpb24oQ1NTVmFsdWUqJiwgQ1NT
VmFsdWUqJik7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZUJhY2tncm91bmRTaXplKCk7CisgICAg
ICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAg
IGJvb2wgcGFyc2VCYWNrZ3JvdW5kSW1hZ2UoUmVmUHRyPENTU1ZhbHVlPiYpOworICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUJhY2tncm91bmRQb3NpdGlvblhZKGJvb2wmIHhGb3Vu
ZCwgYm9vbCYgeUZvdW5kKTsKKyAgICAgICAgdm9pZCBwYXJzZUJhY2tncm91bmRQb3NpdGlvbihS
ZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgICAgICBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZUJhY2tncm91bmRTaXplKCk7CiAgICAgICAgIAotICAgICAgICBib29s
IHBhcnNlQmFja2dyb3VuZFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBw
cm9wSWQyLCBDU1NWYWx1ZSomLCBDU1NWYWx1ZSomKTsKKyAgICAgICAgYm9vbCBwYXJzZUJhY2tn
cm91bmRQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgUmVm
UHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgYm9vbCBwYXJzZUJh
Y2tncm91bmRTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgICAgIHZvaWQgYWRkQmFj
a2dyb3VuZFZhbHVlKENTU1ZhbHVlKiYgbHZhbCwgQ1NTVmFsdWUqIHJ2YWwpOworICAgICAgICB2
b2lkIGFkZEJhY2tncm91bmRWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBydmFsKTsKIAotICAgICAgICB2b2lkIGFkZFRyYW5zaXRpb25WYWx1ZShDU1NW
YWx1ZSomIGx2YWwsIENTU1ZhbHVlKiBydmFsKTsKLSAgICAgICAgQ1NTVmFsdWUqIHBhcnNlVHJh
bnNpdGlvbkR1cmF0aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVRyYW5zaXRpb25SZXBl
YXRDb3VudCgpOwotICAgICAgICBDU1NWYWx1ZSogcGFyc2VUcmFuc2l0aW9uVGltaW5nRnVuY3Rp
b24oKTsKKyAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYg
bHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgIGJvb2wg
cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKFZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0
KTsKLSAgICAgICAgQ1NTVmFsdWUqIHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCk7Ci0gICAgICAg
IGJvb2wgcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgQ1NTVmFsdWUqJik7Cisg
ICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCk7Cisg
ICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENT
U1ZhbHVlPiYpOwogICAgICAgICBib29sIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGlt
cG9ydGFudCk7CiAgICAgICAgIAogICAgICAgICBib29sIHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhp
bnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CkBAIC0xNjAsMTQgKzE2MCwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGlt
cG9ydGFudCk7CiAKICAgICAgICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpOwotICAg
ICAgICBDU1NWYWx1ZUxpc3QqIHBhcnNlRm9udEZhbWlseSgpOworICAgICAgICBQYXNzUmVmUHRy
PENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFtaWx5KCk7CiAKICAgICAgICAgYm9vbCBwYXJzZUNv
dW50ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpOwogICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNvdW50ZXJDb250ZW50KFZhbHVlTGlzdCog
YXJncywgYm9vbCBjb3VudGVycyk7CiAKICAgICAgICAgYm9vbCBwYXJzZUNvbG9yUGFyYW1ldGVy
cyhWYWx1ZSosIGludCogY29sb3JWYWx1ZXMsIGJvb2wgcGFyc2VBbHBoYSk7CiAgICAgICAgIGJv
b2wgcGFyc2VIU0xQYXJhbWV0ZXJzKFZhbHVlKiwgZG91YmxlKiBjb2xvclZhbHVlcywgYm9vbCBw
YXJzZUFscGhhKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3IoVmFsdWUq
ID0gMCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sb3Io
VmFsdWUqID0gMCk7CiAgICAgICAgIGJvb2wgcGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSosIFJH
QkEzMiYsIGJvb2wgPSBmYWxzZSk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xvcihj
b25zdCBTdHJpbmcmLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpOwpAQCAtMTc3LDkgKzE3Nyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGJvb2wg
cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgICAgIENTU1Zh
bHVlKiBwYXJzZVNWR1BhaW50KCk7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVNWR0NvbG9yKCk7
Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOworICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1BhaW50KCk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlU1ZHQ29sb3IoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKICNlbmRpZgogCiAgICAgICAgIC8vIENTUzMgUGFy
c2luZyBSb3V0aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKQEAgLTE4Nyw3
ICsxODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VCb3JkZXJJ
bWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIAogICAgICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zZm9ybSgpOwotICAgICAgICBib29sIHBhcnNlVHJh
bnNmb3JtT3JpZ2luKGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLCBDU1NW
YWx1ZSomLCBDU1NWYWx1ZSomKTsKKyAgICAgICAgYm9vbCBwYXJzZVRyYW5zZm9ybU9yaWdpbihp
bnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgUmVmUHRyPENTU1ZhbHVlPiYs
IFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgCiAgICAgICAgIGludCB5eXBhcnNlKCk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9T
VkdDU1NQYXJzZXIuY3BwCmluZGV4IDg2YWMwM2YuLjBhZGRjN2QgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNw
cApAQCAtNDcsNyArNDcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICBpbnQgaWQgPSB2YWx1ZS0+aWQ7CiAKICAgICBib29s
IHZhbGlkX3ByaW1pdGl2ZSA9IGZhbHNlOwotICAgIENTU1ZhbHVlKiBwYXJzZWRWYWx1ZSA9IDA7
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKIAogICAgIHN3aXRjaCAocHJvcElk
KSB7CiAgICAgLyogVGhlIGNvbW1lbnQgdG8gdGhlIHJpZ2h0IGRlZmluZXMgYWxsIHZhbGlkIHZh
bHVlIG9mIHRoZXNlCkBAIC0zMDMsMTcgKzMwMywxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gbmV3IENTU1F1aXJrUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19FTVMpOwogICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9Ci0g
ICAgaWYgKHBhcnNlZFZhbHVlKSB7Ci0gICAgICAgIGlmICghdmFsdWVMaXN0LT5jdXJyZW50KCkg
fHwgaW5TaG9ydGhhbmQoKSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJz
ZWRWYWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGRlbGV0ZSBwYXJzZWRWYWx1ZTsKKyAgICBpZiAocGFyc2VkVmFsdWUgJiYgKCF2
YWx1ZUxpc3QtPmN1cnJlbnQoKSB8fCBpblNob3J0aGFuZCgpKSkgeworICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIHBhcnNlZFZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ1NTVmFsdWUqIENT
U1BhcnNlcjo6cGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiB7CiAgICAgQ1NTVmFsdWVMaXN0
KiByZXQgPSBuZXcgQ1NTVmFsdWVMaXN0OwogICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+
Y3VycmVudCgpOwpAQCAtMzM4LDcgKzMzNSw3IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBhcnNl
U1ZHU3Ryb2tlRGFzaGFycmF5KCkKICAgICByZXR1cm4gcmV0OwogfQogCi1DU1NWYWx1ZSogQ1NT
UGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VTVkdQYWludCgpCiB7CiAgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAg
ICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgpLCBjLCB0cnVl
KSkKQEAgLTM0Niw3ICszNDMsNyBAQCBDU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50
KCkKICAgICByZXR1cm4gbmV3IFNWR1BhaW50KENvbG9yKGMpKTsKIH0KIAotQ1NTVmFsdWUqIENT
U1BhcnNlcjo6cGFyc2VTVkdDb2xvcigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlU1ZHQ29sb3IoKQogewogICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50Owog
ICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYywgdHJ1
ZSkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18813</attachid>
            <date>2008-01-31 00:38:07 -0800</date>
            <delta_ts>2008-01-31 10:19:00 -0800</delta_ts>
            <desc>Beat CSSParser with the RefPtr stick</desc>
            <filename>Beat-CSSParser-with-the-RefPtr-stick.patch</filename>
            <type>text/plain</type>
            <size>42244</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NjVlNDk2NjNkZjhhYTEzOWRhY2FkNWU0YWEyMzE5OWJkODRlMDQwOQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMjE3Yjc1Li44YzIxZTdk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA4LTAxLTMwICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWF0
IENTU1BhcnNlciB3aXRoIHRoZSBSZWZQdHIgc3RpY2suICBIb3BlZnVsbHkgc3F1YXNoaW5nIGFu
eSBsZWFrcyBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKERlcGxveSBSZWZQdHIgYW5kIFBhc3NS
ZWZQdHIgdGhyb3VnaG91dCBDU1NQYXJzZXIpCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTA4CisKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2Vz
LCB0aHVzIG5vIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkQmFj
a2dyb3VuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3Jv
dW5kU2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkVHJhbnNpdGlv
blZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hv
cnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dQYXJzZUNvbnRleHQ6OlNoYWRvd1BhcnNlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJvcmRlckltYWdlUGFyc2VDb250ZXh0OjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZSk6
CisKIDIwMDgtMDEtMzAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwIGIvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24uY3BwCmluZGV4IGExNGEzNzcuLjI0MzRjZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Y3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTYwLDggKzYwLDEwIEBAIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnQsIGNvbnN0IENTCiAgICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCkKICAgICAsIG1f
bm9kZSgwKQogewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CisgICAgICAgIEFT
U0VSVChwcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVz
W2ldKTsKKyAgICB9CiAgICAgLy8gRklYTUU6IFRoaXMgYWxsb3dzIGR1cGxpY2F0ZSBwcm9wZXJ0
aWVzLgogfQogCkBAIC01NzMsNiArNTc1LDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICoKICAg
ICAgICAgLy8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3Vu
dGVycGFydCBwcmVzZW50CiAgICAgICAgIGlmICghZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0
aWVzW2ldLT5pZCgpKSB8fCBwcm9wZXJ0aWVzW2ldLT5pc0ltcG9ydGFudCgpKSB7CiAgICAgICAg
ICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLT5pZCgpLCBmYWxzZSk7CisgICAgICAg
ICAgICBBU1NFUlQocHJvcGVydGllc1tpXSk7CiAgICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQo
KnByb3BlcnRpZXNbaV0pOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggZjNiNWJh
YS4uZDEyNGMyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0yNTksNyArMjU5LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wg
c3RyaWN0KQogCiAgICAgLy8gRmlyc3QgdHJ5IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5
IG5hbWUgb3IgdGhlICIjIiBzeW50YXguCiAgICAgaWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJp
bmcsIGNvbG9yLCBzdHJpY3QpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj5kdW1teVN0eWxlRGVjbGFyYXRpb24gPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb247CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZHVtbXlT
dHlsZURlY2xhcmF0aW9uKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik7CiAKICAgICAg
ICAgLy8gTm93IHRyeSB0byBjcmVhdGUgYSBjb2xvciBmcm9tIHRoZSByZ2IoKSBvciByZ2JhKCkg
c3ludGF4LgogICAgICAgICBpZiAocGFyc2VyLnBhcnNlQ29sb3IoZHVtbXlTdHlsZURlY2xhcmF0
aW9uLmdldCgpLCBzdHJpbmcpKSB7CkBAIC01MjksNyArNTI5LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgfQogCiAgICAgYm9v
bCB2YWxpZF9wcmltaXRpdmUgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZSAqcGFyc2VkVmFsdWUgPSAw
OworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CiAKICAgICAvLyBJbiBxdWlya3Mg
bW9kZSwgd2Ugd2lsbCBsb29rIGZvciB1bml0cyB0aGF0IGhhdmUgYmVlbiBpbmNvcnJlY3RseSBz
ZXBhcmF0ZWQgZnJvbSB0aGUgbnVtYmVyIHRoZXkgYmVsb25nIHRvCiAgICAgLy8gYnkgYSBzcGFj
ZS4gIFdlIGdvIGFoZWFkIGFuZCBhc3NvY2lhdGUgdGhlIHVuaXQgd2l0aCB0aGUgbnVtYmVyIGV2
ZW4gdGhvdWdoIGl0IGlzIGludmFsaWQgQ1NTLgpAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAv
LyBbPHVyaT4sXSogIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1bHQgfCBwb2ludGVyIHwgcHJv
Z3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAogICAgICAgICAvLyBudy1yZXNp
emUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3LXJlc2l6ZSB8IHMtcmVzaXplIHwgdy1yZXNp
emUgfCBldy1yZXNpemUgfCAKICAgICAgICAgLy8gbnMtcmVzaXplIHwgbmVzdy1yZXNpemUgfCBu
d3NlLXJlc2l6ZSB8IGNvbC1yZXNpemUgfCByb3ctcmVzaXplIHwgdGV4dCB8IHdhaXQgfCBoZWxw
IF0gXSB8IGluaGVyaXQKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gMDsKKyAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKICAgICAgICAgd2hpbGUgKHZhbHVlICYmIHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICBpZiAo
IWxpc3QpCiAgICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7IApAQCAtODEw
LDEwICs4MTAsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIEludFBvaW50IGhvdHNwb3Q7CiAgICAgICAgICAgICBp
bnQgbnJjb29yZHMgPSBjb29yZHMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKG5yY29vcmRzID4g
MCAmJiBucmNvb3JkcyAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgeyAvLyBv
bmx5IHN1cHBvcnQgaG90c3BvdCBwYWlycyBpbiBzdHJpY3QgbW9kZQotICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgbGlzdDsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSAvLyBvbmx5IHN1
cHBvcnQgaG90c3BvdCBwYWlycyBpbiBzdHJpY3QgbW9kZQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKHN0
cmljdCAmJiBucmNvb3JkcyA9PSAyKQogICAgICAgICAgICAgICAgIGhvdHNwb3QgPSBJbnRQb2lu
dChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7CiAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8IGNvb3Jk
cy5zaXplKCkgPT0gMCkgewpAQCAtODI4LDI0ICs4MjYsMjAgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob3RzcG90LCBzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHN0cmljdCAmJiAhdmFsdWUpIHx8ICh2
YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IFZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVl
ID09ICcsJykpKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGxpc3Q7CisgICAgICAgICAgICBp
ZiAoKHN0cmljdCAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IFZhbHVl
OjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0
LT5uZXh0KCk7IC8vIGNvbW1hCiAgICAgICAgIH0KICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAg
ICAgICAgIGlmICghdmFsdWUpIHsgLy8gbm8gdmFsdWUgYWZ0ZXIgdXJsIGxpc3QgKE1TSUUgNSBj
b21wYXRpYmlsaXR5KQotICAgICAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsaXN0OworICAgICAgICAgICAgICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHZhbHVl
LT5pZCA9PSBDU1NfVkFMX0hBTkQpIC8vIE1TSUUgNSBjb21wYXRpYmlsaXR5IDovCiAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NfVkFMX1BPSU5U
RVIpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICYmICgodmFsdWUtPmlkID49IENTU19W
QUxfQVVUTyAmJiB2YWx1ZS0+aWQgPD0gQ1NTX1ZBTF9BTExfU0NST0xMKSB8fCB2YWx1ZS0+aWQg
PT0gQ1NTX1ZBTF9DT1BZIHx8IHZhbHVlLT5pZCA9PSBDU1NfVkFMX05PTkUpKQogICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKSk7CiAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
bGlzdDsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZCA9IHZhbHVlLT5pZDsKQEAgLTg2Nywx
MiArODYxLDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9ZOgogICAg
IGNhc2UgQ1NTX1BST1BfX1dFQktJVF9CQUNLR1JPVU5EX1NJWkU6CiAgICAgY2FzZSBDU1NfUFJP
UF9CQUNLR1JPVU5EX1JFUEVBVDogewotICAgICAgICBDU1NWYWx1ZSAqdmFsMSA9IDAsICp2YWwy
ID0gMDsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwxOworICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbDI7CiAgICAgICAgIGludCBwcm9wSWQxLCBwcm9wSWQyOwogICAgICAgICBpZiAo
cGFyc2VCYWNrZ3JvdW5kUHJvcGVydHkocHJvcElkLCBwcm9wSWQxLCBwcm9wSWQyLCB2YWwxLCB2
YWwyKSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMSwgdmFsMSwgaW1wb3J0YW50
KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIHZhbDEucmVsZWFzZSgpLCBpbXBv
cnRhbnQpOwogICAgICAgICAgICAgaWYgKHZhbDIpCi0gICAgICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkMiwgdmFsMiwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wSWQyLCB2YWwyLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDIsNyArMTAz
Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgICAgICBpZiAoaWQgPT0gQ1NTX1ZBTF9OT05FKSB7CiAgICAgICAgICAgICB2YWxp
ZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0ICpsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QobmV3IENTU1ZhbHVlTGlzdCk7CiAgICAgICAgICAgICBib29sIGlzX3Zh
bGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHdoaWxlKGlzX3ZhbGlkICYmIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKQEAgLTEwNTgsMTEgKzEwNTMsMTAgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVMaXN0LT5uZXh0
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihsaXN0LT5sZW5ndGgoKSAmJiBpc192
YWxpZCkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbGlzdDsKKyAgICAgICAgICAg
IGlmIChsaXN0LT5sZW5ndGgoKSAmJiBpc192YWxpZCkgeworICAgICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBkZWxldGUgbGlzdDsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtMTA4OCw5ICsxMDgy
LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgIGlmIChpZCA9PSBDU1NfVkFMX05PTkUpCiAgICAgICAgICAgICB2YWxpZF9w
cmltaXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlz
dCogdmFsdWVzID0gbmV3IENTU1ZhbHVlTGlzdCgpOworICAgICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gdmFsdWVzKG5ldyBDU1NWYWx1ZUxpc3QoKSk7CiAgICAgICAgICAgICBWYWx1ZSog
dmFsOwotICAgICAgICAgICAgQ1NTVmFsdWUqIHBhcnNlZFZhbHVlID0gMDsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CiAgICAgICAgICAgICB3aGlsZSAoKHZhbCA9
IHZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlID0gcGFyc2VVUkwoZG9tU3RyaW5nKHZhbC0+c3RyaW5nKSk7CkBAIC0xMTAwLDE3
ICsxMDk0LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZXMtPmFw
cGVuZChwYXJzZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHBh
cnNlZFZhbHVlLmdldCgpKTsgLy8gRklYTUU6IHdoeSB3b3VsZSBvbmUgZXZlciBhcHBlbmQgdGhl
IHNhbWUgdmFsdWUgdHdpY2U/CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZXMsIGltcG9ydGFudCk7CisgICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZXMucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAg
ICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIHZhbHVlczsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xMTMxLDMwICsxMTI0LDI4
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGgsIHN0
cmljdCk7CiAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcGFyc2VkVmFsdWUxID0gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CisgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5m
VmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7CiAgICAgICAgIGlmIChu
dW0gPT0gMikgewogICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAg
ICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCwgc3RyaWN0
KTsKLSAgICAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKSB7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIHBhcnNlZFZhbHVlMTsKKyAgICAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHBhcnNlZFZhbHVlMiA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAgICAg
ICAgIAotICAgICAgICBQYWlyKiBwYWlyID0gbmV3IFBhaXIocGFyc2VkVmFsdWUxLCBwYXJzZWRW
YWx1ZTIpOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsID0gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHBhaXIpOworICAgICAgICBQYXNzUmVmUHRyPFBhaXI+IHBhaXIgPSBuZXcgUGFpcihw
YXJzZWRWYWx1ZTEucmVsZWFzZSgpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgpKTsKKyAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocGFp
cik7CiAgICAgICAgIGlmIChwcm9wSWQgPT0gQ1NTX1BST1BfX1dFQktJVF9CT1JERVJfUkFESVVT
KSB7CiAgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfX1dF
QktJVF9CT1JERVJfVE9QX1JJR0hUX1JBRElVUywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NfUFJPUF9fV0VCS0lUX0JPUkRFUl9UT1BfTEVGVF9SQURJVVMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfX1dFQktJVF9C
T1JERVJfQk9UVE9NX0xFRlRfUkFESVVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU19QUk9QX19XRUJLSVRfQk9SREVSX0JPVFRPTV9SSUdIVF9SQURJVVMgfTsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgICAgICAgICAg
IGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbCwgaW1wb3J0YW50KTsKKyAgICAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWwuZ2V0KCksIGltcG9ydGFudCk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwsIGltcG9y
dGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHZhbC5yZWxlYXNlKCksIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENTU19QUk9Q
X09VVExJTkVfT0ZGU0VUOgpAQCAtMTI2OCwxMiArMTI1OSwxMyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU19QUk9Q
X19XRUJLSVRfVFJBTlNGT1JNX09SSUdJTjoKICAgICBjYXNlIENTU19QUk9QX19XRUJLSVRfVFJB
TlNGT1JNX09SSUdJTl9YOgogICAgIGNhc2UgQ1NTX1BST1BfX1dFQktJVF9UUkFOU0ZPUk1fT1JJ
R0lOX1k6IHsKLSAgICAgICAgQ1NTVmFsdWUgKnZhbDEgPSAwLCAqdmFsMiA9IDA7CisgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsMTsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwyOwog
ICAgICAgICBpbnQgcHJvcElkMSwgcHJvcElkMjsKICAgICAgICAgaWYgKHBhcnNlVHJhbnNmb3Jt
T3JpZ2luKHByb3BJZCwgcHJvcElkMSwgcHJvcElkMiwgdmFsMSwgdmFsMikpIHsKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIHZhbDEsIGltcG9ydGFudCk7CisgICAgICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQxLCB2YWwxLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAg
ICAgIGlmICh2YWwyKQotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDIsIHZhbDIs
IGltcG9ydGFudCk7CisgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMiwgdmFsMi5y
ZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjgyLDkgKzEyNzQsOSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENT
U19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9SRVBFQVRfQ09VTlQ6CiAgICAgY2FzZSBDU1NfUFJP
UF9fV0VCS0lUX1RSQU5TSVRJT05fVElNSU5HX0ZVTkNUSU9OOgogICAgIGNhc2UgQ1NTX1BST1Bf
X1dFQktJVF9UUkFOU0lUSU9OX1BST1BFUlRZOiB7Ci0gICAgICAgIENTU1ZhbHVlKiB2YWwgPSAw
OworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKICAgICAgICAgaWYgKHBhcnNlVHJhbnNp
dGlvblByb3BlcnR5KHByb3BJZCwgdmFsKSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCB2YWwsIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHZh
bC5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTUzLDI1ICsxNTQ1LDI0IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIH0K
ICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgaWYgKCF2YWx1ZUxpc3QtPmN1cnJlbnQo
KSB8fCBpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBh
cnNlZFZhbHVlLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBw
YXJzZWRWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBkZWxldGUgcGFyc2VkVmFsdWU7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZEJhY2tncm91bmRWYWx1ZShDU1NW
YWx1ZSomIGx2YWwsIENTU1ZhbHVlKiBydmFsKQordm9pZCBDU1NQYXJzZXI6OmFkZEJhY2tncm91
bmRWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFs
KQogewogICAgIGlmIChsdmFsKSB7CiAgICAgICAgIGlmIChsdmFsLT5pc1ZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4obHZhbCktPmFwcGVuZChydmFs
KTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGx2YWwuZ2V0KCkpLT5h
cHBlbmQocnZhbCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1NTVmFsdWUqIG9sZFZh
bCA9IGx2YWw7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBuZXcgQ1NTVmFsdWVM
aXN0KCk7Ci0gICAgICAgICAgICBsdmFsID0gbGlzdDsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChvbGRWYWwpOworICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gb2xkbFZhbChsdmFs
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdChu
ZXcgQ1NTVmFsdWVMaXN0KCkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG9sZGxWYWwpOwog
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHJ2YWwpOworICAgICAgICAgICAgbHZhbCA9IGxpc3Q7
CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMTU5MSw4ICsxNTgyLDggQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICBT
aG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NfUFJPUF9CQUNLR1JPVU5EKTsKIAogICAgIGJv
b2wgcGFyc2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07IC8vIGNvbXBpbGVy
IHdpbGwgcmVwZWF0IGZhbHNlIGFzIG5lY2Vzc2FyeQotICAgIENTU1ZhbHVlKiB2YWx1ZXNbbnVt
UHJvcGVydGllc10gPSB7IDAgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgMCBhcyBuZWNlc3Nh
cnkKLSAgICBDU1NWYWx1ZSogcG9zaXRpb25ZVmFsdWUgPSAwOworICAgIFZlY3RvcjxSZWZQdHI8
Q1NTVmFsdWU+LCBudW1Qcm9wZXJ0aWVzPiB2YWx1ZXMobnVtUHJvcGVydGllcyk7CisgICAgUmVm
UHRyPENTU1ZhbHVlPiBwb3NpdGlvbllWYWx1ZTsKICAgICBpbnQgaTsKIAogICAgIHdoaWxlICh2
YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewpAQCAtMTYwNCw3ICsxNTk1LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SICYmIHBh
cnNlZFByb3BlcnR5W2ldKQogICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBpcyBub3QgYWxs
b3dlZCBleGNlcHQgYXMgdGhlIGxhc3QgaXRlbSBpbiBhIGxpc3QuICBSZWplY3QgdGhlIGVudGly
ZQogICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAg
Z290byBmYWlsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTX1BS
T1BfQkFDS0dST1VORF9DT0xPUikgewogICAgICAgICAgICAgICAgICAgICBhZGRCYWNrZ3JvdW5k
VmFsdWUodmFsdWVzW2ldLCBuZXcgQ1NTSW5pdGlhbFZhbHVlKHRydWUpKTsKQEAgLTE2MjAsMTMg
KzE2MTEsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29s
IGltcG9ydGFudCkKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGkg
PSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAgICAgaWYg
KCFwYXJzZWRQcm9wZXJ0eVtpXSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlICp2YWwxID0g
MCwgKnZhbDIgPSAwOworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMTsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7CiAgICAgICAgICAgICAgICAgaW50
IHByb3BJZDEsIHByb3BJZDI7CiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZFBy
b3BlcnR5KHByb3BlcnRpZXNbaV0sIHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBhZGRCYWNrZ3JvdW5kVmFsdWUodmFsdWVzW2ldLCB2YWwxKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkQmFja2dyb3VuZFZhbHVlKHZhbHVlc1tpXSwgdmFsMS5yZWxl
YXNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NfUFJP
UF9CQUNLR1JPVU5EX1BPU0lUSU9OKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQmFja2dy
b3VuZFZhbHVlKHBvc2l0aW9uWVZhbHVlLCB2YWwyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZEJhY2tncm91bmRWYWx1ZShwb3NpdGlvbllWYWx1ZSwgdmFsMi5yZWxlYXNlKCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTYzNCw3ICsxNjI2
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNob3J0aGFuZChib29sIGltcG9y
dGFudCkKICAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0
aGlzIGlzIGFuCiAgICAgICAgIC8vIGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGln
bm9yZSBpdAogICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgZ290byBmYWlsOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICAvLyBGaWxsIGluIGFueSBy
ZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgpAQCAtMTY0OSwzMyAr
MTY0MSwyNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kU2hvcnRoYW5kKGJvb2wg
aW1wb3J0YW50KQogICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5k
LgogICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspIHsKICAgICAgICAgaWYg
KHByb3BlcnRpZXNbaV0gPT0gQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTikgewotICAgICAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9YLCB2YWx1ZXNb
aV0sIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NfUFJPUF9CQUNLR1JP
VU5EX1BPU0lUSU9OX1ksIHBvc2l0aW9uWVZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVl
c1tpXSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU19QUk9QX0JBQ0tH
Uk9VTkRfUE9TSVRJT05fWCwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAgICAg
ICAgICAgIC8vIGl0J3MgT0sgdG8gY2FsbCBwb3NpdGlvbllWYWx1ZS5yZWxlYXNlKCkgc2luY2Ug
d2Ugb25seSBzZWUgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTiBvbmNlCisgICAgICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1ksIHBvc2l0aW9uWVZh
bHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWx1ZXNbaV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQp
OwogICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ1ZTsKLQotZmFpbDoKLSAgICBmb3IgKGludCBr
ID0gMDsgayA8IG51bVByb3BlcnRpZXM7IGsrKykKLSAgICAgICAgZGVsZXRlIHZhbHVlc1trXTsK
LSAgICBkZWxldGUgcG9zaXRpb25ZVmFsdWU7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKENTU1ZhbHVlKiYgbHZhbCwgQ1NTVmFsdWUq
IHJ2YWwpCit2b2lkIENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1
ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsK
ICAgICAgICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPihsdmFsKS0+YXBwZW5kKHJ2YWwpOworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4obHZhbC5nZXQoKSktPmFwcGVuZChydmFsKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogb2xkVmFsID0gbHZhbDsKLSAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCogbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3QoKTsKLSAgICAgICAgICAgIGx2
YWwgPSBsaXN0OworICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gb2xkVmFsKGx2YWwu
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0KG5l
dyBDU1NWYWx1ZUxpc3QoKSk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQob2xkVmFsKTsKICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChydmFsKTsKKyAgICAgICAgICAgIGx2YWwgPSBsaXN0Owog
ICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTE2OTEsNyArMTY3Nyw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgU2hv
cnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTX1BST1BfX1dFQktJVF9UUkFOU0lUSU9OKTsKIAog
ICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNlIH07IC8vIGNv
bXBpbGVyIHdpbGwgcmVwZWF0IGZhbHNlIGFzIG5lY2Vzc2FyeQotICAgIENTU1ZhbHVlKiB2YWx1
ZXNbbnVtUHJvcGVydGllc10gPSB7IDAgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgMCBhcyBu
ZWNlc3NhcnkKKyAgICBWZWN0b3I8UmVmUHRyPENTU1ZhbHVlPiwgbnVtUHJvcGVydGllcz4gdmFs
dWVzKG51bVByb3BlcnRpZXMpOwogICAgIAogICAgIGludCBpOwogICAgIHdoaWxlICh2YWx1ZUxp
c3QtPmN1cnJlbnQoKSkgewpAQCAtMTcxMSwxMCArMTY5NywxMCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVy
dGllczsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7Ci0gICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbCA9IDA7CisgICAgICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWw7CiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVHJhbnNpdGlvblByb3BlcnR5
KHByb3BlcnRpZXNbaV0sIHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVy
dHlbaV0gPSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25W
YWx1ZSh2YWx1ZXNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25W
YWx1ZSh2YWx1ZXNbaV0sIHZhbC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTcyMiw3ICsxNzA4LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgLy8gaWYg
d2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCiAgICAgICAgIC8v
IGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAogICAgICAgICBpZiAo
IWZvdW5kKQotICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKICAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3
aXRoIHRoZSBpbml0aWFsIHZhbHVlLgpAQCAtMTczMywxNCArMTcxOSw5IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgCiAgICAg
Ly8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCiAgICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGll
c1tpXSwgdmFsdWVzW2ldLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0
aWVzW2ldLCB2YWx1ZXNbaV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgIAogICAgIHJldHVy
biB0cnVlOwotCi1mYWlsOgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbnVtUHJvcGVydGllczsg
aysrKQotICAgICAgICBkZWxldGUgdmFsdWVzW2tdOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGludCAqcHJv
cGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KQpAQCAtMTkwMyw3ICsx
ODg0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNTU1ZhbHVlKiBDU1NQYXJzZXI6OnBh
cnNlQmFja2dyb3VuZENvbG9yKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGludCBpZCA9IHZhbHVlTGlzdC0+Y3VycmVudCgp
LT5pZDsKICAgICBpZiAoaWQgPT0gQ1NTX1ZBTF9fV0VCS0lUX1RFWFQgfHwgKGlkID49IENTU19W
QUxfQVFVQSAmJiBpZCA8PSBDU1NfVkFMX1dJTkRPV1RFWFQpIHx8IGlkID09IENTU19WQUxfTUVO
VSB8fApAQCAtMTkxMiw3ICsxODkzLDcgQEAgQ1NTVmFsdWUqIENTU1BhcnNlcjo6cGFyc2VCYWNr
Z3JvdW5kQ29sb3IoKQogICAgIHJldHVybiBwYXJzZUNvbG9yKCk7CiB9CiAKLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUJhY2tncm91bmRJbWFnZShDU1NWYWx1ZSomIHZhbHVlKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQmFja2dyb3VuZEltYWdlKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTX1ZBTF9OT05FKSB7CiAgICAgICAg
IHZhbHVlID0gbmV3IENTU0ltYWdlVmFsdWUoKTsKQEAgLTE5MjgsNyArMTkwOSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRJbWFnZShDU1NWYWx1ZSomIHZhbHVlKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotQ1NTVmFsdWUqIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUG9z
aXRpb25YWShib29sJiB4Rm91bmQsIGJvb2wmIHlGb3VuZCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUG9zaXRpb25YWShib29sJiB4Rm91bmQsIGJvb2wm
IHlGb3VuZCkKIHsKICAgICBpbnQgaWQgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CiAgICAg
aWYgKGlkID09IENTU19WQUxfTEVGVCB8fCBpZCA9PSBDU1NfVkFMX1RPUCB8fCBpZCA9PSBDU1Nf
VkFMX1JJR0hUIHx8IGlkID09IENTU19WQUxfQk9UVE9NIHx8IGlkID09IENTU19WQUxfQ0VOVEVS
KSB7CkBAIC0xOTU5LDkgKzE5NDAsOCBAQCBDU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZUJhY2tn
cm91bmRQb3NpdGlvblhZKGJvb2wmIHhGb3VuZCwgYm9vbCYgeUZvdW5kKQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUG9zaXRpb24oQ1NTVmFsdWUq
JiB2YWx1ZTEsIENTU1ZhbHVlKiYgdmFsdWUyKQordm9pZCBDU1NQYXJzZXI6OnBhcnNlQmFja2dy
b3VuZFBvc2l0aW9uKFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdWUyKQogewotICAgIHZhbHVlMSA9IHZhbHVlMiA9IDA7CiAgICAgVmFsdWUqIHZhbHVlID0g
dmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIGZpcnN0IHZhbHVl
LiAgV2UncmUganVzdCBtYWtpbmcgc3VyZSB0aGF0IGl0IGlzIG9uZSBvZiB0aGUgdmFsaWQga2V5
d29yZHMgb3IgYSBwZXJjZW50YWdlL2xlbmd0aC4KQEAgLTE5ODYsOCArMTk2Niw3IEBAIHZvaWQg
Q1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRQb3NpdGlvbihDU1NWYWx1ZSomIHZhbHVlMSwgQ1NT
VmFsdWUqJiB2YWx1ZTIpCiAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoIWluU2hvcnRoYW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgdmFsdWUxOwotICAgICAgICAgICAgICAgIHZhbHVlMSA9IDA7CisgICAgICAgICAg
ICAgICAgdmFsdWUxLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0yMDAwLDE1ICsxOTc5LDExIEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZUJhY2tncm91bmRQb3NpdGlvbihDU1NWYWx1ZSomIHZhbHVlMSwgQ1NTVmFsdWUqJiB2YWx1
ZTIpCiAgICAgICAgIC8vIEZvciBsZWZ0L3JpZ2h0L2NlbnRlciwgdGhlIGRlZmF1bHQgb2YgNTAl
IGluIHRoZSB5IGlzIHN0aWxsIGNvcnJlY3QuCiAgICAgICAgIHZhbHVlMiA9IG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKIAotICAg
IGlmICh2YWx1ZTFJc1kgfHwgdmFsdWUySXNYKSB7Ci0gICAgICAgIC8vIFN3YXAgb3VyIHR3byB2
YWx1ZXMuCi0gICAgICAgIENTU1ZhbHVlKiB2YWwgPSB2YWx1ZTI7Ci0gICAgICAgIHZhbHVlMiA9
IHZhbHVlMTsKLSAgICAgICAgdmFsdWUxID0gdmFsOwotICAgIH0KKyAgICBpZiAodmFsdWUxSXNZ
IHx8IHZhbHVlMklzWCkKKyAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKIH0KIAotQ1NTVmFs
dWUqIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kU2l6ZSgpCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZFNpemUoKQogewogICAgIFZhbHVlKiB2YWx1ZSA9
IHZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwYXJzZWRWYWx1
ZTE7CkBAIC0yMDM5LDExICsyMDE0LDE0IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBhcnNlQmFj
a2dyb3VuZFNpemUoKQogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUHJvcGVy
dHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlKiYgcmV0VmFsdWUxLCBDU1NWYWx1
ZSomIHJldFZhbHVlMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+JiByZXRWYWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZhbHVlMikK
IHsKLSAgICBDU1NWYWx1ZUxpc3QgKnZhbHVlcyA9IDAsICp2YWx1ZXMyID0gMDsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVz
MjsKICAgICBWYWx1ZSogdmFsOwotICAgIENTU1ZhbHVlICp2YWx1ZSA9IDAsICp2YWx1ZTIgPSAw
OworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZTI7CisgICAgCiAgICAgYm9vbCBhbGxvd0NvbW1hID0gZmFsc2U7CiAgICAgCiAgICAgcmV0VmFs
dWUxID0gcmV0VmFsdWUyID0gMDsKQEAgLTIwNTUsMTAgKzIwMzMsMTIgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQmFja2dyb3VuZFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50
JiBwcm9wSWQyLAogICAgIH0KIAogICAgIHdoaWxlICgodmFsID0gdmFsdWVMaXN0LT5jdXJyZW50
KCkpKSB7Ci0gICAgICAgIENTU1ZhbHVlICpjdXJyVmFsdWUgPSAwLCAqY3VyclZhbHVlMiA9IDA7
CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOworICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGN1cnJWYWx1ZTI7CisgICAgICAgIAogICAgICAgICBpZiAoYWxsb3dDb21tYSkgewog
ICAgICAgICAgICAgaWYgKHZhbC0+dW5pdCAhPSBWYWx1ZTo6T3BlcmF0b3IgfHwgdmFsLT5pVmFs
dWUgIT0gJywnKQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAg
ICAgYWxsb3dDb21tYSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgewpAQCAtMjEyMiwyOSArMjEw
MiwyNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kUHJvcGVydHkoaW50IHByb3BJ
ZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAgICAg
ICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewogICAgICAgICAgICAg
ICAgIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxpc3QoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAg
ICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICh2YWx1ZTIgJiYgIXZhbHVlczIpIHsKICAgICAgICAg
ICAgICAgICB2YWx1ZXMyID0gbmV3IENTU1ZhbHVlTGlzdCgpOwotICAgICAgICAgICAgICAgIHZh
bHVlczItPmFwcGVuZCh2YWx1ZTIpOwotICAgICAgICAgICAgICAgIHZhbHVlMiA9IDA7CisgICAg
ICAgICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKHZhbHVlMi5yZWxlYXNlKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAg
ICAgIHZhbHVlcy0+YXBwZW5kKGN1cnJWYWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVzLT5h
cHBlbmQoY3VyclZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBjdXJyVmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJyVmFs
dWUucmVsZWFzZSgpOwogICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZTIpIHsKICAgICAgICAgICAg
ICAgICBpZiAodmFsdWVzMikKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKGN1
cnJWYWx1ZTIpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMyLT5hcHBlbmQoY3VyclZhbHVl
Mi5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUyID0gY3VyclZhbHVlMjsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUyID0gY3VyclZh
bHVlMi5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhbGxvd0NvbW1hID0g
dHJ1ZTsKICAgICAgICAgfQpAQCAtMjE1NiwyNCArMjEzNCwyMCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VCYWNrZ3JvdW5kUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHBy
b3BJZDIsCiAgICAgfQogCiAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJldFZhbHVlMSA9IHZhbHVlczsKKyAgICAgICAgcmV0VmFsdWUxID0gdmFsdWVzLnJl
bGVhc2UoKTsKICAgICAgICAgaWYgKHZhbHVlczIgJiYgdmFsdWVzMi0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXRWYWx1ZTIgPSB2YWx1ZXMyOworICAgICAgICAgICAgcmV0VmFsdWUyID0gdmFs
dWVzMi5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodmFs
dWUpIHsKLSAgICAgICAgcmV0VmFsdWUxID0gdmFsdWU7Ci0gICAgICAgIHJldFZhbHVlMiA9IHZh
bHVlMjsKKyAgICAgICAgcmV0VmFsdWUxID0gdmFsdWUucmVsZWFzZSgpOworICAgICAgICByZXRW
YWx1ZTIgPSB2YWx1ZTIucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0K
LWZhaWxlZDoKLSAgICBkZWxldGUgdmFsdWVzOyBkZWxldGUgdmFsdWVzMjsKLSAgICBkZWxldGUg
dmFsdWU7IGRlbGV0ZSB2YWx1ZTI7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1DU1NWYWx1ZSog
Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25EdXJhdGlvbigpCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCkKIHsKICAgICBWYWx1ZSogdmFs
dWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGlt
ZSwgc3RyaWN0KSkKQEAgLTIxODEsNyArMjE1NSw3IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBh
cnNlVHJhbnNpdGlvbkR1cmF0aW9uKCkKICAgICByZXR1cm4gMDsKIH0KIAotQ1NTVmFsdWUqIENT
U1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQoKQorUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpCiB7CiAgICAgVmFsdWUq
IHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1Nf
VkFMX0lORklOSVRFKQpAQCAtMjIwOSw3ICsyMTgzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VGltaW5nRnVuY3Rpb25WYWx1ZShWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3VsdCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotQ1NTVmFsdWUqIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9u
VGltaW5nRnVuY3Rpb24oKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbigpCiB7CiAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NfVkFMX0FVVE8gfHwgdmFsdWUt
PmlkID09IENTU19WQUxfTElORUFSIHx8IHZhbHVlLT5pZCA9PSBDU1NfVkFMX0VBU0VfSU4gfHwg
dmFsdWUtPmlkID09IENTU19WQUxfRUFTRV9PVVQgfHwgdmFsdWUtPmlkID09IENTU19WQUxfRUFT
RV9JTl9PVVQpCkBAIC0yMjQwLDcgKzIyMTQsNyBAQCBDU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJz
ZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpCiAgICAgcmV0dXJuIG5ldyBDU1NUaW1pbmdGdW5j
dGlvblZhbHVlKHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotQ1NTVmFsdWUqIENTU1BhcnNlcjo6cGFy
c2VUcmFuc2l0aW9uUHJvcGVydHkoKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpCiB7CiAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQpIHsKQEAgLTIyNTgsMjAgKzIyMzIsMjAgQEAgQ1NTVmFsdWUqIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKQogICAgIHJldHVybiAwOwogfQogCi1ib29sIENTU1Bh
cnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgQ1NTVmFsdWUqJiByZXN1
bHQpCitib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwg
UmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogewotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0g
MDsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7CiAgICAgVmFsdWUqIHZhbDsKLSAg
ICBDU1NWYWx1ZSogdmFsdWUgPSAwOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CiAgICAg
Ym9vbCBhbGxvd0NvbW1hID0gZmFsc2U7CiAgICAgCiAgICAgcmVzdWx0ID0gMDsKIAogICAgIHdo
aWxlICgodmFsID0gdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiBj
dXJyVmFsdWUgPSAwOworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTsKICAgICAg
ICAgaWYgKGFsbG93Q29tbWEpIHsKICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgIT0gVmFsdWU6
Ok9wZXJhdG9yIHx8IHZhbC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgICAgICBnb3RvIGZh
aWxlZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2YWx1ZUxp
c3QtPm5leHQoKTsKICAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKICAgICAgICAgfQpA
QCAtMjMwMCwxOCArMjI3NCwxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJv
cGVydHkoaW50IHByb3BJZCwgQ1NTVmFsdWUqJiByZXN1bHQpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQotICAgICAgICAgICAgICAgIGdv
dG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZXMpIHsKICAgICAgICAgICAgICAgICB2YWx1
ZXMgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQo
dmFsdWUpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICB2YWx1
ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5k
KGN1cnJWYWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJl
bGVhc2UoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJy
VmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJyVmFsdWUucmVsZWFzZSgpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKICAgICAgICAgfQpAQCAt
MjMyMywxNyArMjI5NiwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJvcGVy
dHkoaW50IHByb3BJZCwgQ1NTVmFsdWUqJiByZXN1bHQpCiAgICAgfQogICAgIAogICAgIGlmICh2
YWx1ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQgPSB2YWx1ZXM7Cisg
ICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAg
IHJlc3VsdCA9IHZhbHVlLnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
Ci1mYWlsZWQ6Ci0gICAgZGVsZXRlIHZhbHVlczsKLSAgICBkZWxldGUgdmFsdWU7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCkBAIC0yNjk0LDcgKzI2NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ1NTVmFsdWVM
aXN0KiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCitQYXNzUmVmUHRyPENTU1ZhbHVlTGlz
dD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogewogICAgIENTU1ZhbHVlTGlzdCogbGlz
dCA9IG5ldyBDU1NWYWx1ZUxpc3Q7CiAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJy
ZW50KCk7CkBAIC0yNzU3LDE1ICsyNzI2LDE0IEBAIENTU1ZhbHVlTGlzdCogQ1NTUGFyc2VyOjpw
YXJzZUZvbnRGYW1pbHkoKQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYygpCiB7
Ci0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7CisgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzKG5ldyBDU1NWYWx1ZUxpc3QoKSk7CiAgICAgVmFsdWUq
IHZhbDsKICAgICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CiAgICAgYm9vbCBhbGxvd0Zvcm1h
dCA9IGZhbHNlOwogICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gICAgQ1NTRm9udEZhY2VTcmNW
YWx1ZSogcGFyc2VkVmFsdWUgPSAwOwotICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUqIHVyaVZhbHVl
ID0gMDsKKyAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gdXJpVmFsdWU7CiAgICAgd2hp
bGUgKCh2YWwgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgcGFyc2VkVmFsdWUg
PSAwOworICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gcGFyc2VkVmFsdWU7CiAg
ICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYgIWV4
cGVjdENvbW1hKSB7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZVVSTChkb21TdHJp
bmcodmFsLT5zdHJpbmcpKTsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU0ZvbnRG
YWNlU3JjVmFsdWUoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5kZXByZWNhdGVkU3RyaW5n
KCksIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSkuc3RyaW5nKCksIGZhbHNlKTsKQEAgLTI3ODEs
MTMgKzI3NDksMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAg
ICAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGFs
bG93Rm9ybWF0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBhID0gYXJncy0+
Y3VycmVudCgpOwotICAgICAgICAgICAgICAgICAgICB1cmlWYWx1ZSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIHVyaVZhbHVlLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gbmV3IENTU0ZvbnRGYWNlU3JjVmFsdWUoZG9tU3RyaW5nKGEtPnN0cmluZyksIHRydWUp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm5hbWUgPT0gImZvcm1hdCgiICYmIGFsbG93
Rm9ybWF0ICYmIHVyaVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdENvbW1hID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYWxsb3dGb3JtYXQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgdXJpVmFsdWUtPnNldEZvcm1hdChkb21TdHJpbmcoYXJncy0+Y3VycmVudCgp
LT5zdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgdXJpVmFsdWUgPSAwOworICAgICAgICAg
ICAgICAgICAgICB1cmlWYWx1ZS5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZUxp
c3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjc5NSwxMyArMjc2MywxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFj
ZVNyYygpCiAgICAgICAgIH0gZWxzZSBpZiAodmFsLT51bml0ID09IFZhbHVlOjpPcGVyYXRvciAm
JiB2YWwtPmlWYWx1ZSA9PSAnLCcgJiYgZXhwZWN0Q29tbWEpIHsKICAgICAgICAgICAgIGV4cGVj
dENvbW1hID0gZmFsc2U7CiAgICAgICAgICAgICBhbGxvd0Zvcm1hdCA9IGZhbHNlOwotICAgICAg
ICAgICAgdXJpVmFsdWUgPSAwOworICAgICAgICAgICAgdXJpVmFsdWUuY2xlYXIoKTsKICAgICAg
ICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAKICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgdmFsdWVzLT5h
cHBlbmQocGFyc2VkVmFsdWUpOworICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQocGFyc2VkVmFs
dWUucmVsZWFzZSgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmYWlsZWQgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yODEwLDEyICsyNzc4LDExIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICB9CiAgICAgCiAgICAgaWYgKHZhbHVlcy0+bGVu
Z3RoKCkgJiYgIWZhaWxlZCkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NfUFJPUF9TUkMsIHZh
bHVlcywgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTX1BST1BfU1JDLCB2YWx1
ZXMucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIGRlbGV0ZSB2YWx1ZXM7CisKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI5ODgsNyArMjk1NSw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUhTTFBhcmFtZXRlcnMoVmFsdWUqIHZhbHVlLCBkb3VibGUqIGNvbG9yQXJyYXksIGJv
b2wgcGFyc2VBCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNTU1ByaW1pdGl2ZVZhbHVlICpDU1NQ
YXJzZXI6OnBhcnNlQ29sb3IoVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFZhbHVlKiB2YWx1ZSkKIHsKICAgICBSR0JBMzIg
YyA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUodmFs
dWUgPyB2YWx1ZSA6IHZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkKQEAgLTMwNTMsOSArMzAyMCwx
MSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSogdmFsdWUsIFJH
QkEzMiYgYywgYm9vbCBzdmcpCiAvLyB3aXRob3V0IHRoZSBhbGxvd0JyZWFrIGJpdCBiZWluZyBz
ZXQsIHRoZW4gaXQgd2lsbCBjbGVhbiB1cCBhbGwgb2YgdGhlIG9iamVjdHMgYW5kIGRlc3Ryb3kg
dGhlbS4KIHN0cnVjdCBTaGFkb3dQYXJzZUNvbnRleHQgewogICAgIFNoYWRvd1BhcnNlQ29udGV4
dCgpCi0gICAgOnZhbHVlcygwKSwgeCgwKSwgeSgwKSwgYmx1cigwKSwgY29sb3IoMCksCi0gICAg
IGFsbG93WCh0cnVlKSwgYWxsb3dZKGZhbHNlKSwgYWxsb3dCbHVyKGZhbHNlKSwgYWxsb3dDb2xv
cih0cnVlKSwKLSAgICAgYWxsb3dCcmVhayh0cnVlKQorICAgIDogYWxsb3dYKHRydWUpCisgICAg
LCBhbGxvd1koZmFsc2UpCisgICAgLCBhbGxvd0JsdXIoZmFsc2UpCisgICAgLCBhbGxvd0NvbG9y
KHRydWUpCisgICAgLCBhbGxvd0JyZWFrKHRydWUpCiAgICAge30KIAogICAgIGJvb2wgYWxsb3dM
ZW5ndGgoKSB7IHJldHVybiBhbGxvd1ggfHwgYWxsb3dZIHx8IGFsbG93Qmx1cjsgfQpAQCAtMzA5
Myw3ICszMDYyLDcgQEAgc3RydWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkIGNvbW1pdENvbG9yKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWwpIHsKKyAg
ICB2b2lkIGNvbW1pdENvbG9yKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCkgewog
ICAgICAgICBjb2xvciA9IHZhbDsKICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwogICAgICAg
ICBpZiAoYWxsb3dYKQpAQCAtMzE0MSw3ICszMTEwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
U2hhZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiB2YWx1ZSB0aGF0J3Mg
b2sgaXMgYSBjb2xvciB2YWx1ZS4KLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwYXJz
ZWRDb2xvciA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
ZENvbG9yOwogICAgICAgICAgICAgYm9vbCBpc0NvbG9yID0gKHZhbC0+aWQgPj0gQ1NTX1ZBTF9B
UVVBICYmIHZhbC0+aWQgPD0gQ1NTX1ZBTF9XSU5ET1dURVhUIHx8IHZhbC0+aWQgPT0gQ1NTX1ZB
TF9NRU5VIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbC0+aWQgPj0gQ1NTX1ZB
TF9fV0VCS0lUX0ZPQ1VTX1JJTkdfQ09MT1IgJiYgdmFsLT5pZCA8PSBDU1NfVkFMX19XRUJLSVRf
VEVYVCAmJiAhc3RyaWN0KSk7CiAgICAgICAgICAgICBpZiAoaXNDb2xvcikgewpAQCAtMzE1OCw3
ICszMTI3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyB2YWx1ZSBp
cyBub3QgYSBjb2xvciBvciBsZW5ndGggYW5kIGlzIGludmFsaWQgb3IKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGl0IGlzIGEgY29sb3IsIGJ1dCBhIGNvbG9yIGlzbid0IGFsbG93
ZWQgYXQgdGhpcyBwb2ludC4KICAgICAgICAgICAgIAotICAgICAgICAgICAgY29udGV4dC5jb21t
aXRDb2xvcihwYXJzZWRDb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LmNvbW1pdENvbG9yKHBh
cnNlZENvbG9yLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVl
TGlzdC0+bmV4dCgpOwpAQCAtMzE3OSw5ICszMTQ4LDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHN0cnVjdCBCb3JkZXJJbWFnZVBh
cnNlQ29udGV4dAogewogICAgIEJvcmRlckltYWdlUGFyc2VDb250ZXh0KCkKLSAgICA6bV9hbGxv
d0JyZWFrKGZhbHNlKSwgbV9hbGxvd051bWJlcihmYWxzZSksIG1fYWxsb3dTbGFzaChmYWxzZSks
IG1fYWxsb3dXaWR0aChmYWxzZSksCi0gICAgIG1fYWxsb3dSdWxlKGZhbHNlKSwgbV9pbWFnZSgw
KSwgbV90b3AoMCksIG1fcmlnaHQoMCksIG1fYm90dG9tKDApLCBtX2xlZnQoMCksIG1fYm9yZGVy
VG9wKDApLCBtX2JvcmRlclJpZ2h0KDApLCBtX2JvcmRlckJvdHRvbSgwKSwKLSAgICAgbV9ib3Jk
ZXJMZWZ0KDApLCBtX2hvcml6b250YWxSdWxlKDApLCBtX3ZlcnRpY2FsUnVsZSgwKQorICAgIDog
bV9hbGxvd0JyZWFrKGZhbHNlKQorICAgICwgbV9hbGxvd051bWJlcihmYWxzZSkKKyAgICAsIG1f
YWxsb3dTbGFzaChmYWxzZSkKKyAgICAsIG1fYWxsb3dXaWR0aChmYWxzZSkKKyAgICAsIG1fYWxs
b3dSdWxlKGZhbHNlKQorICAgICwgbV9ib3JkZXJUb3AoMCkKKyAgICAsIG1fYm9yZGVyUmlnaHQo
MCkKKyAgICAsIG1fYm9yZGVyQm90dG9tKDApCisgICAgLCBtX2JvcmRlckxlZnQoMCkKKyAgICAs
IG1faG9yaXpvbnRhbFJ1bGUoMCkKKyAgICAsIG1fdmVydGljYWxSdWxlKDApCiAgICAge30KICAg
ICAKICAgICBib29sIGFsbG93QnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2FsbG93QnJlYWs7IH0K
QEAgLTMxOTIsOCArMzE2OSw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dAogCiAg
ICAgdm9pZCBjb21taXRJbWFnZShDU1NJbWFnZVZhbHVlKiBpbWFnZSkgeyBtX2ltYWdlID0gaW1h
Z2U7IG1fYWxsb3dOdW1iZXIgPSB0cnVlOyB9CiAgICAgdm9pZCBjb21taXROdW1iZXIoVmFsdWUq
IHYpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbCA9IG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh2LT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2LT51
bml0KTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsID0gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHYtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMp
di0+dW5pdCk7CiAgICAgICAgIGlmICghbV90b3ApCiAgICAgICAgICAgICBtX3RvcCA9IHZhbDsK
ICAgICAgICAgZWxzZSBpZiAoIW1fcmlnaHQpCkBAIC0zMjQ2LDggKzMyMjIsMTEgQEAgc3RydWN0
IEJvcmRlckltYWdlUGFyc2VDb250ZXh0CiAgICAgICAgICAgICAgbV9sZWZ0ID0gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKG1fdG9wLT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyltX3RvcC0+cHJpbWl0aXZlVHlwZSgpKTsKICAgICAgICAgICAgICAKICAgICAg
ICAgLy8gTm93IGJ1aWxkIGEgcmVjdCB2YWx1ZSB0byBob2xkIGFsbCBmb3VyIG9mIG91ciBwcmlt
aXRpdmUgdmFsdWVzLgotICAgICAgICBSZWN0KiByZWN0ID0gbmV3IFJlY3Q7Ci0gICAgICAgIHJl
Y3QtPnNldFRvcChtX3RvcCk7IHJlY3QtPnNldFJpZ2h0KG1fcmlnaHQpOyByZWN0LT5zZXRCb3R0
b20obV9ib3R0b20pOyByZWN0LT5zZXRMZWZ0KG1fbGVmdCk7CisgICAgICAgIFJlZlB0cjxSZWN0
PiByZWN0ID0gbmV3IFJlY3Q7CisgICAgICAgIHJlY3QtPnNldFRvcChtX3RvcCk7CisgICAgICAg
IHJlY3QtPnNldFJpZ2h0KG1fcmlnaHQpOworICAgICAgICByZWN0LT5zZXRCb3R0b20obV9ib3R0
b20pOworICAgICAgICByZWN0LT5zZXRMZWZ0KG1fbGVmdCk7CiAKICAgICAgICAgLy8gRmlsbCBp
biBTVFJFVENIIGFzIHRoZSBkZWZhdWx0IGlmIGl0IHdhc24ndCBzcGVjaWZpZWQuCiAgICAgICAg
IGlmICghbV9ob3Jpem9udGFsUnVsZSkKQEAgLTMyNTgsNyArMzIzNyw3IEBAIHN0cnVjdCBCb3Jk
ZXJJbWFnZVBhcnNlQ29udGV4dAogICAgICAgICAgICAgbV92ZXJ0aWNhbFJ1bGUgPSBtX2hvcml6
b250YWxSdWxlOwogCiAgICAgICAgIC8vIE1ha2Ugb3VyIG5ldyBib3JkZXIgaW1hZ2UgdmFsdWUg
bm93IGFuZCBhZGQgaXQgYXMgdGhlIHJlc3VsdC4KLSAgICAgICAgQ1NTQm9yZGVySW1hZ2VWYWx1
ZSogYm9yZGVySW1hZ2UgPSBuZXcgQ1NTQm9yZGVySW1hZ2VWYWx1ZShtX2ltYWdlLCByZWN0LCBt
X2hvcml6b250YWxSdWxlLCBtX3ZlcnRpY2FsUnVsZSk7CisgICAgICAgIENTU0JvcmRlckltYWdl
VmFsdWUqIGJvcmRlckltYWdlID0gbmV3IENTU0JvcmRlckltYWdlVmFsdWUobV9pbWFnZSwgcmVj
dC5yZWxlYXNlKCksIG1faG9yaXpvbnRhbFJ1bGUsIG1fdmVydGljYWxSdWxlKTsKICAgICAgICAg
cC0+YWRkUHJvcGVydHkocHJvcElkLCBib3JkZXJJbWFnZSwgaW1wb3J0YW50KTsKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGJvcmRlciB3aWR0
aHMuICBUaGUgYmVzdCB3YXkgdG8gZGVhbCB3aXRoIHRoZXNlIGlzIHRvIGFjdHVhbGx5IHB1dCB0
aGVzZSB2YWx1ZXMgaW50byBhIHZhbHVlCkBAIC0zNTAwLDcgKzM0NzksNyBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKICAgICByZXR1cm4gbGlzdC5y
ZWxlYXNlKCk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpbihpbnQg
cHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgQ1NTVmFsdWUqJiB2YWx1ZSwgQ1NT
VmFsdWUqJiB2YWx1ZTIpCitib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1PcmlnaW4oaW50
IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZh
bHVlLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTIpCiB7CiAgICAgcHJvcElkMSA9IHByb3BJZDsK
ICAgICBwcm9wSWQyID0gcHJvcElkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmggYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAyZTBmNGRlLi4wYTcyNjdmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaApAQCAtMTM1LDI0ICsxMzUsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIHBhcnNlNFZhbHVlcyhpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGJvb2wg
aW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpOwogCi0gICAgICAgIENTU1ZhbHVlKiBwYXJzZUJhY2tncm91bmRDb2xvcigpOwot
ICAgICAgICBib29sIHBhcnNlQmFja2dyb3VuZEltYWdlKENTU1ZhbHVlKiYpOwotICAgICAgICBD
U1NWYWx1ZSogcGFyc2VCYWNrZ3JvdW5kUG9zaXRpb25YWShib29sJiB4Rm91bmQsIGJvb2wmIHlG
b3VuZCk7Ci0gICAgICAgIHZvaWQgcGFyc2VCYWNrZ3JvdW5kUG9zaXRpb24oQ1NTVmFsdWUqJiwg
Q1NTVmFsdWUqJik7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZUJhY2tncm91bmRTaXplKCk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQmFja2dyb3VuZENvbG9yKCk7CisgICAg
ICAgIGJvb2wgcGFyc2VCYWNrZ3JvdW5kSW1hZ2UoUmVmUHRyPENTU1ZhbHVlPiYpOworICAgICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUJhY2tncm91bmRQb3NpdGlvblhZKGJvb2wmIHhG
b3VuZCwgYm9vbCYgeUZvdW5kKTsKKyAgICAgICAgdm9pZCBwYXJzZUJhY2tncm91bmRQb3NpdGlv
bihSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOworICAgICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZUJhY2tncm91bmRTaXplKCk7CiAgICAgICAgIAotICAgICAgICBi
b29sIHBhcnNlQmFja2dyb3VuZFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50
JiBwcm9wSWQyLCBDU1NWYWx1ZSomLCBDU1NWYWx1ZSomKTsKKyAgICAgICAgYm9vbCBwYXJzZUJh
Y2tncm91bmRQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwg
UmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgYm9vbCBwYXJz
ZUJhY2tncm91bmRTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgICAgIHZvaWQgYWRk
QmFja2dyb3VuZFZhbHVlKENTU1ZhbHVlKiYgbHZhbCwgQ1NTVmFsdWUqIHJ2YWwpOworICAgICAg
ICB2b2lkIGFkZEJhY2tncm91bmRWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBydmFsKTsKIAotICAgICAgICB2b2lkIGFkZFRyYW5zaXRpb25WYWx1ZShD
U1NWYWx1ZSomIGx2YWwsIENTU1ZhbHVlKiBydmFsKTsKLSAgICAgICAgQ1NTVmFsdWUqIHBhcnNl
VHJhbnNpdGlvbkR1cmF0aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVRyYW5zaXRpb25S
ZXBlYXRDb3VudCgpOwotICAgICAgICBDU1NWYWx1ZSogcGFyc2VUcmFuc2l0aW9uVGltaW5nRnVu
Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVl
PiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7CisgICAgICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgIGJv
b2wgcGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKFZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVz
dWx0KTsKLSAgICAgICAgQ1NTVmFsdWUqIHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCk7Ci0gICAg
ICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgQ1NTVmFsdWUqJik7
CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCk7
CisgICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRy
PENTU1ZhbHVlPiYpOwogICAgICAgICBib29sIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29s
IGltcG9ydGFudCk7CiAgICAgICAgIAogICAgICAgICBib29sIHBhcnNlRGFzaGJvYXJkUmVnaW9u
cyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CkBAIC0xNjAsMTQgKzE2MCwxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCk7CiAKICAgICAgICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpOwot
ICAgICAgICBDU1NWYWx1ZUxpc3QqIHBhcnNlRm9udEZhbWlseSgpOworICAgICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFtaWx5KCk7CiAKICAgICAgICAgYm9vbCBwYXJz
ZUNvdW50ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpOwog
ICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNvdW50ZXJDb250ZW50KFZhbHVlTGlz
dCogYXJncywgYm9vbCBjb3VudGVycyk7CiAKICAgICAgICAgYm9vbCBwYXJzZUNvbG9yUGFyYW1l
dGVycyhWYWx1ZSosIGludCogY29sb3JWYWx1ZXMsIGJvb2wgcGFyc2VBbHBoYSk7CiAgICAgICAg
IGJvb2wgcGFyc2VIU0xQYXJhbWV0ZXJzKFZhbHVlKiwgZG91YmxlKiBjb2xvclZhbHVlcywgYm9v
bCBwYXJzZUFscGhhKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3IoVmFs
dWUqID0gMCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29s
b3IoVmFsdWUqID0gMCk7CiAgICAgICAgIGJvb2wgcGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSos
IFJHQkEzMiYsIGJvb2wgPSBmYWxzZSk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VDb2xv
cihjb25zdCBTdHJpbmcmLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpOwpAQCAtMTc3LDkgKzE3
Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGJv
b2wgcGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgICAgIENT
U1ZhbHVlKiBwYXJzZVNWR1BhaW50KCk7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVNWR0NvbG9y
KCk7Ci0gICAgICAgIENTU1ZhbHVlKiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOworICAgICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1BhaW50KCk7CisgICAgICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlU1ZHQ29sb3IoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKICNlbmRpZgogCiAgICAgICAgIC8vIENTUzMg
UGFyc2luZyBSb3V0aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKQEAgLTE4
Nyw3ICsxODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VCb3Jk
ZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIAogICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zZm9ybSgpOwotICAgICAgICBib29sIHBhcnNl
VHJhbnNmb3JtT3JpZ2luKGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLCBD
U1NWYWx1ZSomLCBDU1NWYWx1ZSomKTsKKyAgICAgICAgYm9vbCBwYXJzZVRyYW5zZm9ybU9yaWdp
bihpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgUmVmUHRyPENTU1ZhbHVl
PiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgCiAgICAgICAgIGludCB5eXBhcnNlKCk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nz
cy9TVkdDU1NQYXJzZXIuY3BwCmluZGV4IDg2YWMwM2YuLjBhZGRjN2QgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2Vy
LmNwcApAQCAtNDcsNyArNDcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBpbnQgaWQgPSB2YWx1ZS0+aWQ7CiAKICAgICBi
b29sIHZhbGlkX3ByaW1pdGl2ZSA9IGZhbHNlOwotICAgIENTU1ZhbHVlKiBwYXJzZWRWYWx1ZSA9
IDA7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKIAogICAgIHN3aXRjaCAocHJv
cElkKSB7CiAgICAgLyogVGhlIGNvbW1lbnQgdG8gdGhlIHJpZ2h0IGRlZmluZXMgYWxsIHZhbGlk
IHZhbHVlIG9mIHRoZXNlCkBAIC0zMDMsMTcgKzMwMywxNCBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VTVkdWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gbmV3IENTU1F1aXJrUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpOwogICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9
Ci0gICAgaWYgKHBhcnNlZFZhbHVlKSB7Ci0gICAgICAgIGlmICghdmFsdWVMaXN0LT5jdXJyZW50
KCkgfHwgaW5TaG9ydGhhbmQoKSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBw
YXJzZWRWYWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGRlbGV0ZSBwYXJzZWRWYWx1ZTsKKyAgICBpZiAocGFyc2VkVmFsdWUgJiYg
KCF2YWx1ZUxpc3QtPmN1cnJlbnQoKSB8fCBpblNob3J0aGFuZCgpKSkgeworICAgICAgICBhZGRQ
cm9wZXJ0eShwcm9wSWQsIHBhcnNlZFZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ1NTVmFsdWUq
IENTU1BhcnNlcjo6cGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKQorUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpCiB7CiAgICAgQ1NTVmFsdWVM
aXN0KiByZXQgPSBuZXcgQ1NTVmFsdWVMaXN0OwogICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlz
dC0+Y3VycmVudCgpOwpAQCAtMzM4LDcgKzMzNSw3IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBh
cnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKICAgICByZXR1cm4gcmV0OwogfQogCi1DU1NWYWx1ZSog
Q1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VTVkdQYWludCgpCiB7CiAgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiAgICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgpLCBjLCB0
cnVlKSkKQEAgLTM0Niw3ICszNDMsNyBAQCBDU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZVNWR1Bh
aW50KCkKICAgICByZXR1cm4gbmV3IFNWR1BhaW50KENvbG9yKGMpKTsKIH0KIAotQ1NTVmFsdWUq
IENTU1BhcnNlcjo6cGFyc2VTVkdDb2xvcigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlU1ZHQ29sb3IoKQogewogICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50
OwogICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYywg
dHJ1ZSkpCg==
</data>
<flag name="review"
          id="8211"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>