<?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>55573</bug_id>
          
          <creation_ts>2011-03-02 05:42:06 -0800</creation_ts>
          <short_desc>Selector usage flags should not be set by the CSS parser</short_desc>
          <delta_ts>2011-03-02 11:09:11 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>360751</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-03-02 05:42:06 -0800</bug_when>
    <thetext>Currently flags like Document::usesSiblingRules() are set directly by the CSS parser. This is wrong as we may parse stylesheets that are not actually used for document rendering. This is especially bad when the page uses querySelectorAll(). As a result we may end up in various performance penalty boxes triggered by complex selectors for no good reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360755</commentid>
    <comment_count>1</comment_count>
      <attachid>84410</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-03-02 05:56:36 -0800</bug_when>
    <thetext>Created attachment 84410
move figuring out the selector flags to CSSStyleSelector

- Use the selector traversal in style selector constructor to figure out which flags actually are needed for the currently active style sheets.
- Remove the flag related code from the CSS parser/grammar.
- Remove the usesDescendantRules flag completely. We have descendant rules in the default style sheet, so every document uses them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360859</commentid>
    <comment_count>2</comment_count>
      <attachid>84410</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-02 09:48:36 -0800</bug_when>
    <thetext>Comment on attachment 84410
move figuring out the selector flags to CSSStyleSelector

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360924</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-03-02 11:09:11 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80150</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84410</attachid>
            <date>2011-03-02 05:56:36 -0800</date>
            <delta_ts>2011-03-02 09:48:36 -0800</delta_ts>
            <desc>move figuring out the selector flags to CSSStyleSelector</desc>
            <filename>css-collect-features-3.patch</filename>
            <type>text/plain</type>
            <size>25736</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTE4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDMtMDIgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNlbGVjdG9yIHVzYWdlIGZsYWdzIHNob3VsZCBub3QgYmUgc2V0
IGJ5IHRoZSBDU1MgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NTU3MworICAgICAgICAKKyAgICAgICAgQ3VycmVudGx5IGZsYWdzIGxpa2Ug
RG9jdW1lbnQ6OnVzZXNTaWJsaW5nUnVsZXMoKSBhcmUgc2V0IGRpcmVjdGx5IGJ5IHRoZSBDU1Mg
cGFyc2VyLiBUaGlzIGlzIHdyb25nIGFzIAorICAgICAgICB3ZSBtYXkgcGFyc2Ugc3R5bGVzaGVl
dHMgdGhhdCBhcmUgbm90IGFjdHVhbGx5IHVzZWQgZm9yIGRvY3VtZW50IHJlbmRlcmluZy4gVGhp
cyBpcyBlc3BlY2lhbGx5IGJhZCB3aGVuCisgICAgICAgIHRoZSBwYWdlIHVzZXMgcXVlcnlTZWxl
Y3RvckFsbCgpLiBBcyBhIHJlc3VsdCB3ZSBtYXkgZW5kIHVwIGluIHZhcmlvdXMgcGVyZm9ybWFu
Y2UgcGVuYWx0eSBib3hlcyAKKyAgICAgICAgdHJpZ2dlcmVkIGJ5IGNvbXBsZXggc2VsZWN0b3Jz
IGZvciBubyBnb29kIHJlYXNvbi4KKyAgICAgICAgCisgICAgICAgIC0gVXNlIHRoZSBzZWxlY3Rv
ciB0cmF2ZXJzYWwgaW4gc3R5bGUgc2VsZWN0b3IgY29uc3RydWN0b3IgdG8gZmlndXJlIG91dCB3
aGljaCBmbGFncworICAgICAgICAgIGFjdHVhbGx5IGFyZSBuZWVkZWQgZm9yIHRoZSBjdXJyZW50
bHkgYWN0aXZlIHN0eWxlIHNoZWV0cy4KKyAgICAgICAgLSBSZW1vdmUgdGhlIGZsYWcgcmVsYXRl
ZCBjb2RlIGZyb20gdGhlIENTUyBwYXJzZXIvZ3JhbW1hci4KKyAgICAgICAgLSBSZW1vdmUgdGhl
IHVzZXNEZXNjZW5kYW50UnVsZXMgZmxhZyBjb21wbGV0ZWx5LiBXZSBoYXZlIGRlc2NlbmRhbnQg
cnVsZXMgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICBzdHlsZSBzaGVldCwgc28gZXZlcnkgZG9j
dW1lbnQgdXNlcyB0aGVtLgorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
KiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRl
U3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdFNpYmxpbmdSdWxlc0luRGVmYXVsdFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OkZlYXR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjp+RmVh
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2lu
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaGVzU2libGlu
Z1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2Nh
dGVTaGFyZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RmVhdHVyZXNGcm9tU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJvbUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
dXNlc1NpYmxpbmdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjp1
c2VzRmlyc3RMaW5lUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
dXNlc0JlZm9yZUFmdGVyUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6dXNlc0xpbmtSdWxlcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZVN0eWxl
U2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVzZXNTaWJsaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnNldFVzZXNTaWJsaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVzZXNG
aXJzdExpbmVSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXNlc0JlZm9yZUFm
dGVyUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFVzZXNCZWZvcmVBZnRl
clJ1bGVzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpyZWNhbGNTdHlsZSk6CisKIDIwMTEtMDMtMDIgIE9sZWcgUm9tYXNoaW4gIDxyb21h
eGFAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJKHJldmlzaW9uIDgwMTA1KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtODU3LDggKzg1Nyw2IEBAIHNl
bGVjdG9yOgogICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOwogICAgICAg
ICAgICAgZW5kLT5zZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCk7CiAgICAgICAg
ICAgICBlbmQtPnNldFRhZ0hpc3RvcnkocC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDEpKTsKLSAg
ICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gcC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICBkb2MtPnNldFVzZXNEZXNjZW5kYW50UnVsZXModHJ1ZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgfCBzZWxlY3RvciBjb21iaW5hdG9yIHNpbXBsZV9zZWxlY3RvciB7CkBAIC04NzIsMTMg
Kzg3MCw2IEBAIHNlbGVjdG9yOgogICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9y
eSgpOwogICAgICAgICAgICAgZW5kLT5zZXRSZWxhdGlvbigkMik7CiAgICAgICAgICAgICBlbmQt
PnNldFRhZ0hpc3RvcnkocC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDEpKTsKLSAgICAgICAgICAg
IGlmICgkMiA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQpIHsKLSAgICAgICAgICAgICAgICBpZiAoRG9j
dW1lbnQqIGRvYyA9IHAtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGRvYy0+c2V0
VXNlc0Rlc2NlbmRhbnRSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoJDIgPT0g
Q1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50IHx8ICQyID09IENTU1NlbGVjdG9yOjpJbmRpcmVj
dEFkamFjZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBwLT5kb2N1
bWVudCgpKQotICAgICAgICAgICAgICAgICAgICBkb2MtPnNldFVzZXNTaWJsaW5nUnVsZXModHJ1
ZSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBzZWxlY3RvciBlcnJv
ciB7CkBAIC0xMTAyLDQ4ICsxMDkzLDE0IEBAIHBzZXVkbzoKICAgICAgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7CiAgICAgICAgIGlmICh0eXBlID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3duKQogICAgICAgICAgICAgJCQgPSAwOwotICAgICAg
ICBlbHNlIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eSB8fAotICAgICAgICAg
ICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkIHx8Ci0gICAgICAg
ICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlIHx8Ci0gICAg
ICAgICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZCB8fAotICAg
ICAgICAgICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0T2ZUeXBlIHx8Ci0g
ICAgICAgICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZCB8fAot
ICAgICAgICAgICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5T2ZUeXBlKSB7
Ci0gICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpOwotICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHAtPmRvY3VtZW50KCk7Ci0gICAgICAg
ICAgICBpZiAoZG9jKQotICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc1NpYmxpbmdSdWxlcyh0
cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJz
dExpbmUpIHsKLSAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlcik7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IHAtPmRvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgZG9jLT5zZXRVc2VzRmlyc3RMaW5lUnVsZXModHJ1ZSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQmVmb3JlIHx8Ci0g
ICAgICAgICAgICAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWZ0ZXIpIHsKLSAg
ICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7
Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IHAtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICAgICAgZG9jLT5zZXRVc2VzQmVmb3JlQWZ0ZXJSdWxlcyh0cnVlKTsKLSAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rIHx8IHR5cGUgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpIHsKLSAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRv
YyA9IHAtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jLT5zZXRVc2VzTGlua1J1bGVz
KHRydWUpOwotICAgICAgICB9CiAgICAgfQogICAgIHwgJzonICc6JyBJREVOVCB7CiAgICAgICAg
ICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlRmxvYXRpbmdTZWxl
Y3RvcigpOwogICAgICAgICAkJC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQp
OwogICAgICAgICAkMy5sb3dlcigpOwogICAgICAgICAkJC0+c2V0VmFsdWUoJDMpOwotICAgICAg
ICBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSB0eXBlID0gJCQtPnBzZXVkb1R5cGUoKTsKLSAgICAg
ICAgaWYgKHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZSkgewotICAgICAgICAg
ICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAg
ICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gcC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBkb2MtPnNldFVzZXNGaXJzdExpbmVSdWxlcyh0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmICh0
eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9CZWZvcmUgfHwKLSAgICAgICAgICAgICAgICAgICB0
eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9BZnRlcikgewotICAgICAgICAgICAgQ1NTUGFyc2Vy
KiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgICAgIGlmIChE
b2N1bWVudCogZG9jID0gcC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2MtPnNldFVz
ZXNCZWZvcmVBZnRlclJ1bGVzKHRydWUpOwotICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGNhbGwgaXMgbmVlZGVkIHRvIGZvcmNlIHNlbGVjdG9yIHRvIGNvbXB1dGUgdGhlIHBzZXVk
b1R5cGUgZWFybHkgZW5vdWdoLgorICAgICAgICAkJC0+cHNldWRvVHlwZSgpOwogICAgIH0KICAg
ICAvLyB1c2VkIGJ5IDpudGgtKihheCtiKQogICAgIHwgJzonIEZVTkNUSU9OIG1heWJlX3NwYWNl
IE5USCBtYXliZV9zcGFjZSAnKScgewpAQCAtMTE1NSwxMyArMTExMiw2IEBAIHBzZXVkbzoKICAg
ICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7CiAg
ICAgICAgIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3duKQogICAgICAgICAg
ICAgJCQgPSAwOwotICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9O
dGhDaGlsZCB8fAotICAgICAgICAgICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9O
dGhPZlR5cGUgfHwKLSAgICAgICAgICAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
TnRoTGFzdENoaWxkIHx8Ci0gICAgICAgICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb050aExhc3RPZlR5cGUpIHsKLSAgICAgICAgICAgIGlmIChwLT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgICAgIHAtPmRvY3VtZW50KCktPnNldFVzZXNTaWJsaW5nUnVsZXModHJ1ZSk7Ci0g
ICAgICAgIH0KICAgICB9CiAgICAgLy8gdXNlZCBieSA6bnRoLSoKICAgICB8ICc6JyBGVU5DVElP
TiBtYXliZV9zcGFjZSBtYXliZV91bmFyeV9vcGVyYXRvciBJTlRFR0VSIG1heWJlX3NwYWNlICcp
JyB7CkBAIC0xMTczLDEzICsxMTIzLDYgQEAgcHNldWRvOgogICAgICAgICBDU1NTZWxlY3Rvcjo6
UHNldWRvVHlwZSB0eXBlID0gJCQtPnBzZXVkb1R5cGUoKTsKICAgICAgICAgaWYgKHR5cGUgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd24pCiAgICAgICAgICAgICAkJCA9IDA7Ci0gICAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb050aENoaWxkIHx8Ci0gICAgICAg
ICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZSB8fAotICAgICAg
ICAgICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQgfHwKLSAg
ICAgICAgICAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdE9mVHlwZSkg
ewotICAgICAgICAgICAgaWYgKHAtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgcC0+ZG9j
dW1lbnQoKS0+c2V0VXNlc1NpYmxpbmdSdWxlcyh0cnVlKTsKLSAgICAgICAgfQogICAgIH0KICAg
ICAvLyB1c2VkIGJ5IDpudGgtKihvZGQvZXZlbikgYW5kIDpsYW5nCiAgICAgfCAnOicgRlVOQ1RJ
T04gbWF5YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgJyknIHsKQEAgLTExOTYsMTAgKzExMzks
NyBAQCBwc2V1ZG86CiAgICAgICAgICAgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b050aE9mVHlwZSB8fAogICAgICAgICAgICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9OdGhMYXN0Q2hpbGQgfHwKICAgICAgICAgICAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvTnRoTGFzdE9mVHlwZSkgewotICAgICAgICAgICAgaWYgKGlzVmFsaWROdGhUb2tlbigk
NCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcC0+ZG9jdW1lbnQoKS0+c2V0VXNlc1NpYmxpbmdSdWxlcyh0cnVlKTsKLSAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgaWYgKCFpc1ZhbGlkTnRoVG9rZW4oJDQpKQogICAgICAg
ICAgICAgICAgICQkID0gMDsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCShyZXZpc2lvbiA4MDEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTQ4LDkgKzU5NDgsNiBAQCB2b2lkIENTU1BhcnNl
cjo6dXBkYXRlU3BlY2lmaWVyc1dpdGhFbGVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCkpCi0gICAgICAgIGRvYy0+c2V0VXNlc0Rl
c2NlbmRhbnRSdWxlcyh0cnVlKTsKLQogICAgIHNwZWNpZmllcnMtPnNldFJlbGF0aW9uKENTU1Nl
bGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50KTsKICAgICBpZiAoQ1NTUGFyc2VyU2VsZWN0b3IqIGhp
c3RvcnkgPSBzcGVjaWZpZXJzLT50YWdIaXN0b3J5KCkpIHsKICAgICAgICAgaGlzdG9yeS0+c2V0
VGFnKHRhZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShy
ZXZpc2lvbiA4MDEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDggKzQwMiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwogICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1f
YXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9Ci0gICAgCi0gICAgdm9pZCBjb2xsZWN0
SWRzQW5kU2libGluZ1J1bGVzKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZHMsIE93blB0
cjxSdWxlU2V0PiYgc2libGluZ1J1bGVzKSBjb25zdDsKKworICAgIHZvaWQgY29sbGVjdEZlYXR1
cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJikgY29uc3Q7CiAgICAgCiAgICAgY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0
IHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIGdldENsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBt
X2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KQEAgLTQ0OCwxMiArNDQ4LDExIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBlbGVtZW50Q2FuVXNlU2ltcGxlRGUKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbGxl
Y3RTaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpCiB7Ci0gICAgT3duUHRyPFJ1bGVTZXQ+IHNp
YmxpbmdSdWxlczsKLSAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHM7Ci0gICAgZGVm
YXVsdFN0eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKGlkcywgc2libGluZ1J1bGVzKTsK
LSAgICBBU1NFUlQoaWRzLmlzRW1wdHkoKSk7CisgICAgQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMgZmVhdHVyZXM7CisgICAgZGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMoZmVhdHVyZXMp
OworICAgIEFTU0VSVChmZWF0dXJlcy5pZHNJblJ1bGVzLmlzRW1wdHkoKSk7CiAgICAgZGVsZXRl
IHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlOwotICAgIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0
eWxlID0gc2libGluZ1J1bGVzLmxlYWtQdHIoKTsKKyAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRT
dHlsZSA9IGZlYXR1cmVzLnNpYmxpbmdSdWxlcy5sZWFrUHRyKCk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCkKQEAgLTU3OCwxNCAr
NTc3LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0KICAgICAv
LyBzaGFyaW5nIGNhbmRpZGF0ZXMuCiAgICAgLy8gVXN1YWxseSB0aGVyZSBhcmUgbm8gc2libGlu
ZyBydWxlcyBpbiB0aGUgZGVmYXVsdCBzdHlsZSBidXQgdGhlIE1hdGhNTCBzaGVldCBoYXMgc29t
ZS4KICAgICBpZiAoc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUpCi0gICAgICAgIHNpYmxpbmdS
dWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKG1faWRzSW5SdWxl
cywgbV9zaWJsaW5nUnVsZXMpOwotICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RJZHNBbmRTaWJs
aW5nUnVsZXMobV9pZHNJblJ1bGVzLCBtX3NpYmxpbmdSdWxlcyk7CisgICAgICAgIHNpYmxpbmdS
dWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CisgICAgbV9h
dXRob3JTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmIChtX3VzZXJT
dHlsZSkKLSAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXMobV9p
ZHNJblJ1bGVzLCBtX3NpYmxpbmdSdWxlcyk7CisgICAgICAgIG1fdXNlclN0eWxlLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgp
OwotICAgIGlmIChtX3NpYmxpbmdSdWxlcykKLSAgICAgICAgbV9zaWJsaW5nUnVsZXMtPnNocmlu
a1RvRml0KCk7CisgICAgaWYgKG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKQorICAgICAgICBtX2Zl
YXR1cmVzLnNpYmxpbmdSdWxlcy0+c2hyaW5rVG9GaXQoKTsKIAogICAgIGlmIChkb2N1bWVudC0+
cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAgICAgZG9j
dW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkp
OwpAQCAtNjAzLDYgKzYwMiwxNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3Rv
cigpCiAgICAgbV9mb250U2VsZWN0b3ItPmNsZWFyRG9jdW1lbnQoKTsKICAgICBkZWxldGVBbGxW
YWx1ZXMobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzKTsKIH0KKyAgICAKK0NT
U1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpGZWF0dXJlcygpIAorICAgIDogdXNlc0ZpcnN0TGlu
ZVJ1bGVzKGZhbHNlKQorICAgICwgdXNlc0JlZm9yZUFmdGVyUnVsZXMoZmFsc2UpCisgICAgLCB1
c2VzTGlua1J1bGVzKGZhbHNlKQoreworfQorCitDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6
fkZlYXR1cmVzKCkKK3sKK30KIAogc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChj
b25zdCBTdHJpbmcmIHN0cikKIHsKQEAgLTEwMjQsNyArMTAzNCw3IEBAIE5vZGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVj
bCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2lkc0luUnVs
ZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChw
LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVyU3R5bGUoKTsKQEAgLTEwNTcsNyArMTA2Nyw3IEBA
IE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QKIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hlc1NpYmxpbmdSdWxlcygpCiB7CiAgICAgaW50IGZpcnN0U2libGluZ1J1
bGUgPSAtMSwgbGFzdFNpYmxpbmdSdWxlID0gLTE7Ci0gICAgbWF0Y2hSdWxlcyhtX3NpYmxpbmdS
dWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxlLCBmYWxzZSk7Cisg
ICAgbWF0Y2hSdWxlcyhtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5n
UnVsZSwgbGFzdFNpYmxpbmdSdWxlLCBmYWxzZSk7CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFy
KCk7CkBAIC0xMTExLDcgKzExMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJl
U3R5bGVXaXRoCiAgICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdB
dHRyKSAhPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9pZHNJ
blJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
KyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFp
bnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCk7CkBAIC0xMjExLDcgKzEyMjEsNyBAQCBBTFdBWVNfSU5MSU5FIFJlbmRlclN0eWxl
KiBDU1NTdHlsZVNlbGVjCiAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNs
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYg
dGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5oYXNJRCgpICYmIG1faWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJ
RCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTMyNzIsNDcgKzMyODIsNjQgQEAgdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUo
Q1NTU3R5bGVSdWxlKgogICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKICAgICB9CiB9Cisg
ICAgCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENTU1N0
eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQoreworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYg
IXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgZmVhdHVyZXMuaWRzSW5SdWxl
cy5hZGQoc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6Cisg
ICAgICAgIGZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlcyA9IHRydWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0JlZm9yZToKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9BZnRlcjoKKyAgICAgICAgZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVyUnVsZXMg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5r
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CisgICAgICAgIGZlYXR1cmVz
LnVzZXNMaW5rUnVsZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RJZHNBbmRTaWJsaW5n
UnVsZXNGcm9tTGlzdChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8UnVs
ZVNldD4mIHNpYmxpbmdSdWxlcywgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiYgcnVsZXMpCitzdGF0
aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJl
cyYgZmVhdHVyZXMsIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4mIHJ1bGVzKQogewogICAgIHVuc2ln
bmVkIHNpemUgPSBydWxlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEgPSBydWxlc1tpXTsK
ICAgICAgICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNlOwogICAgICAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVjdG9yOyBz
ZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYgIXNlbGVjdG9yLT52YWx1ZSgpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBpZHMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwo
KSk7Ci0gICAgICAgICAgICBpZiAoQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVjdG9yID0gc2VsZWN0
b3ItPnNpbXBsZVNlbGVjdG9yKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXNpbXBsZVNl
bGVjdG9yLT5zaW1wbGVTZWxlY3RvcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2ltcGxlU2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFzaW1wbGVTZWxlY3Rvci0+dmFs
dWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGlkcy5hZGQoc2ltcGxlU2VsZWN0
b3ItPnZhbHVlKCkuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywgc2VsZWN0b3IpOworICAgICAgICAgICAgaWYg
KENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvciA9IHNlbGVjdG9yLT5zaW1wbGVTZWxlY3Rvcigp
KQorICAgICAgICAgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihmZWF0dXJlcywg
c2ltcGxlU2VsZWN0b3IpOwogICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5pc1NpYmxpbmdTZWxl
Y3RvcigpKQogICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVjdG9yID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsKLSAgICAgICAgICAg
IGlmICghc2libGluZ1J1bGVzKQotICAgICAgICAgICAgICAgIHNpYmxpbmdSdWxlcyA9IGFkb3B0
UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAgICAgICAgIHNpYmxpbmdSdWxlcy0+YWRkUnVsZShydWxl
RGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpOyAgIAorICAgICAgICAgICAgaWYgKCFm
ZWF0dXJlcy5zaWJsaW5nUnVsZXMpCisgICAgICAgICAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1
bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgICAgICAgICAgZmVhdHVyZXMuc2libGlu
Z1J1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7ICAg
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxp
bmdSdWxlcyhIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8UnVsZVNldD4m
IHNpYmxpbmdSdWxlcykgY29uc3QKK3ZvaWQgUnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKENTU1N0
eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKIHsKICAgICBBdG9tUnVsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9pZFJ1bGVzLmVuZCgpOwogICAgIGZvciAoQXRvbVJ1
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pZFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywgc2li
bGluZ1J1bGVzLCAqaXQtPnNlY29uZCk7CisgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0
KGZlYXR1cmVzLCAqaXQtPnNlY29uZCk7CiAgICAgZW5kID0gbV9jbGFzc1J1bGVzLmVuZCgpOwog
ICAgIGZvciAoQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGFzc1J1bGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxl
c0Zyb21MaXN0KGlkcywgc2libGluZ1J1bGVzLCAqaXQtPnNlY29uZCk7CisgICAgICAgIGNvbGxl
Y3RGZWF0dXJlc0Zyb21MaXN0KGZlYXR1cmVzLCAqaXQtPnNlY29uZCk7CiAgICAgZW5kID0gbV90
YWdSdWxlcy5lbmQoKTsKICAgICBmb3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdGFnUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb2xsZWN0SWRz
QW5kU2libGluZ1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5nUnVsZXMsICppdC0+c2Vjb25kKTsK
KyAgICAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsICppdC0+c2Vjb25kKTsK
ICAgICBlbmQgPSBtX3BzZXVkb1J1bGVzLmVuZCgpOwogICAgIGZvciAoQXRvbVJ1bGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wc2V1ZG9SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdS
dWxlcywgKml0LT5zZWNvbmQpOwotICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlz
dChpZHMsIHNpYmxpbmdSdWxlcywgbV91bml2ZXJzYWxSdWxlcyk7CisgICAgICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21MaXN0KGZlYXR1cmVzLCAqaXQtPnNlY29uZCk7CisgICAgY29sbGVjdEZlYXR1
cmVzRnJvbUxpc3QoZmVhdHVyZXMsIG1fdW5pdmVyc2FsUnVsZXMpOwogfQogICAgIAogc3RhdGlj
IGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYg
bWFwKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiA4
MDEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NCw4ICsxNzQsMjMgQEAgcHVibGljOgogICAgICAgICB2b2lkIGFkZEtleWZy
YW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlPiBydWxlKTsKICAgICAg
ICAgdm9pZCBhZGRQYWdlU3R5bGUoUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4pOwogCisgICAgICAg
IGJvb2wgdXNlc1NpYmxpbmdSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuc2libGlu
Z1J1bGVzOyB9CisgICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcy51c2VzRmlyc3RMaW5lUnVsZXM7IH0KKyAgICAgICAgYm9vbCB1c2VzQmVm
b3JlQWZ0ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMudXNlc0JlZm9yZUFmdGVy
UnVsZXM7IH0KKyAgICAgICAgYm9vbCB1c2VzTGlua1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlcy51c2VzTGlua1J1bGVzOyB9CisKICAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlv
bnMpOwogCisgICAgICAgIHN0cnVjdCBGZWF0dXJlcyB7CisgICAgICAgICAgICBGZWF0dXJlcygp
OworICAgICAgICAgICAgfkZlYXR1cmVzKCk7CisgICAgICAgICAgICBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiBpZHNJblJ1bGVzOworICAgICAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IHNpYmxp
bmdSdWxlczsKKyAgICAgICAgICAgIGJvb2wgdXNlc0ZpcnN0TGluZVJ1bGVzOworICAgICAgICAg
ICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlczsKKyAgICAgICAgICAgIGJvb2wgdXNlc0xpbmtS
dWxlczsKKyAgICAgICAgfTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gU2VsZWN0b3JN
YXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5IH07CiAKQEAgLTIwOCwxMCArMjIzLDkgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAgICAgIE93blB0cjxS
dWxlU2V0PiBtX3VzZXJTdHlsZTsKLSAgICAgICAgCi0gICAgICAgIE93blB0cjxSdWxlU2V0PiBt
X3NpYmxpbmdSdWxlczsKLSAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gbV9pZHNJ
blJ1bGVzOwotICAgICAgICAKKworICAgICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOworCiAgICAg
ICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKICAgICAgICAgICAgIFBhcmVudFN0YWNrRnJh
bWUoKSB7fQogICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50KSA6
IGVsZW1lbnQoZWxlbWVudCkge30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gODAxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzEsMTEgKzQ3MSwxMiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBLCiAgICAgbV9pblN0eWxlUmVjYWxjID0gZmFsc2U7CiAgICAgbV9jbG9zZUFmdGVy
U3R5bGVSZWNhbGMgPSBmYWxzZTsKIAotICAgIG1fdXNlc0Rlc2NlbmRhbnRSdWxlcyA9IGZhbHNl
OwogICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9IGZhbHNlOworICAgIG1fdXNlc1NpYmxpbmdSdWxl
c092ZXJyaWRlID0gZmFsc2U7CiAgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBmYWxzZTsKICAg
ICBtX3VzZXNGaXJzdExldHRlclJ1bGVzID0gZmFsc2U7CiAgICAgbV91c2VzQmVmb3JlQWZ0ZXJS
dWxlcyA9IGZhbHNlOworICAgIG1fdXNlc0JlZm9yZUFmdGVyUnVsZXNPdmVycmlkZSA9IGZhbHNl
OwogICAgIG1fdXNlc1JlbVVuaXRzID0gZmFsc2U7CiAgICAgbV91c2VzTGlua1J1bGVzID0gZmFs
c2U7CiAKQEAgLTE1MzAsNiArMTUzMSwxMiBAQCBiYWlsX291dDoKICAgICBjbGVhck5lZWRzU3R5
bGVSZWNhbGMoKTsKICAgICBjbGVhckNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHVuc2No
ZWR1bGVTdHlsZVJlY2FsYygpOworICAgIAorICAgIC8vIFBzZXVkbyBlbGVtZW50IHJlbW92YWwg
YW5kIHNpbWlsYXIgbWF5IG9ubHkgd29yayB3aXRoIHRoZXNlIGZsYWdzIHN0aWxsIHNldC4gUmVz
ZXQgdGhlbSBhZnRlciB0aGUgc3R5bGUgcmVjYWxjLgorICAgIG1fdXNlc1NpYmxpbmdSdWxlcyA9
IG1fc3R5bGVTZWxlY3Rvci0+dXNlc1NpYmxpbmdSdWxlcygpOworICAgIG1fdXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzRmlyc3RMaW5lUnVsZXMoKTsKKyAgICBtX3Vz
ZXNCZWZvcmVBZnRlclJ1bGVzID0gbV9zdHlsZVNlbGVjdG9yLT51c2VzQmVmb3JlQWZ0ZXJSdWxl
cygpOworICAgIG1fdXNlc0xpbmtSdWxlcyA9IG1fc3R5bGVTZWxlY3Rvci0+dXNlc0xpbmtSdWxl
cygpOwogCiAgICAgaWYgKHZpZXcoKSkKICAgICAgICAgdmlldygpLT5yZXN1bWVTY2hlZHVsZWRF
dmVudHMoKTsKQEAgLTE2OTMsNiArMTcwMCwxMSBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVTdHls
ZVNlbGVjdG9yKCkKICAgICAgICAgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzID0gZG9jU2V0dGlu
Z3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCk7CiAgICAgbV9zdHlsZVNlbGVjdG9yLnNl
dChuZXcgQ1NTU3R5bGVTZWxlY3Rvcih0aGlzLCBtX3N0eWxlU2hlZXRzLmdldCgpLCBtX21hcHBl
ZEVsZW1lbnRTaGVldC5nZXQoKSwgcGFnZVVzZXJTaGVldCgpLCBwYWdlR3JvdXBVc2VyU2hlZXRz
KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWluUXVp
cmtzTW9kZSgpLCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpKTsKKyAgICAvLyBEZWxheSByZXNl
dHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVyIG5leHQgc3R5bGUgcmVjYWxjIHNpbmNlIHVuYXBw
bHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29yayB3aXRob3V0IHRoZXNlIHNldCAodGhpcyBpcyB0
cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2FmdGVyKS4KKyAgICBtX3VzZXNTaWJsaW5nUnVsZXMg
PSBtX3VzZXNTaWJsaW5nUnVsZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzU2libGluZ1J1bGVz
KCk7CisgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3VzZXNGaXJzdExpbmVSdWxlcyB8fCBt
X3N0eWxlU2VsZWN0b3ItPnVzZXNGaXJzdExpbmVSdWxlcygpOworICAgIG1fdXNlc0JlZm9yZUFm
dGVyUnVsZXMgPSBtX3VzZXNCZWZvcmVBZnRlclJ1bGVzIHx8IG1fc3R5bGVTZWxlY3Rvci0+dXNl
c0JlZm9yZUFmdGVyUnVsZXMoKTsKKyAgICBtX3VzZXNMaW5rUnVsZXMgPSBtX3VzZXNMaW5rUnVs
ZXMgfHwgbV9zdHlsZVNlbGVjdG9yLT51c2VzTGlua1J1bGVzKCk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OmF0dGFjaCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gODAxMDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDE2
ICs0ODgsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc3R5bGVTZWxlY3RvckNoYW5nZWQoU3R5bGVT
ZWxlY3RvclVwZGF0ZUZsYWcpOwogICAgIHZvaWQgcmVjYWxjU3R5bGVTZWxlY3RvcigpOwogCi0g
ICAgYm9vbCB1c2VzRGVzY2VuZGFudFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzRGVzY2Vu
ZGFudFJ1bGVzOyB9Ci0gICAgdm9pZCBzZXRVc2VzRGVzY2VuZGFudFJ1bGVzKGJvb2wgYikgeyBt
X3VzZXNEZXNjZW5kYW50UnVsZXMgPSBiOyB9Ci0gICAgYm9vbCB1c2VzU2libGluZ1J1bGVzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VzU2libGluZ1J1bGVzOyB9Ci0gICAgdm9pZCBzZXRVc2VzU2li
bGluZ1J1bGVzKGJvb2wgYikgeyBtX3VzZXNTaWJsaW5nUnVsZXMgPSBiOyB9CisgICAgYm9vbCB1
c2VzU2libGluZ1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzU2libGluZ1J1bGVzIHx8IG1f
dXNlc1NpYmxpbmdSdWxlc092ZXJyaWRlOyB9CisgICAgdm9pZCBzZXRVc2VzU2libGluZ1J1bGVz
KGJvb2wgYikgeyBtX3VzZXNTaWJsaW5nUnVsZXNPdmVycmlkZSA9IGI7IH0KICAgICBib29sIHVz
ZXNGaXJzdExpbmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0ZpcnN0TGluZVJ1bGVzOyB9
Ci0gICAgdm9pZCBzZXRVc2VzRmlyc3RMaW5lUnVsZXMoYm9vbCBiKSB7IG1fdXNlc0ZpcnN0TGlu
ZVJ1bGVzID0gYjsgfQogICAgIGJvb2wgdXNlc0ZpcnN0TGV0dGVyUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX3VzZXNGaXJzdExldHRlclJ1bGVzOyB9CiAgICAgdm9pZCBzZXRVc2VzRmlyc3RMZXR0
ZXJSdWxlcyhib29sIGIpIHsgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IGI7IH0KLSAgICBib29s
IHVzZXNCZWZvcmVBZnRlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzQmVmb3JlQWZ0ZXJS
dWxlczsgfQotICAgIHZvaWQgc2V0VXNlc0JlZm9yZUFmdGVyUnVsZXMoYm9vbCBiKSB7IG1fdXNl
c0JlZm9yZUFmdGVyUnVsZXMgPSBiOyB9CisgICAgYm9vbCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlc0JlZm9yZUFmdGVyUnVsZXMgfHwgbV91c2VzQmVmb3JlQWZ0
ZXJSdWxlc092ZXJyaWRlOyB9CisgICAgdm9pZCBzZXRVc2VzQmVmb3JlQWZ0ZXJSdWxlcyhib29s
IGIpIHsgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlc092ZXJyaWRlID0gYjsgfQogICAgIGJvb2wgdXNl
c1JlbVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUmVtVW5pdHM7IH0KICAgICB2b2lkIHNl
dFVzZXNSZW1Vbml0cyhib29sIGIpIHsgbV91c2VzUmVtVW5pdHMgPSBiOyB9CiAgICAgYm9vbCB1
c2VzTGlua1J1bGVzKCkgY29uc3QgeyByZXR1cm4gbGlua0NvbG9yKCkgIT0gdmlzaXRlZExpbmtD
b2xvcigpIHx8IG1fdXNlc0xpbmtSdWxlczsgfQpAQCAtMTI3MiwxMSArMTI2OSwxMiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pblN0eWxlUmVjYWxjOwogICAgIGJvb2wgbV9jbG9zZUFmdGVyU3R5
bGVSZWNhbGM7CiAKLSAgICBib29sIG1fdXNlc0Rlc2NlbmRhbnRSdWxlczsKICAgICBib29sIG1f
dXNlc1NpYmxpbmdSdWxlczsKKyAgICBib29sIG1fdXNlc1NpYmxpbmdSdWxlc092ZXJyaWRlOwog
ICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXM7CiAgICAgYm9vbCBtX3VzZXNGaXJzdExldHRl
clJ1bGVzOwogICAgIGJvb2wgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlczsKKyAgICBib29sIG1fdXNl
c0JlZm9yZUFmdGVyUnVsZXNPdmVycmlkZTsKICAgICBib29sIG1fdXNlc1JlbVVuaXRzOwogICAg
IGJvb2wgbV91c2VzTGlua1J1bGVzOwogICAgIGJvb2wgbV9nb3RvQW5jaG9yTmVlZGVkQWZ0ZXJT
dHlsZXNoZWV0c0xvYWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4MDEw
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAyNyw3ICsxMDI3LDYgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBj
aAogICAgIC8vIFJlZiBjdXJyZW50U3R5bGUgaW4gY2FzZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUg
ZGVsZXRlZCB3aGVuIHNldFJlbmRlclN0eWxlKCkgaXMgY2FsbGVkLgogICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gY3VycmVudFN0eWxlKHJlbmRlclN0eWxlKCkpOwogICAgIGJvb2wgaGFzUGFyZW50
U3R5bGUgPSBwYXJlbnRPckhvc3ROb2RlKCkgPyBwYXJlbnRPckhvc3ROb2RlKCktPnJlbmRlclN0
eWxlKCkgOiBmYWxzZTsKLSAgICBib29sIGhhc1Bvc2l0aW9uYWxSdWxlcyA9IG5lZWRzU3R5bGVS
ZWNhbGMoKSAmJiBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVk
QnlQb3NpdGlvbmFsUnVsZXMoKTsKICAgICBib29sIGhhc0RpcmVjdEFkamFjZW50UnVsZXMgPSBj
dXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGph
Y2VudFJ1bGVzKCk7CiAKICAgICBpZiAoKGNoYW5nZSA+IE5vQ2hhbmdlIHx8IG5lZWRzU3R5bGVS
ZWNhbGMoKSkpIHsKQEAgLTEwNzAsMTEgKzEwNjksOSBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlIGNoCiAKICAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlIHx8IHBzZXVk
b1N0eWxlQ2FjaGVJc0ludmFsaWQoY3VycmVudFN0eWxlLmdldCgpLCBuZXdTdHlsZS5nZXQoKSkg
fHwgKGNoYW5nZSA9PSBGb3JjZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnJlcXVpcmVz
Rm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbigpKSkgewogICAgICAgICAgICAgc2V0UmVuZGVy
U3R5bGUobmV3U3R5bGUpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzU3R5bGVSZWNhbGMoKSAm
JiAoc3R5bGVDaGFuZ2VUeXBlKCkgIT0gU3ludGhldGljU3R5bGVDaGFuZ2UpICYmIChkb2N1bWVu
dCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxl
cygpKSkgeworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzU3R5bGVSZWNhbGMoKSAmJiBzdHlsZUNo
YW5nZVR5cGUoKSAhPSBTeW50aGV0aWNTdHlsZUNoYW5nZSkgewogICAgICAgICAgICAgLy8gQWx0
aG91Z2ggbm8gY2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRo
ZSBjb3VzaW4gc3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdldAotICAgICAgICAgICAgLy8gZm9v
bGVkIGludG8gYmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuICBUaGlzIGlzIG9ubHkg
bmVjZXNzYXJ5IGlmIHRoZSBkb2N1bWVudCBhY3R1YWxseSB1c2VzCi0gICAgICAgICAgICAvLyBz
aWJsaW5nL2Rlc2NlbmRhbnQgcnVsZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJs
ZSBmb3IgYW5jZXN0b3Igc3R5bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9mCi0gICAgICAgICAgICAv
LyBkZXNjZW5kYW50cy4KKyAgICAgICAgICAgIC8vIGZvb2xlZCBpbnRvIGJlbGlldmluZyB0aGlz
IHN0eWxlIGlzIHRoZSBzYW1lLgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGVJbnRlcm5hbChuZXdTdHlsZS5nZXQoKSk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC0xMDg3LDcgKzEwODQsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAgICAgICAgICAvLyBhbGwgdGhlIHdheSBkb3duIHRo
ZSB0cmVlLiAgVGhpcyBpcyBzaW1wbGVyIHRoYW4gaGF2aW5nIHRvIG1haW50YWluIGEgY2FjaGUg
b2Ygb2JqZWN0cyAoYW5kIHN1Y2ggZm9udCBzaXplIGNoYW5nZXMgc2hvdWxkIGJlIHJhcmUgYW55
d2F5KS4KICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT51c2VzUmVtVW5pdHMoKSAmJiBjaCAh
PSBOb0NoYW5nZSAmJiBjdXJyZW50U3R5bGUgJiYgbmV3U3R5bGUgJiYgY3VycmVudFN0eWxlLT5m
b250U2l6ZSgpICE9IG5ld1N0eWxlLT5mb250U2l6ZSgpICYmIGRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgY2hhbmdlID0gRm9yY2U7Ci0gICAg
ICAgICAgICBlbHNlIGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhh
c1Bvc2l0aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdl
KQorICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hh
bmdlKQogICAgICAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGNoYW5nZSA9IGNoOwo=
</data>
<flag name="review"
          id="76384"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>