<?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>8808</bug_id>
          
          <creation_ts>2006-05-09 11:03:29 -0700</creation_ts>
          <short_desc>WebCore should handle text files</short_desc>
          <delta_ts>2006-05-09 12:01:16 -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>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>41623</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-09 11:03:29 -0700</bug_when>
    <thetext>Currently, the code that handles showing text files is in WebKit and uses an NSTextView. This should be in WebCore instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41626</commentid>
    <comment_count>1</comment_count>
      <attachid>8186</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-09 11:29:43 -0700</bug_when>
    <thetext>Created attachment 8186
Patch

I&apos;m not sure about whether unsupportedTextMIMETypes should be moved to WebCore...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41627</commentid>
    <comment_count>2</comment_count>
      <attachid>8186</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-09 11:35:47 -0700</bug_when>
    <thetext>Comment on attachment 8186
Patch

+    PassRefPtr&lt;TextDocument&gt; createTextDocument(FrameView* v = 0);

No need for the &quot;v&quot; there.

Why create separate text nodes for each piece of data written? Maybe instead we should create just one large text node.

Why create a &quot;pre&quot; element? Couldn&apos;t we just put the text into the body and use CSS to style as we like?

+TextDocument::TextDocument(DOMImplementation *_implementation, FrameView *v)

Please put * next to the type name. Please don&apos;t use an underscore prefix in new code.

I do think the list of unsupported text MIME types should go into WebCore.

This looks ready to go to me. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41628</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-09 11:43:00 -0700</bug_when>
    <thetext>We also should have some test cases of text handling.  These shoudl be possible with the httpd testing mechanisms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41629</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-05-09 12:01:16 -0700</bug_when>
    <thetext>I went ahead and committed this. I&apos;m looking at adding test cases now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8186</attachid>
            <date>2006-05-09 11:29:43 -0700</date>
            <delta_ts>2006-05-09 11:35:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>text-document.txt</filename>
            <type>text/plain</type>
            <size>50693</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAkocmV2aXNpb24gMTQyNTcpCisrKyBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
IGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEhUTUxEb2N1bWVu
dDsKIGNsYXNzIFN0cmluZzsKK2NsYXNzIFRleHREb2N1bWVudDsKIAogdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKIApAQCAtNTgsMTIgKzU5LDE0IEBAIHB1YmxpYzoKICAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRl
RG9jdW1lbnQoRnJhbWVWaWV3KiA9IDApOwogICAgIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBj
cmVhdGVIVE1MRG9jdW1lbnQoRnJhbWVWaWV3KiA9IDApOworICAgIFBhc3NSZWZQdHI8VGV4dERv
Y3VtZW50PiBjcmVhdGVUZXh0RG9jdW1lbnQoRnJhbWVWaWV3KiB2ID0gMCk7CiAKICAgICAvLyBS
ZXR1cm5zIHRoZSBzdGF0aWMgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyAtIG9ubHkgb25lIGluc3Rh
bmNlIG9mIHRoaXMgY2xhc3Mgc2hvdWxkCiAgICAgLy8gZXZlciBiZSBwcmVzZW50LCBhbmQgaXMg
dXNlZCBhcyBhIGZhY3RvcnkgbWV0aG9kIGZvciBjcmVhdGluZyBEb2N1bWVudCBvYmplY3RzCiAg
ICAgc3RhdGljIERPTUltcGxlbWVudGF0aW9uKiBpbnN0YW5jZSgpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNYTUxNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9v
bCBpc1RleHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDE0MjU3KQor
KysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAjaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJUZXh0RG9jdW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzQsNiArMTc1
LDExIEBAIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBET01JbXBsZW1lbnRhdGkKICAgICByZXR1
cm4gbmV3IEhUTUxEb2N1bWVudCh0aGlzLCB2KTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0RG9jdW1l
bnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVUZXh0RG9jdW1lbnQoRnJhbWVWaWV3ICp2KQor
eworICAgIHJldHVybiBuZXcgVGV4dERvY3VtZW50KHRoaXMsIHYpOworfQorCiBET01JbXBsZW1l
bnRhdGlvbiogRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCkKIHsKICAgICBzdGF0aWMgUmVm
UHRyPERPTUltcGxlbWVudGF0aW9uPiBpID0gbmV3IERPTUltcGxlbWVudGF0aW9uOwpAQCAtMTkx
LDYgKzE5NywxNiBAQCBib29sIERPTUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKGNvCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIERPTUltcGxlbWVudGF0aW9uOjppc1RleHRNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1qYXZhc2NyaXB0IiB8fAorICAgICAgICAobWltZVR5cGUuc3RhcnRzV2l0aCgi
dGV4dC8iKSAmJiBtaW1lVHlwZSAhPSAidGV4dC9odG1sIiAmJgorICAgICAgICAgbWltZVR5cGUg
IT0gInRleHQveG1sIiAmJiBtaW1lVHlwZSAhPSAidGV4dC94c2wiKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBQYXNzUmVmUHRyPEhUTUxEb2N1
bWVudD4gRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZUhUTUxEb2N1bWVudChjb25zdCBTdHJpbmcm
IHRpdGxlKQogewogICAgIFJlZlB0cjxIVE1MRG9jdW1lbnQ+IGQgPSBjcmVhdGVIVE1MRG9jdW1l
bnQoMCAvKiAjIyMgY3JlYXRlIGEgdmlldyBvdGhlcndpc2UgaXQgZG9lc24ndCB3b3JrICovKTsK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNDI1NykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBACiAJCTFBNUQ5MzhGMEEwQjlBQ0MwMEIxMTIx
RiAvKiBYUGF0aFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE1RDkzOEQwQTBCOUFDQzAwQjExMjFGIC8qIFhQYXRoUGFyc2VyLmggKi87IH07
CiAJCTFBNjkzMTc2MEEwQ0Q0RkEwMEMxMjdGRSAvKiBYUGF0aFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTY5MzE3NDBBMENENEZBMDBDMTI3
RkUgLyogWFBhdGhWYWx1ZS5oICovOyB9OwogCQkxQTY5MzE3NzBBMENENEZBMDBDMTI3RkUgLyog
WFBhdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTY5MzE3NTBBMENENEZBMDBDMTI3RkUgLyogWFBhdGhWYWx1ZS5jcHAgKi87IH07CisJ
CTFBNjkzODAxMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2OTM3RkYwQTExMTAwQTAwQzEy
N0ZFIC8qIFRleHREb2N1bWVudC5jcHAgKi87IH07CisJCTFBNjkzODAyMEExMTEwMEEwMEMxMjdG
RSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBNjkzODAwMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuaCAqLzsg
fTsKIAkJMUE3NjI5ODMwQTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbk5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NTkw
QTA3NDBBMDAwOTg5RjVCIC8qIFhQYXRoRXhwcmVzc2lvbk5vZGUuY3BwICovOyB9OwogCQkxQTc2
Mjk4NDBBMDc0MEEwMDA5ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uTm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3NjI5NUEwQTA3NDBBMDAwOTg5
RjVCIC8qIFhQYXRoRXhwcmVzc2lvbk5vZGUuaCAqLzsgfTsKIAkJMUE3NjI5OEEwQTA3NDBBMDAw
OTg5RjVCIC8qIFhQYXRoRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzYyOTYxMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEZ1bmN0
aW9ucy5jcHAgKi87IH07CkBAIC0xMjk3LDYgKzEyOTksOCBAQAogCQkxQTVEOTM4RDBBMEI5QUND
MDBCMTEyMUYgLyogWFBhdGhQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhQYXRoUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNjkzMTc0
MEEwQ0Q0RkEwMEMxMjdGRSAvKiBYUGF0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhQYXRoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2
OTMxNzUwQTBDRDRGQTAwQzEyN0ZFIC8qIFhQYXRoVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gWFBhdGhWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBNjkzN0ZGMEExMTEwMEEwMEMxMjdGRSAvKiBUZXh0RG9jdW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHREb2N1bWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBNjkzODAwMEExMTEwMEEwMEMxMjdGRSAvKiBU
ZXh0RG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREb2N1
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTc2Mjk1OTBBMDc0MEEwMDA5
ODlGNUIgLyogWFBhdGhFeHByZXNzaW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWFBhdGhFeHByZXNzaW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBNzYyOTVBMEEwNzQwQTAwMDk4OUY1QiAvKiBYUGF0aEV4cHJlc3Npb25O
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUGF0aEV4cHJlc3Npb25O
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNzYyOTYxMEEwNzQwQTAwMDk4
OUY1QiAvKiBYUGF0aEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gWFBhdGhGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzk3OSw2ICszOTgzLDggQEAKIAkJCQlCQ0IxNkMxNDA5NzlDM0JEMDA0Njc3NDEgLyogbG9h
ZGVyLmggKi8sCiAJCQkJQkNCMTZDMTUwOTc5QzNCRDAwNDY3NzQxIC8qIFJlcXVlc3QuY3BwICov
LAogCQkJCUJDQjE2QzE2MDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0LmggKi8sCisJCQkJMUE2
OTM3RkYwQTExMTAwQTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5jcHAgKi8sCisJCQkJMUE2OTM4
MDAwQTExMTAwQTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5oICovLAogCQkJKTsKIAkJCXBhdGgg
PSBsb2FkZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTAwMyw2ICs1MDA5LDcg
QEAKIAkJCQkxQTc2MkM3QTBBMDc0RjI2MDA5ODlGNUIgLyogSlNYUGF0aFJlc3VsdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE1RDkzOEYwQTBCOUFDQzAwQjExMjFGIC8qIFhQYXRoUGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTY5MzE3NjBBMENENEZBMDBDMTI3RkUgLyogWFBhdGhWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE2OTM4MDIwQTExMTAwQTAwQzEyN0ZFIC8qIFRleHRE
b2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01NzQwLDYgKzU3NDcsNyBAQAogCQkJCTkzNkJE
RDFEMEEwMzFBRUIwMDRERjRBQiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0NEMTMyMDBBMEMwMDMwMDAxQUZBOEIgLyogRm9udERhdGEubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQTY5MzE3NzBBMENENEZBMDBDMTI3RkUgLyogWFBhdGhWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQTY5MzgwMTBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjU3KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MiBAQAorMjAwNi0wNS0wOSAgQW5kZXJzIENh
cmxzc29uICA8YWNhcmxzc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hv
d19idWcuY2dpP2lkPTg4MDgKKyAgICAgICAgV2ViQ29yZSBzaG91bGQgaGFuZGxlIHRleHQgZmls
ZXMKKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICBBZGQgVGV4dERvY3VtZW50LmNwcCBhbmQgVGV4dERvY3VtZW50LmgKKyAgICAg
ICAgCisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAg
ICgrW1dlYkNvcmVGcmFtZUJyaWRnZSBzdXBwb3J0ZWRNSU1FVHlwZXNdKToKKyAgICAgICAgQWRk
IHRleHQgdHlwZXMgaGVyZS4KKyAgICAgICAgCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVUZXh0
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmlzVGV4dE1J
TUVUeXBlKToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uaDoKKyAgICAgICAgTmV3
IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYSBUZXh0RG9jdW1lbnQgYW5kIGRldGVybWluaW5nIGlm
IGEgCisgICAgICAgIG1pbWUgdHlwZSBpcyBhIHRleHQgTUlNRSB0eXBlLgorICAgICAgICAKKyAg
ICAgICAgKiBsb2FkZXIvVGV4dERvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VG9rZW5pemVyOjpUZXh0VG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
b2tlbml6ZXI6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUb2tlbml6ZXI6OmZpbmlz
aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VG9rZW5pemVyOjppc1dhaXRpbmdGb3JTY3JpcHRz
KToKKyAgICAgICAgU3BlY2lhbCB0b2tlbml6ZXIgd2hpY2ggd2lsbCBwdXQgdGV4dCBpbnNpZGUg
YSA8cHJlPiB0YWcKKyAgICAgICAgaW4gYSBkb2N1bWVudC4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RG9jdW1lbnQ6OlRleHREb2N1bWVudCk6ICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OlRleHREb2N1bWVudDo6Y3JlYXRlVG9rZW5pemVyKToKKyAgICAgICAgQ3JlYXRlIGEg
VGV4dFRva2VuaXplci4KKyAgICAgICAgCisgICAgICAgICogbG9hZGVyL1RleHREb2N1bWVudC5o
OiBBZGRlZC4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6YmVnaW4pOgorICAgICAgICBDcmVhdGUgYSBUZXh0RG9jdW1lbnQgaWYg
dGhlIE1JTUUgdHlwZSBpcyBvZiB0eXBlIHRleHQuCisKIDIwMDYtMDUtMDkgIE1hY2llaiBTdGFj
aG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBBbmRl
cnMuCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlz
aW9uIDE0MjU3KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZy
YW1lQnJpZGdlICpicmlkZ2UKICAgICAgICAgQCJ0ZXh0L2h0bWwiLAogICAgICAgICBAInRleHQv
eG1sIiwKICAgICAgICAgQCJ0ZXh0L3hzbCIsCisgICAgICAgIEAidGV4dC8iLAorICAgICAgICBA
ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsCiAgICAgICAgIEAiYXBwbGljYXRpb24veG1sIiwK
ICAgICAgICAgQCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAogICAgICAgICBAImFwcGxpY2F0aW9u
L3Jzcyt4bWwiLApJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dERvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9sb2FkZXIvVGV4dERvY3VtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRleHREb2N1bWVu
dC5oIgorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJ4
bWxfdG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKyAgICAKK2NsYXNzIFRleHRUb2tlbml6ZXIgOiBwdWJsaWMgVG9rZW5pemVy
IHsKK3B1YmxpYzoKKyAgICBUZXh0VG9rZW5pemVyKERvY3VtZW50KiBkb2MpIDogbV9kb2MoZG9j
KSwgbV9wcmVFbGVtZW50KDApIHsgfQorCisgICAgdmlydHVhbCBib29sIHdyaXRlKGNvbnN0IFNl
Z21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlz
aCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvYzsKKyAgICBFbGVtZW50KiBtX3ByZUVsZW1l
bnQ7Cit9OworCitib29sIFRleHRUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgcywgYm9vbCBhcHBlbmREYXRhKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgCisg
ICAgaWYgKCFtX3ByZUVsZW1lbnQpIHsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVt
ZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnROUyh4aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBl
Yyk7CisgICAgICAgIG1fZG9jLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMpOworCisgICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnROUyh4aHRtbE5h
bWVzcGFjZVVSSSwgImJvZHkiLCBlYyk7CisgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGls
ZChib2R5LCBlYyk7CisKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHByZUVsZW1lbnQgPSBtX2Rv
Yy0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAicHJlIiwgZWMpOworICAgICAg
ICBib2R5LT5hcHBlbmRDaGlsZChtX3ByZUVsZW1lbnQsIGVjKTsKKyAgICAgICAgCisgICAgICAg
IG1fcHJlRWxlbWVudCA9IHByZUVsZW1lbnQuZ2V0KCk7CisgICAgfSAKKyAgICAKKyAgICBSZWZQ
dHI8VGV4dD4gdGV4dCA9IG1fZG9jLT5jcmVhdGVUZXh0Tm9kZShzLnRvU3RyaW5nKCkpOworICAg
IG1fcHJlRWxlbWVudC0+YXBwZW5kQ2hpbGQodGV4dCwgZWMpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFRleHRUb2tlbml6ZXI6OmZpbmlzaCgpCit7CisgICAgbV9wcmVFbGVtZW50
ID0gMDsKKyAgICAKKyAgICBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCk7Cit9CisKK2Jvb2wgVGV4
dFRva2VuaXplcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0Cit7CisgICAgLy8gQSB0ZXh0
IGRvY3VtZW50IGlzIG5ldmVyIHdhaXRpbmcgZm9yIHNjcmlwdHMKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1RleHREb2N1bWVudDo6VGV4dERvY3VtZW50KERPTUltcGxlbWVudGF0aW9uICpfaW1w
bGVtZW50YXRpb24sIEZyYW1lVmlldyAqdikKKyAgICA6IERvY3VtZW50KF9pbXBsZW1lbnRhdGlv
biwgdikKK3sKK30KKworVG9rZW5pemVyKiBUZXh0RG9jdW1lbnQ6OmNyZWF0ZVRva2VuaXplcigp
Cit7CisgICAgcmV0dXJuIG5ldyBUZXh0VG9rZW5pemVyKHRoaXMpOworfQorCit9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9UZXh0RG9jdW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL1RleHREb2N1
bWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpZm5kZWYgVGV4dERv
Y3VtZW50X2gKKyNkZWZpbmUgVGV4dERvY3VtZW50X2gKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CitjbGFz
cyBGcmFtZVZpZXc7CisKK2NsYXNzIFRleHREb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudAorewor
cHVibGljOgorICAgIFRleHREb2N1bWVudChET01JbXBsZW1lbnRhdGlvbiosIEZyYW1lVmlldyog
PSAwKTsKKyAgICAKKyAgICB2aXJ0dWFsIFRva2VuaXplciogY3JlYXRlVG9rZW5pemVyKCk7Cit9
OworCit9CisKKyNlbmRpZiAvLyBUZXh0RG9jdW1lbnRfaApJbmRleDogV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAx
NDI1NykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHREb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyYW5zZmVySm9iLmgi
CiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgpAQCAtNTg5LDYgKzU5MCw4IEBAIHZvaWQgRnJh
bWU6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCkKIAogICBpZiAoRE9NSW1wbGVtZW50YXRpb246Omlz
WE1MTUlNRVR5cGUoZC0+bV9yZXF1ZXN0Lm1fcmVzcG9uc2VNSU1FVHlwZSkpCiAgICAgZC0+bV9k
b2MgPSBET01JbXBsZW1lbnRhdGlvbjo6aW5zdGFuY2UoKS0+Y3JlYXRlRG9jdW1lbnQoZC0+bV92
aWV3LmdldCgpKTsKKyAgZWxzZSBpZiAoRE9NSW1wbGVtZW50YXRpb246OmlzVGV4dE1JTUVUeXBl
KGQtPm1fcmVxdWVzdC5tX3Jlc3BvbnNlTUlNRVR5cGUpKQorICAgIGQtPm1fZG9jID0gRE9NSW1w
bGVtZW50YXRpb246Omluc3RhbmNlKCktPmNyZWF0ZVRleHREb2N1bWVudChkLT5tX3ZpZXcuZ2V0
KCkpOwogICBlbHNlCiAgICAgZC0+bV9kb2MgPSBET01JbXBsZW1lbnRhdGlvbjo6aW5zdGFuY2Uo
KS0+Y3JlYXRlSFRNTERvY3VtZW50KGQtPm1fdmlldy5nZXQoKSk7CiAKSW5kZXg6IFdlYktpdC9X
ZWJLaXQuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJLaXQuZXhwCShyZXZpc2lvbiAxNDI1
NykKKysrIFdlYktpdC9XZWJLaXQuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBA
CiAub2JqY19jbGFzc19uYW1lX1dlYlJlbmRlck5vZGUKIC5vYmpjX2NsYXNzX25hbWVfV2ViUmVz
b3VyY2UKIC5vYmpjX2NsYXNzX25hbWVfV2ViU3RyaW5nVHJ1bmNhdG9yCi0ub2JqY19jbGFzc19u
YW1lX1dlYlRleHRWaWV3CiAub2JqY19jbGFzc19uYW1lX1dlYlVSTHNXaXRoVGl0bGVzCiAub2Jq
Y19jbGFzc19uYW1lX1dlYlZpZXcKIF9XZWJBY3Rpb25CdXR0b25LZXkKSW5kZXg6IFdlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MjU3KQorKysgV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
OCArMTE4LDYgQEAKIAkJOTM5ODEwNUUwODI0QkYwMTAwOERGMDM4IC8qIFdlYlByZWZlcmVuY2Vz
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUNBRTlEMDcwMjUyQTQxMzBFQ0ExNkVBIC8qIFdlYlByZWZlcmVuY2VzUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDVGMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJSZW5kZXJOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUY4MUMzOTAyQjY3QzI2MDE4NjM1Q0EgLyogV2ViUmVu
ZGVyTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzOTgxMDYwMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzRDQyMkUw
MzRDRjU1QTAwQ0EyQUNEIC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk5Mzk4MTA2MTA4MjRCRjAxMDA4
REYwMzggLyogV2ViVGV4dFJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNTA4MURBNjAyQjZENEU0MEFDQTJBQ0EgLyogV2ViVGV4
dFJlcHJlc2VudGF0aW9uLmggKi87IH07Ci0JCTkzOTgxMDYyMDgyNEJGMDEwMDhERjAzOCAvKiBX
ZWJUZXh0Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzUwODFEQTgwMkI2RDRFNDBBQ0EyQUNBIC8qIFdlYlRleHRWaWV3LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJOTM5ODEwNjMwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkhpc3RvcnlJdGVtUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2RjI5NkYwM0E2QzQ1QTAwQ0EyRDNBIC8qIFdlYkhpc3RvcnlJdGVt
UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzOTgxMDY0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVsZWdhdGVQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDM2RkQ1RTAz
Rjc4RjlFMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlUHJpdmF0ZS5oICovOyB9OwogCQk5Mzk4
MTA2NTA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93QWRhcHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOTAwM0Y5REJBMTAzQ0Ew
REU2IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIuaCAqLzsgfTsKQEAgLTIzOSw4ICsyMzcsNiBAQAog
CQk5Mzk4MTBGNzA4MjRCRjAxMDA4REYwMzggLyogV2ViTWFpblJlc291cmNlTG9hZGVyLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUQ1MzhFQzAyNDQx
RkREMDFBODAxODEgLyogV2ViTWFpblJlc291cmNlTG9hZGVyLm0gKi87IH07CiAJCTkzOTgxMEY4
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQcmVmZXJlbmNlcy5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBRUJCM0QwMjRBNTI3NjAxQzFBNTI2IC8qIFdl
YlByZWZlcmVuY2VzLm0gKi87IH07CiAJCTkzOTgxMEY5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJS
ZW5kZXJOb2RlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNUY4MUMzQTAyQjY3QzI2MDE4NjM1Q0EgLyogV2ViUmVuZGVyTm9kZS5tICovOyB9OwotCQk5
Mzk4MTBGQTA4MjRCRjAxMDA4REYwMzggLyogV2ViVGV4dFJlcHJlc2VudGF0aW9uLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNTA4MURBNzAyQjZENEU0
MEFDQTJBQ0EgLyogV2ViVGV4dFJlcHJlc2VudGF0aW9uLm0gKi87IH07Ci0JCTkzOTgxMEZCMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJUZXh0Vmlldy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzUwODFEQTkwMkI2RDRFNDBBQ0EyQUNBIC8qIFdlYlRleHRW
aWV3Lm0gKi87IH07CiAJCTkzOTgxMEZDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVsZWdh
dGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODFE
QUIzMDNFQjBCMkQwMEE4MDE2NiAvKiBXZWJGb3JtRGVsZWdhdGUubSAqLzsgfTsKIAkJOTM5ODEw
RkQwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIubSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRTkxMDNGOURCQTEwM0NBMERF
NiAvKiBDYXJib25XaW5kb3dBZGFwdGVyLm0gKi87IH07CiAJCTkzOTgxMEZFMDgyNEJGMDEwMDhE
RjAzOCAvKiBDYXJib25XaW5kb3dDb250ZW50Vmlldy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOTMwM0Y5REJBMTAzQ0EwREU2IC8qIENhcmJv
bldpbmRvd0NvbnRlbnRWaWV3Lm0gKi87IH07CkBAIC0zNzAsMTAgKzM2Niw2IEBACiAJCTM1MDgx
RDk5MDJCNkQ0RDgwQUNBMkFDQSAvKiBXZWJJbWFnZVJlcHJlc2VudGF0aW9uLm0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViSW1hZ2VSZXBy
ZXNlbnRhdGlvbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJMzUwODFEOUEwMkI2RDREODBBQ0EyQUNBIC8qIFdlYkltYWdlVmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYklt
YWdlVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJMzUwODFEOUIwMkI2RDREODBBQ0EyQUNBIC8qIFdlYkltYWdlVmlldy5tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYklt
YWdlVmlldy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKLQkJMzUwODFEQTYwMkI2RDRFNDBBQ0EyQUNBIC8qIFdlYlRleHRSZXByZXNlbnRh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlRleHRSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJMzUwODFEQTcwMkI2RDRFNDBBQ0EyQUNBIC8qIFdl
YlRleHRSZXByZXNlbnRhdGlvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMub2JqYzsgcGF0aCA9IFdlYlRleHRSZXByZXNlbnRhdGlvbi5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJMzUwODFEQTgwMkI2
RDRFNDBBQ0EyQUNBIC8qIFdlYlRleHRWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVGV4dFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCTM1MDgxREE5MDJCNkQ0RTQw
QUNBMkFDQSAvKiBXZWJUZXh0Vmlldy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYlRleHRWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzNTA4MURBRTAyQjZENEY1MEFD
QTJBQ0EgLyogV2ViRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzVGMzU3N0YwMTk4QUFCODBBQ0ExNTIw
IC8qIEVuZ2xpc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnN0cmlu
Z3M7IG5hbWUgPSBFbmdsaXNoOyBwYXRoID0gRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJp
bmdzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJMzk0NDYwNkIwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTkxMSw3ICs5MDMsNiBAQAogCQkJCUY1MkNBNkJE
MDJERjlEMEYwMTg2MzVDQSAvKiBIVE1MICovLAogCQkJCUY1MkNBNkJFMDJERjlENDkwMTg2MzVD
QSAvKiBJbWFnZSAqLywKIAkJCQk1MUU5NEMwNzA2QzAyQ0EzMDBBOUIwOUUgLyogUERGICovLAot
CQkJCUY1MkNBNkJGMDJERjlENEQwMTg2MzVDQSAvKiBUZXh0ICovLAogCQkJCTgzNzM0MzVBMDYy
NEVFMEQwMEYzQjI4OSAvKiBXZWJBcmNoaXZlLmggKi8sCiAJCQkJODM3MzQzNUIwNjI0RUUwRDAw
RjNCMjg5IC8qIFdlYkFyY2hpdmUubSAqLywKIAkJCQk1MUY2ODY2RDAzNjYwNTczMDBDQTJEM0Eg
LyogV2ViTG9hZGVyLm0gKi8sCkBAIC05OTQsMTcgKzk4NSw2IEBACiAJCQluYW1lID0gSW1hZ2U7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTJDQTZCRjAyREY5RDREMDE4
NjM1Q0EgLyogVGV4dCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJMzUwODFEQTYwMkI2RDRFNDBBQ0EyQUNBIC8qIFdlYlRleHRSZXByZXNlbnRhdGlvbi5o
ICovLAotCQkJCTM1MDgxREE3MDJCNkQ0RTQwQUNBMkFDQSAvKiBXZWJUZXh0UmVwcmVzZW50YXRp
b24ubSAqLywKLQkJCQkzNTA4MURBODAyQjZENEU0MEFDQTJBQ0EgLyogV2ViVGV4dFZpZXcuaCAq
LywKLQkJCQkzNTA4MURBOTAyQjZENEU0MEFDQTJBQ0EgLyogV2ViVGV4dFZpZXcubSAqLywKLQkJ
CSk7Ci0JCQluYW1lID0gVGV4dDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJ
CUY1MkNBNkMwMDJERjlENzgwMTg2MzVDQSAvKiBEb3dubG9hZCAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMjEzLDggKzExOTMsNiBAQAogCQkJCTkzOTgx
MDVFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMDVGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJSZW5kZXJOb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTA2MDA4MjRCRjAxMDA4REYwMzggLyogV2ViUmVzb3VyY2VM
b2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDYxMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJUZXh0UmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDYy
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJUZXh0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5
ODEwNjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3RvcnlJdGVtUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwNjQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZvcm1EZWxlZ2F0ZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDY1MDgyNEJGMDEwMDhERjAzOCAvKiBD
YXJib25XaW5kb3dBZGFwdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE3ODQsOCArMTc2Miw2IEBA
CiAJCQkJOTM5ODEwRjcwODI0QkYwMTAwOERGMDM4IC8qIFdlYk1haW5SZXNvdXJjZUxvYWRlci5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjgwODI0QkYwMTAwOERGMDM4IC8qIFdlYlByZWZl
cmVuY2VzLm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBGOTA4MjRCRjAxMDA4REYwMzggLyog
V2ViUmVuZGVyTm9kZS5tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEwRkEwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlRleHRSZXByZXNlbnRhdGlvbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODEw
RkIwODI0QkYwMTAwOERGMDM4IC8qIFdlYlRleHRWaWV3Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5
Mzk4MTBGQzA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlLm0gaW4gU291cmNlcyAq
LywKIAkJCQk5Mzk4MTBGRDA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93QWRhcHRlci5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRkUwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldp
bmRvd0NvbnRlbnRWaWV3Lm0gaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMTQyNTcpCisrKyBXZWJL
aXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDYtMDUtMDkg
IEFuZGVycyBDYXJsc3NvbiAgPGFjYXJsc3NvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3
aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04ODA4CisgICAgICAgIFdlYkNvcmUgc2hvdWxkIGhhbmRs
ZSB0ZXh0IGZpbGVzCisKKyAgICAgICAgKiBXZWJLaXQuZXhwOgorICAgICAgICBSZW1vdmUgV2Vi
VGV4dFZpZXcuCisgICAgICAgIAorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBHZXQgcmlkIG9mIFdlYlRleHRWaWV3IGFuZCBXZWJUZXh0UmVwcmVz
ZW50YXRpb24uCisgICAgICAgIAorICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNvdXJjZS5tOgor
ICAgICAgICAoK1tXZWJEYXRhU291cmNlIF9yZXBUeXBlc0FsbG93SW1hZ2VUeXBlT21pc3Npb246
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXcubToKKyAgICAgICAgKCtbV2ViRnJh
bWVWaWV3IF92aWV3VHlwZXNBbGxvd0ltYWdlVHlwZU9taXNzaW9uOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViSFRNTFZpZXcubToKKyAgICAgICAgVGhlIHRleHQgTUlNRSB0eXBlcyBhcmUgbm93
IGhhbmRsZWQgYnkgV2ViSFRNTFZpZXcuCisgICAgICAgIAorICAgICAgICAoK1tXZWJIVE1MVmll
dyB1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXNdKToKKyAgICAgICAgTmV3IGZ1bmN0aW9uLCBtb3Zl
ZCBoZXJlIGZyb20gV2ViVGV4dFZpZXcuCisgICAgICAgIAorICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFZpZXdQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJUZXh0UmVwcmVzZW50YXRp
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRSZXByZXNlbnRhdGlvbi5t
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dFZpZXcuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlRleHRWaWV3Lm06IFJlbW92ZWQuCisgICAgICAgIAorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tOgorICAgICAgICAoK1tXZWJWaWV3IF92aWV3Q2xhc3M6YW5k
UmVwcmVzZW50YXRpb25DbGFzczpmb3JNSU1FVHlwZTpdKToKKyAgICAgICAgTm93IHNwZWNpYWwt
Y2FzZSBXZWJIVE1MVmlldyBpbnN0ZWFkIG9mIFdlYlRleHRWaWV3IGZvciBNSU1FIHR5cGVzCisg
ICAgICAgIHRoYXQgc2hvdWxkbid0IGJlIHNob3duLgorCiAyMDA2LTA1LTA5ICBNYWNpZWogU3Rh
Y2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgQW5k
ZXJzLgpJbmRleDogV2ViS2l0L1dlYlZpZXcvV2ViVGV4dFJlcHJlc2VudGF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L1dlYlZpZXcvV2ViVGV4dFJlcHJlc2VudGF0aW9uLmgJKHJldmlzaW9u
IDE0MjU3KQorKysgV2ViS2l0L1dlYlZpZXcvV2ViVGV4dFJlcHJlc2VudGF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KLQotQHByb3RvY29sIFdlYkRvY3VtZW50UmVwcmVzZW50YXRpb247
Ci0KLUBpbnRlcmZhY2UgV2ViVGV4dFJlcHJlc2VudGF0aW9uIDogTlNPYmplY3QgPFdlYkRvY3Vt
ZW50UmVwcmVzZW50YXRpb24+Ci17Ci0gICAgTlNTdHJpbmcgKlJURlNvdXJjZTsKLSAgICBCT09M
IGhhc1JURlNvdXJjZTsKLX0KLSsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXM7Ci1AZW5k
CkluZGV4OiBXZWJLaXQvV2ViVmlldy9XZWJUZXh0UmVwcmVzZW50YXRpb24ubQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViVmlldy9XZWJUZXh0UmVwcmVzZW50YXRpb24ubQkocmV2aXNpb24gMTQy
NTcpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJUZXh0UmVwcmVzZW50YXRpb24ubQkod29ya2luZyBj
b3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIldlYlRleHRSZXBy
ZXNlbnRhdGlvbi5oIgotCi0jaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZVByaXZhdGUuaD4K
LSNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lVmll
dy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlRleHRWaWV3Lmg+Ci0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vTlNVUkxSZXNwb25zZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXNzZXJ0aW9ucy5o
PgotCi1AaW1wbGVtZW50YXRpb24gV2ViVGV4dFJlcHJlc2VudGF0aW9uCi0KLSsgKE5TQXJyYXkg
KilzdXBwb3J0ZWRNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0czoKLSAgICAgICAgICAgIEAidGV4dC8iLAotICAgICAgICAgICAgQCJhcHBsaWNhdGlvbi94
LWphdmFzY3JpcHQiLAotICAgICAgICAgICAgbmlsXTsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgW1JURlNvdXJjZSByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBicm9rZW4uIFtkYXRhU291cmNlIGRhdGFdIGlzIGluY29tcGxldGUg
YXQgdGhpcyBwb2ludC4KLSAgICBoYXNSVEZTb3VyY2UgPSBbW1tkYXRhU291cmNlIHJlc3BvbnNl
XSBNSU1FVHlwZV0gaXNFcXVhbFRvU3RyaW5nOkAidGV4dC9ydGYiXTsKLSAgICBpZiAoaGFzUlRG
U291cmNlKXsKLSAgICAgICAgUlRGU291cmNlID0gW1tkYXRhU291cmNlIF9zdHJpbmdXaXRoRGF0
YTogW2RhdGFTb3VyY2UgZGF0YV1dIHJldGFpbl07Ci0gICAgfQotfQotCi0tICh2b2lkKXJlY2Vp
dmVkRGF0YTooTlNEYXRhICopZGF0YSB3aXRoRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRh
dGFTb3VyY2UKLXsKLSAgICBXZWJUZXh0VmlldyAqdmlldyA9IChXZWJUZXh0VmlldyAqKVtbW2Rh
dGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBBU1NFUlQo
W3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViVGV4dFZpZXcgY2xhc3NdXSk7Ci0gICAgW3ZpZXcgYXBw
ZW5kUmVjZWl2ZWREYXRhOmRhdGEgZnJvbURhdGFTb3VyY2U6ZGF0YVNvdXJjZV07Ci19Ci0KLS0g
KHZvaWQpcmVjZWl2ZWRFcnJvcjooTlNFcnJvciAqKWVycm9yIHdpdGhEYXRhU291cmNlOihXZWJE
YXRhU291cmNlICopZGF0YVNvdXJjZQotewotCi19Ci0KLS0gKHZvaWQpZmluaXNoZWRMb2FkaW5n
V2l0aERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCi17Ci0gICAgV2ViVGV4
dFZpZXcgKnZpZXcgPSAoV2ViVGV4dFZpZXcgKilbW1tkYXRhU291cmNlIHdlYkZyYW1lXSBmcmFt
ZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgQVNTRVJUKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dl
YlRleHRWaWV3IGNsYXNzXV0pOwotICAgIFt2aWV3IGZsdXNoUmVjZWl2ZWREYXRhXTsKLX0KLQot
LSAoQk9PTCljYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UKLXsKLSAgICByZXR1cm4gaGFzUlRGU291
cmNlOwotfQotCi0tIChOU1N0cmluZyAqKWRvY3VtZW50U291cmNlCi17Ci0gICAgcmV0dXJuIFJU
RlNvdXJjZTsKLX0KLQotLSAoTlNTdHJpbmcgKil0aXRsZQotewotICAgIHJldHVybiBuaWw7Ci19
Ci0KLQotQGVuZApJbmRleDogV2ViS2l0L1dlYlZpZXcvV2ViVmlldy5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9XZWJWaWV3L1dlYlZpZXcubQkocmV2aXNpb24gMTQyNTcpCisrKyBXZWJLaXQvV2Vi
Vmlldy9XZWJWaWV3Lm0JKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDYgQEAKICNpbXBvcnQg
IldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGUuaCIKICNpbXBvcnQgIldlYlNjcmlwdERlYnVnRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0
ICJXZWJUZXh0UmVwcmVzZW50YXRpb24uaCIKLSNpbXBvcnQgIldlYlRleHRWaWV3LmgiCiAjaW1w
b3J0ICJXZWJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgog
I2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTZXQuaD4KQEAgLTUxMiwxMCArNTEwLDEwIEBAIHN0
YXRpYyBib29sIGRlYnVnV2lkZ2V0ID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKHZpZXdD
bGFzcyAmJiByZXBDbGFzcykgewotICAgICAgICAvLyBTcGVjaWFsLWNhc2UgV2ViVGV4dFZpZXcg
Zm9yIHRleHQgdHlwZXMgdGhhdCBzaG91bGRuJ3QgYmUgc2hvd24uCi0gICAgICAgIGlmICh2aWV3
Q2xhc3MgPT0gW1dlYlRleHRWaWV3IGNsYXNzXSAmJgotICAgICAgICAgICAgcmVwQ2xhc3MgPT0g
W1dlYlRleHRSZXByZXNlbnRhdGlvbiBjbGFzc10gJiYKLSAgICAgICAgICAgIFtbV2ViVGV4dFZp
ZXcgdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzXSBjb250YWluc09iamVjdDpNSU1FVHlwZV0pIHsK
KyAgICAgICAgLy8gU3BlY2lhbC1jYXNlIFdlYkhUTUxWaWV3IGZvciB0ZXh0IHR5cGVzIHRoYXQg
c2hvdWxkbid0IGJlIHNob3duLgorICAgICAgICBpZiAodmlld0NsYXNzID09IFtXZWJIVE1MVmll
dyBjbGFzc10gJiYKKyAgICAgICAgICAgIHJlcENsYXNzID09IFtXZWJIVE1MUmVwcmVzZW50YXRp
b24gY2xhc3NdICYmCisgICAgICAgICAgICBbW1dlYkhUTUxWaWV3IHVuc3VwcG9ydGVkVGV4dE1J
TUVUeXBlc10gY29udGFpbnNPYmplY3Q6TUlNRVR5cGVdKSB7CiAgICAgICAgICAgICByZXR1cm4g
Tk87CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZDbGFzcykKSW5kZXg6IFdlYktpdC9XZWJWaWV3
L1dlYkZyYW1lVmlldy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lVmll
dy5tCShyZXZpc2lvbiAxNDI1NykKKysrIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lVmlldy5tCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAjaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMu
aCIKICNpbXBvcnQgIldlYlBERlZpZXcuaCIKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5o
IgotI2ltcG9ydCAiV2ViVGV4dFZpZXcuaCIKICNpbXBvcnQgIldlYlZpZXdGYWN0b3J5LmgiCiAj
aW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXdQcml2YXRlLmgiCkBA
IC0yNTgsNyArMjU3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogICAgIGlmICghdmlld1R5cGVzKSB7CiAgICAgICAgIHZpZXdUeXBlcyA9IFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgICAgIGFkZFR5cGVzRnJvbUNsYXNzKHZpZXdU
eXBlcywgW1dlYkhUTUxWaWV3IGNsYXNzXSwgW1dlYkhUTUxWaWV3IHN1cHBvcnRlZE1JTUVUeXBl
c10pOwotICAgICAgICBhZGRUeXBlc0Zyb21DbGFzcyh2aWV3VHlwZXMsIFtXZWJUZXh0VmlldyBj
bGFzc10sIFtXZWJUZXh0VmlldyBzdXBwb3J0ZWRNSU1FVHlwZXNdKTsKIAogICAgICAgICAvLyBT
aW5jZSB0aGlzIGlzIGEgInNlY3JldCBkZWZhdWx0IiB3ZSBkb24ndCBib3RoIHJlZ2lzdGVyaW5n
IGl0LgogICAgICAgICBCT09MIG9taXRQREZTdXBwb3J0ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdE9taXRQREZTdXBwb3J0Il07Cklu
ZGV4OiBXZWJLaXQvV2ViVmlldy9XZWJEYXRhU291cmNlLm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tCShyZXZpc2lvbiAxNDI1NykKKysrIFdlYktpdC9XZWJW
aWV3L1dlYkRhdGFTb3VyY2UubQkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQAogI2lt
cG9ydCA8V2ViS2l0L1dlYlBERlJlcHJlc2VudGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
UmVzb3VyY2VMb2FkRGVsZWdhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJSZXNvdXJjZVByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJUZXh0UmVwcmVzZW50YXRpb24uaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJVbmFyY2hpdmluZ1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld0lu
dGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAgLTU2OCw3ICs1
NjcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgaWYg
KCFyZXBUeXBlcykgewogICAgICAgICByZXBUeXBlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBh
bGxvY10gaW5pdF07CiAgICAgICAgIGFkZFR5cGVzRnJvbUNsYXNzKHJlcFR5cGVzLCBbV2ViSFRN
TFJlcHJlc2VudGF0aW9uIGNsYXNzXSwgW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRN
SU1FVHlwZXNdKTsKLSAgICAgICAgYWRkVHlwZXNGcm9tQ2xhc3MocmVwVHlwZXMsIFtXZWJUZXh0
UmVwcmVzZW50YXRpb24gY2xhc3NdLCBbV2ViVGV4dFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE1J
TUVUeXBlc10pOwogCiAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSAic2VjcmV0IGRlZmF1bHQi
IHdlIGRvbid0IGJvdGggcmVnaXN0ZXJpbmcgaXQuCiAgICAgICAgIEJPT0wgb21pdFBERlN1cHBv
cnQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAi
V2ViS2l0T21pdFBERlN1cHBvcnQiXTsKSW5kZXg6IFdlYktpdC9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZpZXcvV2ViSFRNTFZpZXcubQkocmV2aXNpb24g
MTQyNTcpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJIVE1MVmlldy5tCSh3b3JraW5nIGNvcHkpCkBA
IC02OTAsNiArNjkwLDI0IEBAIHZvaWQgKl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0
cigKICAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNd
OwogfQogCisrIChOU0FycmF5ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzCit7CisgICAgcmV0
dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6CisgICAgICAgIEAidGV4dC9jYWxlbmRhciIs
ICAgICAgIC8vIGlDYWwKKyAgICAgICAgQCJ0ZXh0L3gtY2FsZW5kYXIiLAorICAgICAgICBAInRl
eHQveC12Y2FsZW5kYXIiLAorICAgICAgICBAInRleHQvdmNhbGVuZGFyIiwKKyAgICAgICAgQCJ0
ZXh0L3ZjYXJkIiwgICAgICAgICAgLy8gdkNhcmQKKyAgICAgICAgQCJ0ZXh0L3gtdmNhcmQiLAor
ICAgICAgICBAInRleHQvZGlyZWN0b3J5IiwKKyAgICAgICAgQCJ0ZXh0L2xkaWYiLCAgICAgICAg
ICAgLy8gTmV0c2NhcGUgQWRkcmVzcyBCb29rCisgICAgICAgIEAidGV4dC9xaWYiLCAgICAgICAg
ICAgIC8vIFF1aWNrZW4KKyAgICAgICAgQCJ0ZXh0L3gtcWlmIiwKKyAgICAgICAgQCJ0ZXh0L3gt
Y3N2IiwgICAgICAgICAgLy8gQ1NWIChmb3IgQWRkcmVzcyBCb29rIGFuZCBNaWNyb3NvZnQgT3V0
bG9vaykKKyAgICAgICAgQCJ0ZXh0L3gtdmNmIiwgICAgICAgICAgLy8gdkNhcmQgdHlwZSB1c2Vk
IGluIFN1biBhZmZpbml0eSBhcHAKKyAgICAgICAgbmlsXTsKK30KKwogKyAodm9pZClfcG9zdEZs
YWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKIHsKICAgICBOU0V2
ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVk
CkluZGV4OiBXZWJLaXQvV2ViVmlldy9XZWJUZXh0Vmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9XZWJWaWV3L1dlYlRleHRWaWV3LmgJKHJldmlzaW9uIDE0MjU3KQorKysgV2ViS2l0L1dlYlZp
ZXcvV2ViVGV4dFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgPFdlYktpdC9XZWJEb2N1bWVudEludGVybmFsLmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvV2ViU2VhcmNoYWJsZVRleHRWaWV3Lmg+Ci0KLUBjbGFzcyBXZWJEYXRhU291cmNlOwot
QGNsYXNzIFdlYkNvcmVUZXh0RGVjb2RlcjsKLQotQGludGVyZmFjZSBXZWJUZXh0VmlldyA6IFdl
YlNlYXJjaGFibGVUZXh0VmlldyA8V2ViRG9jdW1lbnRWaWV3LCBXZWJEb2N1bWVudEVsZW1lbnQ+
Ci17Ci0gICAgZmxvYXQgX3RleHRTaXplTXVsdGlwbGllcjsKLSAgICBXZWJDb3JlVGV4dERlY29k
ZXIgKl9kZWNvZGVyOwotICAgIFdlYkRhdGFTb3VyY2UgKl9kYXRhU291cmNlOwotfQotCi0rIChO
U0FycmF5ICopc3VwcG9ydGVkTUlNRVR5cGVzOwotKyAoTlNBcnJheSAqKXVuc3VwcG9ydGVkVGV4
dE1JTUVUeXBlczsKLS0gKHZvaWQpc2V0Rml4ZWRXaWR0aEZvbnQ7Ci0KLS0gKHZvaWQpYXBwZW5k
UmVjZWl2ZWREYXRhOihOU0RhdGEgKilkYXRhIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNl
ICopZGF0YVNvdXJjZTsKLS0gKHZvaWQpZmx1c2hSZWNlaXZlZERhdGE7Ci0KLUBlbmQKSW5kZXg6
IFdlYktpdC9XZWJWaWV3L1dlYlRleHRWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZp
ZXcvV2ViVGV4dFZpZXcubQkocmV2aXNpb24gMTQyNTcpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJU
ZXh0Vmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgPFdlYktpdC9XZWJUZXh0Vmlldy5oPgotCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVCcmlkZ2UuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJEYXRhU291cmNlUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkRv
Y3VtZW50SW50ZXJuYWwuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KLSNp
bXBvcnQgPFdlYktpdC9XZWJGcmFtZUludGVybmFsLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViRnJh
bWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViTlNPYmplY3RFeHRyYXMuaD4KLSNpbXBvcnQg
PFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYk5TVmlld0V4dHJh
cy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VzLmg+Ci0jaW1wb3J0IDxXZWJLaXQv
V2ViVmlld0ludGVybmFsLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KLSNp
bXBvcnQgPFdlYktpdC9XZWJUZXh0UmVwcmVzZW50YXRpb24uaD4KLQotI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlVGV4dERlY29kZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRleHRSZW5k
ZXJlci5oPgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KLQotQGludGVy
ZmFjZSBOU1RleHRWaWV3IChBcHBLaXRTZWNyZXQpCi0rIChOU1VSTCAqKV9VUkxGb3JTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlRleHRWaWV3IChGb3J3
YXJkRGVjbGFyYXRpb25zKQotLSAodm9pZClfdXBkYXRlVGV4dFNpemVNdWx0aXBsaWVyOwotQGVu
ZAotCi1AaW50ZXJmYWNlIFdlYlRleHRWaWV3IChUZXh0U2l6aW5nKSA8X1dlYkRvY3VtZW50VGV4
dFNpemluZz4KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRleHRWaWV3Ci0KLSsgKE5TQXJy
YXkgKilzdXBwb3J0ZWRNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW1dlYlRleHRSZXByZXNlbnRh
dGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNdOwotfQotCi0rIChOU0FycmF5ICopdW5zdXBwb3J0ZWRU
ZXh0TUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0g
ICAgICAgIEAidGV4dC9jYWxlbmRhciIsICAgICAgIC8vIGlDYWwKLSAgICAgICAgQCJ0ZXh0L3gt
Y2FsZW5kYXIiLAotICAgICAgICBAInRleHQveC12Y2FsZW5kYXIiLAotICAgICAgICBAInRleHQv
dmNhbGVuZGFyIiwKLSAgICAgICAgQCJ0ZXh0L3ZjYXJkIiwgICAgICAgICAgLy8gdkNhcmQKLSAg
ICAgICAgQCJ0ZXh0L3gtdmNhcmQiLAotICAgICAgICBAInRleHQvZGlyZWN0b3J5IiwKLSAgICAg
ICAgQCJ0ZXh0L2xkaWYiLCAgICAgICAgICAgLy8gTmV0c2NhcGUgQWRkcmVzcyBCb29rCi0gICAg
ICAgIEAidGV4dC9xaWYiLCAgICAgICAgICAgIC8vIFF1aWNrZW4KLSAgICAgICAgQCJ0ZXh0L3gt
cWlmIiwKLSAgICAgICAgQCJ0ZXh0L3gtY3N2IiwgICAgICAgICAgLy8gQ1NWIChmb3IgQWRkcmVz
cyBCb29rIGFuZCBNaWNyb3NvZnQgT3V0bG9vaykKLSAgICAgICAgQCJ0ZXh0L3gtdmNmIiwgICAg
ICAgICAgLy8gdkNhcmQgdHlwZSB1c2VkIGluIFN1biBhZmZpbml0eSBhcHAKLSAgICAgICAgbmls
XTsKLX0KLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXTsKLSAgICBpZiAoc2VsZikgewotICAgICAgICBf
dGV4dFNpemVNdWx0aXBsaWVyID0gMS4wOwotICAgICAgICBbc2VsZiBzZXRBdXRvcmVzaXppbmdN
YXNrOk5TVmlld1dpZHRoU2l6YWJsZV07Ci0gICAgICAgIFtzZWxmIHNldEVkaXRhYmxlOk5PXTsK
LSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0b3I6QHNlbGVjdG9yKGRlZmF1bHRzQ2hhbmdlZDopCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3Q6bmlsXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Ci0gICAgW19kZWNvZGVyIHJlbGVhc2VdOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Ci0gICAgW3N1
cGVyIGZpbmFsaXplXTsKLX0KLQotLSAoZmxvYXQpX3RleHRTaXplTXVsdGlwbGllckZyb21XZWJW
aWV3Ci17Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB0aGUg
c3VidmlldyBvZiBhIFdlYlZpZXcgYXQgYW55IGdpdmVuIHRpbWUuCi0gICAgV2ViVmlldyAqd2Vi
VmlldyA9IFtfZGF0YVNvdXJjZSBfd2ViVmlld107Ci0gICAgcmV0dXJuIHdlYlZpZXcgPyBbd2Vi
VmlldyB0ZXh0U2l6ZU11bHRpcGxpZXJdIDogMS4wOwotfQotCi0tIChXZWJQcmVmZXJlbmNlcyAq
KV9wcmVmZXJlbmNlcwotewotICAgIC8vIEhhbmRsZSBuaWwgcmVzdWx0IGJlY2F1c2Ugd2UgbWln
aHQgbm90IGJlIGluIGEgV2ViVmlldyBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBXZWJQcmVmZXJl
bmNlcyAqcHJlZmVyZW5jZXMgPSBbW19kYXRhU291cmNlIF93ZWJWaWV3XSBwcmVmZXJlbmNlc107
Ci0gICAgaWYgKHByZWZlcmVuY2VzID09IG5pbCkgewotICAgICAgICBwcmVmZXJlbmNlcyA9IFtX
ZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXTsKLSAgICB9Ci0gICAgcmV0dXJuIHBy
ZWZlcmVuY2VzOwotfQotCi0KLS0gKHZvaWQpc2V0Rml4ZWRXaWR0aEZvbnQKLXsKLSAgICBXZWJQ
cmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbc2VsZiBfcHJlZmVyZW5jZXNdOwotICAgIE5TRm9u
dCogZm9udCA9IFdlYkNvcmVGaW5kRm9udChbcHJlZmVyZW5jZXMgZml4ZWRGb250RmFtaWx5XSwg
MCwgW3ByZWZlcmVuY2VzIGRlZmF1bHRGaXhlZEZvbnRTaXplXSAqIF90ZXh0U2l6ZU11bHRpcGxp
ZXIpOwotICAgIGlmIChmb250KQotICAgICAgICBbc2VsZiBzZXRGb250OmZvbnRdOwotfQotCi0v
LyBUaGlzIG1ldGhvZCB3YXMgYm9ycm93ZWQgZnJvbSBNYWlsIGFuZCBjaGFuZ2VkIHRvIHVzZSBy
YXRpb3MgcmF0aGVyIHRoYW4gZGVsdGFzLgotLy8gQWxzbywgSSByZW1vdmVkIHRoZSBpc0VkaXRh
YmxlIGNsYXVzZSBzaW5jZSBSVEYgZGlzcGxheWVkIGluIFdlYktpdCBpcyBuZXZlciBlZGl0YWJs
ZS4KLS0gKHZvaWQpX2FkanVzdFJpY2hUZXh0Rm9udFNpemVCeVJhdGlvOihmbG9hdClyYXRpbyAK
LXsKLSAgICBOU1RleHRTdG9yYWdlICpzdG9yYWdlID0gW3NlbGYgdGV4dFN0b3JhZ2VdOwotICAg
IE5TUmFuZ2UgcmVtYWluaW5nUmFuZ2UgPSBOU01ha2VSYW5nZSgwLCBbc3RvcmFnZSBsZW5ndGhd
KTsKLSAgICAKLSAgICB3aGlsZSAocmVtYWluaW5nUmFuZ2UubGVuZ3RoID4gMCkgewotICAgICAg
ICBOU1JhbmdlIGVmZmVjdGl2ZVJhbmdlOwotICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc3RvcmFn
ZSBhdHRyaWJ1dGU6TlNGb250QXR0cmlidXRlTmFtZSBhdEluZGV4OnJlbWFpbmluZ1JhbmdlLmxv
Y2F0aW9uIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTomZWZmZWN0aXZlUmFuZ2UgaW5SYW5nZTpyZW1h
aW5pbmdSYW5nZV07Ci0gICAgICAgIAotICAgICAgICBpZiAoZm9udCkgewotICAgICAgICAgICAg
Zm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6Zm9u
dCB0b1NpemU6W2ZvbnQgcG9pbnRTaXplXSpyYXRpb107Ci0gICAgICAgICAgICBbc3RvcmFnZSBh
ZGRBdHRyaWJ1dGU6TlNGb250QXR0cmlidXRlTmFtZSB2YWx1ZTpmb250IHJhbmdlOmVmZmVjdGl2
ZVJhbmdlXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoTlNNYXhSYW5nZShlZmZlY3RpdmVSYW5n
ZSkgPCBOU01heFJhbmdlKHJlbWFpbmluZ1JhbmdlKSkgewotICAgICAgICAgICAgcmVtYWluaW5n
UmFuZ2UubGVuZ3RoID0gTlNNYXhSYW5nZShyZW1haW5pbmdSYW5nZSkgLSBOU01heFJhbmdlKGVm
ZmVjdGl2ZVJhbmdlKTsKLSAgICAgICAgICAgIHJlbWFpbmluZ1JhbmdlLmxvY2F0aW9uID0gTlNN
YXhSYW5nZShlZmZlY3RpdmVSYW5nZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAodm9pZClfdXBkYXRlVGV4dFNpemVNdWx0
aXBsaWVyCi17Ci0gICAgZmxvYXQgbmV3TXVsdGlwbGllciA9IFtzZWxmIF90ZXh0U2l6ZU11bHRp
cGxpZXJGcm9tV2ViVmlld107Ci0gICAgaWYgKG5ld011bHRpcGxpZXIgPT0gX3RleHRTaXplTXVs
dGlwbGllcikgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZsb2F0IG9sZE11
bHRpcGxpZXIgPSBfdGV4dFNpemVNdWx0aXBsaWVyOwotICAgIF90ZXh0U2l6ZU11bHRpcGxpZXIg
PSBuZXdNdWx0aXBsaWVyOwotICAgIAotICAgIGlmIChbc2VsZiBpc1JpY2hUZXh0XSkgewotICAg
ICAgICBbc2VsZiBfYWRqdXN0UmljaFRleHRGb250U2l6ZUJ5UmF0aW86bmV3TXVsdGlwbGllci9v
bGRNdWx0aXBsaWVyXTsKLSAgICB9IGVsc2UgewotICAgICAgICBbc2VsZiBzZXRGaXhlZFdpZHRo
Rm9udF07Ci0gICAgfQotfQotCi0tICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2Ug
KilkYXRhU291cmNlCi17Ci0gICAgX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlOwotICAgIAotICAg
IFtzZWxmIHNldFJpY2hUZXh0OltbW2RhdGFTb3VyY2UgcmVzcG9uc2VdIE1JTUVUeXBlXSBpc0Vx
dWFsVG9TdHJpbmc6QCJ0ZXh0L3J0ZiJdXTsKLSAgICAKLSAgICBmbG9hdCBvbGRNdWx0aXBsaWVy
ID0gX3RleHRTaXplTXVsdGlwbGllcjsKLSAgICBbc2VsZiBfdXBkYXRlVGV4dFNpemVNdWx0aXBs
aWVyXTsKLSAgICAvLyBJZiB0aGUgbXVsdGlwbGllciBkaWRuJ3QgY2hhbmdlLCB3ZSBzdGlsbCBu
ZWVkIHRvIHVwZGF0ZSB0aGUgZml4ZWQtd2lkdGggZm9udC4KLSAgICAvLyBJZiB0aGUgbXVsdGlw
bGllciBkaWQgY2hhbmdlLCB0aGlzIHdhcyBhbHJlYWR5IGhhbmRsZWQuCi0gICAgaWYgKF90ZXh0
U2l6ZU11bHRpcGxpZXIgPT0gb2xkTXVsdGlwbGllciAmJiAhW3NlbGYgaXNSaWNoVGV4dF0pCi0g
ICAgICAgIFtzZWxmIHNldEZpeGVkV2lkdGhGb250XTsKLX0KLQotLy8gV2UgaGFuZGxlIGluY29t
aW5nIGRhdGEgaGVyZSByYXRoZXIgdGhhbiBpbiBkYXRhU291cmNlVXBkYXRlZCBiZWNhdXNlIHdl
Ci0vLyBuZWVkIHRvIGRpc3Rpbmd1aXNoIHRoZSBsYXN0IGh1bmsgb2YgcmVjZWl2ZWQgZGF0YSBm
cm9tIHRoZSB3aG9sZSBnbG9iCi0vLyBvZiBkYXRhIHJlY2VpdmVkIHNvIGZhci4gVGhpcyBpcyBh
IGJhZCBkZXNpZ24gaW4gdGhhdCBpdCByZXF1aXJlcwotLy8gV2ViVGV4dFJlcHJlc2VudGF0aW9u
IHRvIGtub3cgdGhhdCBpdCdzIHZpZXcgaXMgYSBXZWJUZXh0VmlldywgYnV0IHRoaXMKLS8vIGJh
ZCBkZXNpZ24gYWxyZWFkeSBleGlzdGVkLgotLSAodm9pZClhcHBlbmRSZWNlaXZlZERhdGE6KE5T
RGF0YSAqKWRhdGEgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCi17
Ci0gICAgaWYgKFtzZWxmIGlzUmljaFRleHRdKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgdHJ5IHRvIHByb2dyZXNzaXZlbHkgbG9hZCBSVEYuCi0gICAgICAgIFtzZWxmIHJlcGxhY2VD
aGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbW3NlbGYgc3RyaW5nXSBsZW5ndGhdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhSVEY6W2RhdGFTb3VyY2UgZGF0YV1d
OwotICAgICAgICBpZiAoX3RleHRTaXplTXVsdGlwbGllciAhPSAxLjApIHsKLSAgICAgICAgICAg
IFtzZWxmIF9hZGp1c3RSaWNoVGV4dEZvbnRTaXplQnlSYXRpbzpfdGV4dFNpemVNdWx0aXBsaWVy
XTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghX2RlY29kZXIpIHsKLSAg
ICAgICAgICAgIE5TU3RyaW5nICp0ZXh0RW5jb2RpbmdOYW1lID0gW2RhdGFTb3VyY2UgdGV4dEVu
Y29kaW5nTmFtZV07Ci0gICAgICAgICAgICBpZiAodGV4dEVuY29kaW5nTmFtZSA9PSBuaWwpCi0g
ICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IFtbc2VsZiBfcHJlZmVyZW5jZXNdIGRl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lXTsKLQotICAgICAgICAgICAgX2RlY29kZXIgPSBbW1dlYkNv
cmVUZXh0RGVjb2RlciBhbGxvY10gaW5pdFdpdGhFbmNvZGluZ05hbWU6dGV4dEVuY29kaW5nTmFt
ZV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtzZWxmIHJlcGxhY2VDaGFyYWN0ZXJz
SW5SYW5nZTpOU01ha2VSYW5nZShbW3NlbGYgc3RyaW5nXSBsZW5ndGhdLCAwKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhTdHJpbmc6W19kZWNvZGVyIGRlY29kZURhdGE6ZGF0YV1d
OwotICAgIH0KLX0KLQotLSAodm9pZClmbHVzaFJlY2VpdmVkRGF0YQotewotICAgIGlmIChbc2Vs
ZiBpc1JpY2hUZXh0XSkgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBwcm9n
cmVzc2l2ZWx5IGxvYWQgUlRGLgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChfZGVjb2RlcikK
LSAgICAgICAgICAgIFtzZWxmIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShb
W3NlbGYgc3RyaW5nXSBsZW5ndGhdLCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
dGhTdHJpbmc6W19kZWNvZGVyIGZsdXNoXV07Ci0gICAgfQotfQotCi0KLS0gKHZvaWQpZGF0YVNv
dXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCi17Ci19Ci0KLS0gKHZvaWQp
dmlld0RpZE1vdmVUb1N1cGVydmlldwotewotICAgIE5TVmlldyAqc3VwZXJ2aWV3ID0gW3NlbGYg
c3VwZXJ2aWV3XTsKLSAgICBpZiAoc3VwZXJ2aWV3KSB7Ci0gICAgICAgIFtzZWxmIHNldEZyYW1l
U2l6ZTpOU01ha2VTaXplKFtzdXBlcnZpZXcgZnJhbWVdLnNpemUud2lkdGgsIFtzZWxmIGZyYW1l
XS5zaXplLmhlaWdodCldOwotICAgIH0KLX0KLQotLSAodm9pZClzZXROZWVkc0xheW91dDooQk9P
TClmbGFnCi17Ci19Ci0KLS0gKHZvaWQpbGF5b3V0Ci17Ci0gICAgW3NlbGYgc2l6ZVRvRml0XTsK
LX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5TV2luZG93ICopaG9zdFdp
bmRvdwotewotCi19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKLXsKLQotfQot
Ci0tICh2b2lkKWRlZmF1bHRzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
LXsKLSAgICAvLyBXZSB1c2UgdGhlIGRlZmF1bHQgZml4ZWQtd2lkdGggZm9udCwgYnV0IHJpY2gg
dGV4dAotICAgIC8vIHBhZ2VzIHNwZWNpZnkgdGhlaXIgb3duIGZvbnRzCi0gICAgaWYgKCFbc2Vs
ZiBpc1JpY2hUZXh0XSkgewotICAgICAgICBbc2VsZiBzZXRGaXhlZFdpZHRoRm9udF07Ci0gICAg
fQotfQotCi0tIChCT09MKWNhblRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbgotewotICAgIHJl
dHVybiBbc2VsZiBpc1NlbGVjdGFibGVdICYmIFtzZWxmIHNlbGVjdGVkUmFuZ2VdLmxlbmd0aCAm
JiAhW3NlbGYgaGFzTWFya2VkVGV4dF07Ci19Ci0KLQotLSAoSUJBY3Rpb24pdGFrZUZpbmRTdHJp
bmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBpZiAoIVtzZWxmIGNhblRha2VGaW5k
U3RyaW5nRnJvbVNlbGVjdGlvbl0pIHsKLSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm90ZTogY2FuJ3QgdXNlIHdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkOnR5cGU6IGhlcmUsIHRob3VnaCBpdCBzZWVtcyBlcXVpdmFsZW50LCBiZWNhdXNl
Ci0gICAgLy8gaXQgZG9lc24ndCBkZWNsYXJlIHRoZSB0eXBlcyB0byB0aGUgcGFzdGVib2FyZCBh
bmQgdGh1cyBkb2Vzbid0IGJ1bXAgdGhlIGNoYW5nZSBjb3VudAotICAgIFtzZWxmIHdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRmlu
ZFBib2FyZF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlczpbTlNBcnJheSBh
cnJheVdpdGhPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93
bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW1tzZWxmIG5leHRSZXNwb25kZXJdIGtleURvd246
ZXZlbnRdOwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBbW3Nl
bGYgbmV4dFJlc3BvbmRlcl0ga2V5VXA6ZXZlbnRdOwotfQotCi0tIChXZWJGcmFtZSAqKV93ZWJG
cmFtZQotewotICAgIHJldHVybiBbW1tfZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XSB3
ZWJGcmFtZV07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbGVtZW50QXRXaW5kb3dQb2ludDoo
TlNQb2ludCl3aW5kb3dQb2ludAotewotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF93ZWJG
cmFtZV07Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICAKLSAgICBOU1BvaW50IHNjcmVlblBvaW50
ID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF07Ci0gICAg
Qk9PTCBpc1BvaW50U2VsZWN0ZWQgPSBOU0xvY2F0aW9uSW5SYW5nZShbc2VsZiBjaGFyYWN0ZXJJ
bmRleEZvclBvaW50OnNjcmVlblBvaW50XSwgW3NlbGYgc2VsZWN0ZWRSYW5nZV0pOwotICAgIHJl
dHVybiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDppc1BvaW50U2VsZWN0ZWRdLCBXZWJFbGVtZW50SXNT
ZWxlY3RlZEtleSwKLSAgICAgICAgZnJhbWUsIFdlYkVsZW1lbnRGcmFtZUtleSwgbmlsXTsKLX0K
LQotLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKLXsKLSAg
ICByZXR1cm4gW3NlbGYgX2VsZW1lbnRBdFdpbmRvd1BvaW50OltzZWxmIGNvbnZlcnRQb2ludDpw
b2ludCB0b1ZpZXc6bmlsXV07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50
OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93Q29udGVudDooQk9PTClhbGxvdwotewotICAgIHJl
dHVybiBbc2VsZiBlbGVtZW50QXRQb2ludDpwb2ludF07Ci19Ci0KLS0gKEJPT0wpZHJhZ1NlbGVj
dGlvbldpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50IG9mZnNldDooTlNTaXplKW1vdXNlT2Zmc2V0
IHNsaWRlQmFjazooQk9PTClzbGlkZUJhY2sKLXsKLSAgICAvLyBNYXJrIHdlYnZpZXcgYXMgaW5p
dGlhdGluZyB0aGUgZHJhZyBzbyBkcm9wcGluZyB0aGUgdGV4dCBiYWNrIG9uIHRoaXMgd2Vidmll
dyBuZXZlciB0cmllcyB0byBuYXZpZ2F0ZS4KLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW19kYXRh
U291cmNlIF93ZWJWaWV3XTsKLSAgICBbd2ViVmlldyBfc2V0SW5pdGlhdGVkRHJhZzpZRVNdOwot
ICAgIAotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSBjYW4gYmUgbG9zdCBkdXJpbmcgdGhlIGRy
YWcgaWYgaXQgY2F1c2VzIGEgbmF2aWdhdGlvbiAoZS5nLiBkcm9wcGluZyBpbiBTYWZhcmkgbG9j
YXRpb24KLSAgICAvLyBmaWVsZCkuIFRoaXMgY2FuIG1lc3MgdXAgdGhlIGRyYWdnaW5nIG1hY2hp
bmVyeSAocmFkYXIgNDExODEyNiksIHNvIHJldGFpbiBoZXJlIGFuZCByZWxlYXNlIGF0IGVuZCBv
ZiBkcmFnLgotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICBCT09MIHJlc3VsdCA9IFtzdXBlciBk
cmFnU2VsZWN0aW9uV2l0aEV2ZW50OmV2ZW50IG9mZnNldDptb3VzZU9mZnNldCBzbGlkZUJhY2s6
c2xpZGVCYWNrXTsKLSAgICAKLSAgICAvLyBXaGVuIHRoZSBjYWxsIHRvIHN1cGVyIGZpbmlzaGVz
LCB0aGUgZHJhZyBpcyBlaXRoZXIgYWJvcnRlZCBvciBjb21wbGV0ZWQuIFdlIG11c3QgY2xlYW4g
dXAgaW4gZWl0aGVyIGNhc2UuCi0gICAgW3dlYlZpZXcgX3NldEluaXRpYXRlZERyYWc6Tk9dOwot
ICAgIFtzZWxmIHJlbGVhc2VdOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5T
TWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17ICAgIAotICAgIFdlYlZpZXcg
KndlYlZpZXcgPSBbX2RhdGFTb3VyY2UgX3dlYlZpZXddOwotICAgIEFTU0VSVCh3ZWJWaWV3KTsK
LSAgICByZXR1cm4gW3dlYlZpZXcgX21lbnVGb3JFbGVtZW50OltzZWxmIF9lbGVtZW50QXRXaW5k
b3dQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dIGRlZmF1bHRJdGVtczpuaWxdOwotfQot
Ci0tIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCi17Ci0gICAgQk9PTCByZXN1bHQgPSBbc3Vw
ZXIgYmVjb21lRmlyc3RSZXNwb25kZXJdOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIFtbc2Vs
ZiBfd2ViRnJhbWVdIF9jbGVhclNlbGVjdGlvbkluT3RoZXJGcmFtZXNdOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICBCT09MIHJl
c2lnbiA9IFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKHJlc2lnbiAmJiAh
W1tfZGF0YVNvdXJjZSBfd2ViVmlld10gbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb25dKQotICAg
ICAgICBbc2VsZiBkZXNlbGVjdEFsbF07Ci0gICAgcmV0dXJuIHJlc2lnbjsKLX0KLQotLSAodm9p
ZCljbGlja2VkT25MaW5rOihpZClsaW5rIGF0SW5kZXg6KHVuc2lnbmVkKWNoYXJJbmRleAotewot
ICAgIE5TVVJMICpVUkwgPSBuaWw7Ci0gICAgaWYgKFtsaW5rIGlzS2luZE9mQ2xhc3M6W05TVVJM
IGNsYXNzXV0pIHsKLSAgICAgICAgVVJMID0gKE5TVVJMICopbGluazsKLSAgICB9IGVsc2UgaWYg
KFtsaW5rIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKLSAgICAgICAgVVJMID0g
W1tzZWxmIGNsYXNzXSBfVVJMRm9yU3RyaW5nOihOU1N0cmluZyAqKWxpbmtdOwotICAgIH0KLSAg
ICBpZiAoVVJMICE9IG5pbCkKLSAgICAgICAgW1tzZWxmIF93ZWJGcmFtZV0gX3NhZmVMb2FkVVJM
OlVSTF07Ci19Ci0KLSNwcmFnbWEgbWFyayBQUklOVElORwotCi0tICh2b2lkKWRyYXdQYWdlQm9y
ZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCi17Ci0gICAgQVNTRVJUKE5TRXF1YWxTaXpl
cyhib3JkZXJTaXplLCBbW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50
SW5mb10gcGFwZXJTaXplXSkpOwotICAgIFtbX2RhdGFTb3VyY2UgX3dlYlZpZXddIF9kcmF3SGVh
ZGVyQW5kRm9vdGVyXTsKLX0KLQotLSAoQk9PTClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBvaW50
ZXIpcmFuZ2UgewotICAgIC8vIFdhaXRpbmcgZm9yIGJlZ2luRG9jdW1lbnQgdG8gYWRqdXN0IHRo
ZSBwcmludGluZyBtYXJnaW5zIGlzIHRvbyBsYXRlLgotICAgIFtbX2RhdGFTb3VyY2UgX3dlYlZp
ZXddIF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdOwotICAgIHJldHVy
biBbc3VwZXIga25vd3NQYWdlUmFuZ2U6cmFuZ2VdOwotfQotCi0tIChCT09MKWNhblByaW50SGVh
ZGVyc0FuZEZvb3RlcnMKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXZWJUZXh0VmlldyAoVGV4dFNpemluZykKLQotLSAoSUJBY3Rpb24pX21ha2VUZXh0
U21hbGxlcjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgX3VwZGF0ZVRleHRTaXplTXVsdGlwbGll
cl07Ci19Ci0KLS0gKElCQWN0aW9uKV9tYWtlVGV4dExhcmdlcjooaWQpc2VuZGVyCi17Ci0gICAg
W3NlbGYgX3VwZGF0ZVRleHRTaXplTXVsdGlwbGllcl07Ci19Ci0KLS0gKElCQWN0aW9uKV9tYWtl
VGV4dFN0YW5kYXJkU2l6ZTooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgX3VwZGF0ZVRleHRTaXpl
TXVsdGlwbGllcl07Ci19Ci0KLS0gKEJPT0wpX3RyYWNrc0NvbW1vblNpemVGYWN0b3IKLXsKLSAg
ICByZXR1cm4gWUVTOwotfQotCi0vLyBuZXZlciBzZW50IGJlY2F1c2Ugd2UgdHJhY2sgdGhlIGNv
bW1vbiBzaXplIGZhY3RvcgotLSAoQk9PTClfY2FuTWFrZVRleHRTbWFsbGVyICAgICAgICAgIHsg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIE5POyAgICB9Ci0tIChCT09MKV9jYW5NYWtl
VGV4dExhcmdlciAgICAgICAgICAgeyAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gTk87
ICAgIH0KLS0gKEJPT0wpX2Nhbk1ha2VUZXh0U3RhbmRhcmRTaXplICAgICB7ICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBOTzsgICAgfQotCi1AZW5kCkluZGV4OiBXZWJLaXQvV2ViVmll
dy9XZWJIVE1MVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViVmlldy9XZWJI
VE1MVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMTQyNTcpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJI
VE1MVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogCiAtICh2
b2lkKV9yZXNldDsKICsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXM7CisrIChOU0FycmF5
ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzOwogCiAvLyBNb2RpZmllciAoZmxhZ3NDaGFuZ2Vk
KSB0cmFja2luZyBTUEkKICsgKHZvaWQpX3Bvc3RGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAq
KWZsYWdzQ2hhbmdlZEV2ZW50Owo=
</data>
<flag name="review"
          id="2281"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>