<?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>115526</bug_id>
          
          <creation_ts>2013-05-02 14:26:05 -0700</creation_ts>
          <short_desc>Shadow DOM removal: Make SelectorChecker non-generic</short_desc>
          <delta_ts>2013-05-02 15:13:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>883913</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-02 14:26:05 -0700</bug_when>
    <thetext>Core SelectorChecker methods are currently templated to support distributed shadow trees. Without shadow DOM distribution support this is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883919</commentid>
    <comment_count>1</comment_count>
      <attachid>200335</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-02 14:37:51 -0700</bug_when>
    <thetext>Created attachment 200335
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883922</commentid>
    <comment_count>2</comment_count>
      <attachid>200335</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-02 14:44:51 -0700</bug_when>
    <thetext>Comment on attachment 200335
patch

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

r=me

&gt; Source/WebCore/css/SelectorChecker.cpp:65
&gt; +static inline bool isFirstChildElement(Element* element)

I&apos;d make this take a const Element*.

&gt; Source/WebCore/css/SelectorChecker.cpp:70
&gt; +static inline bool isLastChildElement(Element* element)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:75
&gt; +static inline bool isFirstOfType(Element* element, const QualifiedName&amp; type)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:84
&gt; +static inline bool isLastOfType(Element* element, const QualifiedName&amp; type)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:93
&gt; +static inline int countElementsBefore(Element* element)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:107
&gt; +static inline int countElementsOfTypeBefore(Element* element, const QualifiedName&amp; type)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:117
&gt; +static inline int countElementsAfter(Element* element)

Ditto.

&gt; Source/WebCore/css/SelectorChecker.cpp:125
&gt; +static inline int countElementsOfTypeAfter(Element* element, const QualifiedName&amp; type)

Ditto.

&gt; Source/WebCore/css/SiblingTraversalStrategies.h:1
&gt; +// Remove this file.

wat</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883932</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-02 15:13:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/149498</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200335</attachid>
            <date>2013-05-02 14:37:51 -0700</date>
            <delta_ts>2013-05-02 14:44:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selector-checker-no-shadow-2.patch</filename>
            <type>text/plain</type>
            <size>31293</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEzLTA1LTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFkb3cgRE9NIHJlbW92YWw6
IE1ha2UgU2VsZWN0b3JDaGVja2VyIG5vbi1nZW5lcmljCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU1MjYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRob3V0IFNoYWRvdyBET00gZGlzdHJpYnV0aW9u
IHdlIGRvbid0IG5lZWQgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMgYW55bW9yZS4KKworICAg
ICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorICAgICAgICAqIGNzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc0Zp
cnN0Q2hpbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzTGFzdENoaWxkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
TGFzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y291bnRFbGVtZW50c0FmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVu
dHNPZlR5cGVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFNlbGVjdG9yQ2hlY2tlcik6Cisg
ICAgICAgICogY3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmg6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrUmVnaW9uU2VsZWN0b3Ip
OgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9zaGFkb3cv
Q29udGVudFNlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVj
dG9yRGF0YUxpc3Q6OmNoZWNrQ29udGVudFNlbGVjdG9yKToKKwogMjAxMy0wNS0wMiAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IFdlYkNv
cmVPYmpDRXh0cmFzIGJ5IHVzaW5nIFdURjo6YmluZApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxNDk0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmgiCi0jaW5jbHVkZSAi
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0
LmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogCkBAIC00MDEsNyArNDAwLDcgQEAgaW5s
aW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYQogICAgIGNvbnRleHQuc2Nyb2xs
YmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFyOwogICAgIGNvbnRleHQuc2Nyb2xs
YmFyUGFydCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7CiAgICAgY29udGV4
dC5iZWhhdmlvckF0Qm91bmRhcnkgPSBtX2JlaGF2aW9yQXRCb3VuZGFyeTsKLSAgICBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIGR5
bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIGR5
bmFtaWNQc2V1ZG8pOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX3BzZXVkb1N0eWxlUmVx
dWVzdC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9J
ZCAhPSBkeW5hbWljUHNldWRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAJKHJldmlzaW9uIDE0OTQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIgogI2lu
Y2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKQEAgLTYyLDYgKzYx
LDc2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CisgICAgCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQoreworICAgIHJldHVybiAhZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNMYXN0Q2hpbGRFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgcmV0dXJuICFlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3sKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcg
PSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxp
bmctPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNMYXN0T2ZUeXBlKEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgZm9yIChj
b25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAgICAg
ICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvdW50
RWxlbWVudHNCZWZvcmUoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpbnQgY291bnQgPSAwOwor
ICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5kZXgo
KTsKKyAgICAgICAgaWYgKGluZGV4KSB7CisgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAg
IHJldHVybiBjb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlw
ZUJlZm9yZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQorewor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxl
bWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGlu
Zy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNU
YWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNv
dW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCog
c2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5n
ID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCisgICAgICAgICsrY291bnQ7CisgICAg
cmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBl
QWZ0ZXIoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3sKKyAg
ICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1l
bnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4
dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlw
ZSkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CiAK
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwgTW9k
ZSBtb2RlKQogICAgIDogbV9zdHJpY3RQYXJzaW5nKCFkb2N1bWVudC0+aW5RdWlya3NNb2RlKCkp
CkBAIC03NiwxMSArMTQ1LDEwIEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERv
Y3VtZW4KIC8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBz
ZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5n
IG9yIGFuY2VzdG9yIG9mIGUKLXRlbXBsYXRlPHR5cGVuYW1lIFNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneT4KLVNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25z
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1
ZG8sIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYgc2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNo
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbykgY29uc3QKIHsKICAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAg
ICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSkpCisgICAg
aWYgKCFjaGVja09uZShjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnQpIHsKQEAgLTE0Niw3ICsyMTQsNyBAQCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoIFNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3Ig
PSBmYWxzZTsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKICAgICAgICAg
Zm9yICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0LmVsZW1lbnQgPSBuZXh0Q29u
dGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNo
ID0gdGhpcy0+bWF0Y2gobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSk7CisgICAgICAgICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNo
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIGlmIChtYXRj
aCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICAgICAgaWYgKG5leHRDb250
ZXh0LmVsZW1lbnQgPT0gbmV4dENvbnRleHQuc2NvcGUgJiYgbmV4dENvbnRleHQuYmVoYXZpb3JB
dEJvdW5kYXJ5ICE9IFN0YXlzV2l0aGluVHJlZVNjb3BlKQpAQCAtMTYwLDcgKzIyOCw3IEBAIFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjoKICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxl
Y3RvciA9IGZhbHNlOwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAg
ICAgICByZXR1cm4gbWF0Y2gobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVneSk7CisgICAgICAgIHJldHVybiBtYXRjaChuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewpAQCAtMTcyLDcg
KzI0MCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjoKICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CiAgICAgICAgIG5leHRDb250
ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0
eWxlID0gMDsKLSAgICAgICAgcmV0dXJuIG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWlj
UHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpOworICAgICAgICByZXR1cm4gbWF0Y2go
bmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6SW5kaXJlY3RBZGphY2VudDoKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHls
ZSkgewpAQCAtMTgzLDcgKzI1MSw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjoKICAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwogICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwogICAgICAgICBmb3IgKDsgbmV4dENv
bnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQt
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0
aGlzLT5tYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5KTsKKyAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2gobmV4
dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgaWYgKG1hdGNoID09
IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwg
bWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOwogICAgICAgICB9OwpAQCAtMjAwLDcgKzI2OCw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjoKICAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFz
U2Nyb2xsYmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHk7CiAgICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gbWF0Y2gobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneSk7CisgICAgICAgIHJldHVybiBtYXRjaChuZXh0Q29udGV4dCwgZHluYW1p
Y1BzZXVkbyk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgogICAg
ICAgICB7CkBAIC0yMTMsNyArMjgxLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3Rv
ckNoZWNrZXI6OgogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3RO
b2RlOwogICAgICAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwogICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgIHJldHVy
biBtYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5KTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaChuZXh0Q29udGV4dCwgaWdub3Jl
RHluYW1pY1BzZXVkbyk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEaXN0cmlidXRlZDoKQEAgLTIyNiw3ICsyOTQsNyBAQCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBpbnNlcnRpb25Qb2ludHNbaV07CiAgICAgICAgICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ3kpID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1h
dGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JNYXRjaGVzOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMxOCw4ICszODYsNyBAQCBzdGF0
aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKEVsZW1lbnQqCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k+Ci1ib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYgc2libGluZ1RyYXZlcnNhbFN0
cmF0ZWd5KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0
ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY29u
c3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CkBAIC0zNjYsNyArNDMzLDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbAogICAgICAgICAgICAgICAgIC8v
IFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBk
b24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4KICAgICAgICAgICAgICAg
ICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9WaXNpdGVkIHx8IChzdWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09IFZp
c2l0ZWRNYXRjaEVuYWJsZWQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YkNvbnRleHQsIERPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YkNvbnRleHQp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChjb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbykgewpAQCAtNDExLDcgKzQ3
OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWwKICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGZpcnN0
LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAogICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneS5pc0ZpcnN0Q2hpbGQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CkBAIC00MjQsNyAr
NDkxLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbAogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZp
cnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneS5pc0ZpcnN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNGaXJzdE9mVHlwZShlbGVtZW50LCBlbGVtZW50LT50
YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxl
KQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTQzMyw3ICs1MDAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgU2VsCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDoKICAgICAg
ICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVs
ZW1lbnQKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRF
bGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgc2libGluZ1RyYXZlcnNhbFN0
cmF0ZWd5LmlzTGFzdENoaWxkKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIGlzTGFzdENo
aWxkRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29s
dmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxl
ID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CkBAIC00NTAsMTMgKzUxNywxMyBAQCBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsCiAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5LmlzTGFzdE9mVHlw
ZShlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09u
bHlDaGlsZDoKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0g
c2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5LmlzRmlyc3RDaGlsZChlbGVtZW50KTsKLSAgICAgICAg
ICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5pc0xh
c3RDaGlsZChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBpc0Zp
cnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxk
ID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CkBAIC00Nzgs
MTQgKzU0NSwxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5pc0Zp
cnN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpICYmIHNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneS5pc0xhc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFn
UU5hbWUoKSkgJiYgaXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb050aENoaWxkOgogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMSArIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5jb3VudEVsZW1lbnRzQmVm
b3JlKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBjb3VudEVsZW1l
bnRzQmVmb3JlKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2
aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUg
PSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+
cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRJbmRl
eChjb3VudCk7CkBAIC01MDIsNyArNTY5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lKGNvbnN0IFNlbAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNv
dW50ID0gMSArIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5jb3VudEVsZW1lbnRzT2ZUeXBlQmVm
b3JlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworICAgICAgICAgICAgICAgIGludCBj
b3VudCA9IDEgKyBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUp
CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKIApAQCAtNTE4LDcgKzU4NSw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWwKICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGludCBjb3VudCA9IDEgKyBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kuY291bnRFbGVt
ZW50c0FmdGVyKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBjb3Vu
dEVsZW1lbnRzQWZ0ZXIoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5t
YXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQpAQCAtNTMyLDcgKzU5OSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBTZWwKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNo
ZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
eS5jb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7
CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVBZnRl
cihlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoc2Vs
ZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CkBAIC01NDcsNyArNjE0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IFNlbAogICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaXNTdWJTZWxl
Y3RvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVk
byA9IE5PUFNFVURPOwogICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9
IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsg
c3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNl
bGVjdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2goc3ViQ29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1h
dGNoZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaChzdWJDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC03NTUs
NyArODIyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbAogICAg
ICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKICAg
ICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgp
LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2goc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBpZiAobWF0Y2goc3Vi
Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTkwMywxMCArOTcwLDQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1Bz
ZXVkbwogICAgIHJldHVybiBlbGVtZW50LT5mb2N1c2VkKCkgJiYgaXNGcmFtZUZvY3VzZWQoZWxl
bWVudCk7CiB9CiAKLXRlbXBsYXRlCi1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNv
bnN0IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwotCi10ZW1wbGF0ZQotU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBjb25zdCBTaGFkb3dET01TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3kmKSBjb25zdDsKLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaAkocmV2aXNpb24gMTQ5NDk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIEJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnk7CiAgICAgfTsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneT4KLSAgICBNYXRjaCBt
YXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgY29uc3QgU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5PgotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmLCBjb25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmKSBjb25zdDsK
KyAgICBNYXRjaCBtYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lk
JikgY29uc3Q7CisgICAgYm9vbCBjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYpIGNvbnN0OwogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpY3RQYXJzaW5nOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxNDk0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwy
NzMgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKLSAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAo
a2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBT
aGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llc19oCi0j
ZGVmaW5lIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzX2gKLQotI2luY2x1ZGUgIkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IERPTVNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneSB7Ci0gICAgYm9vbCBpc0ZpcnN0Q2hpbGQoRWxlbWVudCopIGNvbnN0OwotICAgIGJv
b2wgaXNMYXN0Q2hpbGQoRWxlbWVudCopIGNvbnN0OwotICAgIGJvb2wgaXNGaXJzdE9mVHlwZShF
bGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIGJvb2wgaXNMYXN0T2ZU
eXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0KLSAgICBpbnQgY291
bnRFbGVtZW50c0JlZm9yZShFbGVtZW50KikgY29uc3Q7Ci0gICAgaW50IGNvdW50RWxlbWVudHNB
ZnRlcihFbGVtZW50KikgY29uc3Q7Ci0gICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUo
RWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBpbnQgY291bnRFbGVt
ZW50c09mVHlwZUFmdGVyKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci19
OwotCi1pbmxpbmUgYm9vbCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RDaGls
ZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIHJldHVybiAhZWxlbWVudC0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOwotfQotCi1pbmxpbmUgYm9vbCBET01TaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ3k6OmlzTGFzdENoaWxkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKLX0KLQotaW5saW5lIGJvb2wgRE9N
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Ci17Ci0gICAgZm9yIChjb25zdCBFbGVt
ZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5n
OyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgRE9NU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNU
YWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGludCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNv
dW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpbnQgY291
bnQgPSAwOwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNo
aWxkSW5kZXgoKTsKLSAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAgICBjb3VudCArPSBp
bmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50Kys7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1pbmxpbmUgaW50IERPTVNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAotewotICAgIGludCBjb3VudCA9IDA7
Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQotICAg
ICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLWlubGlu
ZSBpbnQgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQWZ0ZXIoRWxl
bWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCi0gICAgICAgICsr
Y291bnQ7Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLWlubGluZSBpbnQgRE9NU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKLXsKLSAgICBpbnQgY291bnQgPSAw
OwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAg
ICArK2NvdW50OwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3RydWN0IFNoYWRv
d0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gICAgU2hhZG93RE9NU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5KGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBu
dGgpCi0gICAgICAgIDogbV9zaWJsaW5ncyhzaWJsaW5ncykKLSAgICAgICAgLCBtX250aChudGgp
Ci0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNGaXJzdENoaWxkKEVsZW1lbnQqKSBjb25zdDsK
LSAgICBib29sIGlzTGFzdENoaWxkKEVsZW1lbnQqKSBjb25zdDsKLSAgICBib29sIGlzRmlyc3RP
ZlR5cGUoRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBib29sIGlz
TGFzdE9mVHlwZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotCi0gICAg
aW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCopIGNvbnN0OwotICAgIGludCBjb3VudEVs
ZW1lbnRzQWZ0ZXIoRWxlbWVudCopIGNvbnN0OwotICAgIGludCBjb3VudEVsZW1lbnRzT2ZUeXBl
QmVmb3JlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0gICAgaW50IGNv
dW50RWxlbWVudHNPZlR5cGVBZnRlcihFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3NpYmxpbmdzOwot
ICAgIGludCBtX250aDsKLX07Ci0KLWlubGluZSBib29sIFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneTo6aXNGaXJzdENoaWxkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAg
VU5VU0VEX1BBUkFNKGVsZW1lbnQpOwotICAgIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOwotICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxl
bWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKLQotICAgIGZvciAoaW50IGkgPSBtX250aCAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tp
XS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBTaGFkb3dET01TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3k6OmlzTGFzdENoaWxkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAg
VU5VU0VEX1BBUkFNKGVsZW1lbnQpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
JiBzaWJsaW5ncyA9IG1fc2libGluZ3M7Ci0gICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50
KHNpYmxpbmdzW21fbnRoXS5nZXQoKSkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsg
MTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nc1tpXSAm
JiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBTaGFkb3dET01T
aWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKLXsKLSAgICBVTlVTRURfUEFSQU0oZWxl
bWVudCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gbV9z
aWJsaW5nczsKLSAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbbV9udGhd
LmdldCgpKSk7Ci0KLSAgICBmb3IgKGludCBpID0gbV9udGggLSAxOyBpID49IDA7IC0taSkgewot
ICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAm
JiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgU2hhZG93RE9N
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKLXsKLSAgICBVTlVTRURfUEFSQU0oZWxl
bWVudCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gbV9z
aWJsaW5nczsKLSAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbbV9udGhd
LmdldCgpKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gbV9udGggKyAxOyBpIDwgc2libGluZ3Mu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5p
c0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGlu
ZSBpbnQgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQmVm
b3JlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQp
OwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGlu
Z3M7Ci0gICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQo
KSkpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGludCBpID0gbV9udGggLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGNvdW50OwotfQotCi1pbmxpbmUgaW50IFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
eTo6Y291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgVU5V
U0VEX1BBUkFNKGVsZW1lbnQpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBz
aWJsaW5ncyA9IG1fc2libGluZ3M7Ci0gICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNp
YmxpbmdzW21fbnRoXS5nZXQoKSkpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKHNp
emVfdCBpID0gbV9udGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gKytjb3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLWlu
bGluZSBpbnQgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRz
T2ZUeXBlQmVmb3JlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUp
IGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGluZ3M7Ci0gICAgQVNTRVJUKGVsZW1l
bnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQoKSkpOwotCi0gICAgaW50IGNvdW50
ID0gMDsKLSAgICBmb3IgKGludCBpID0gbV9udGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
ICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJs
aW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1pbmxpbmUgaW50IFNoYWRvd0RPTVNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVs
ZW1lbnQpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1f
c2libGluZ3M7Ci0gICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRo
XS5nZXQoKSkpOwotCi0gICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gbV9u
dGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpYmxpbmdz
W2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1Rh
Z05hbWUodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gKytjb3VudDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY291bnQ7Ci19Ci0KLX0KLQotI2VuZGlmCisvLyBSZW1vdmUgdGhpcyBmaWxlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxNDk0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNr
ZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgotI2luY2x1ZGUgIlNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5j
bHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJlc29s
dmVyLmgiCkBAIC02NzEsNyArNjcwLDcgQEAgaW5saW5lIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rv
cihjb25zdCBDUwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3Rv
cjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkgewogICAgICAgICBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMs
IHJlZ2lvbkVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOwog
ICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAg
IGlmIChzZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5t
YXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NlbGVj
dG9yUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1
ZXJ5LmNwcAkocmV2aXNpb24gMTQ5NDk2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3Rv
ckNoZWNrZXJGYXN0UGF0aC5oIgotI2luY2x1ZGUgIlNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVz
LmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50
LmgiCiAKQEAgLTY0LDcgKzYzLDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6c2Vs
ZWN0b3JNYQogICAgIHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LmJlaGF2aW9yQXRCb3VuZGFyeSA9
IFNlbGVjdG9yQ2hlY2tlcjo6U3RheXNXaXRoaW5UcmVlU2NvcGU7CiAgICAgc2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQuc2NvcGUgPSAhcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgJiYgcm9vdE5v
ZGUtPmlzQ29udGFpbmVyTm9kZSgpID8gdG9Db250YWluZXJOb2RlKHJvb3ROb2RlKSA6IDA7CiAg
ICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVybiBz
ZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKSA9PSBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yTWF0Y2hlczsKIH0KIAogYm9vbCBTZWxlY3RvckRhdGFMaXN0OjptYXRj
aGVzKEVsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAx
NDk0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJJbnNlcnRp
b25Qb2ludC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKLSNpbmNsdWRlICJTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDkgKzM5LDggQEAgYm9vbCBDb250ZW50U2VsZWN0b3JE
YXRhTGlzdDo6Y2hlY2tDb250ZQogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoc2li
bGluZ3NbbnRoXS5nZXQoKSk7CiAgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihl
bGVtZW50LT5kb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAg
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHNlbGVj
dG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAg
IFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneShzaWJsaW5ncywgbnRo
KTsKICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0
dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBz
dHJhdGVneSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXM7CisgICAgcmV0dXJu
IHNlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlczsKIH0KIAogdm9pZCBDb250ZW50U2VsZWN0
b3JEYXRhTGlzdDo6aW5pdGlhbGl6ZShjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykK
</data>
<flag name="review"
          id="221805"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>