<?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>135862</bug_id>
          
          <creation_ts>2014-08-12 15:53:35 -0700</creation_ts>
          <short_desc>remove plugins/mac</short_desc>
          <delta_ts>2014-08-13 13:42:36 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1028642</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-12 15:53:35 -0700</bug_when>
    <thetext>plugins/mac seems to have dead code.  It is not built by Xcode.  Let&apos;s get rid of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028643</commentid>
    <comment_count>1</comment_count>
      <attachid>236477</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-12 15:56:00 -0700</bug_when>
    <thetext>Created attachment 236477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028696</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-08-12 19:13:12 -0700</bug_when>
    <thetext>Are these files built when building 32-bit? They might be excluded from 64-bit build, because it doesn&apos;t support in-process plug-ins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028713</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-12 21:05:34 -0700</bug_when>
    <thetext>I don&apos;t think so.  Grepping for PluginPackageMac.cpp shows it&apos;s only referenced in CMake files (which I added by mistake) and ChangeLogs.  If it were built, wouldn&apos;t it be in the Xcode files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028721</commentid>
    <comment_count>4</comment_count>
      <attachid>236477</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-08-12 22:27:41 -0700</bug_when>
    <thetext>Comment on attachment 236477
Patch

Fun, seems like these were only used by Qt on Mac. Looks like there are other unused files in WebCore/plugins (I found PluginDataNone.cpp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028731</commentid>
    <comment_count>5</comment_count>
      <attachid>236477</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-12 23:29:36 -0700</bug_when>
    <thetext>Comment on attachment 236477
Patch

I&apos;ll look into this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028883</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-08-13 13:42:36 -0700</bug_when>
    <thetext>Removed PluginDataNone.cpp, too, and mentioned in the committed change log.
http://trac.webkit.org/changeset/172535</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236477</attachid>
            <date>2014-08-12 15:56:00 -0700</date>
            <delta_ts>2014-08-12 23:29:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135862-20140812155550.patch</filename>
            <type>text/plain</type>
            <size>33690</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjUwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTA4LTEyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlZCBk
ZWFkIHBsdWdpbnMvbWFjIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzU4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHBsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW06IFJlbW92ZWQuCisgICAg
ICAgIFRoZXNlIGZpbGVzIHdlcmUgbm90IGluY2x1ZGVkIGluIHRoZSBNYWMgYnVpbGQuCisKIDIw
MTQtMDgtMTIgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAg
IENhY2hlZCBmaWxlIGJhY2tlZCByZXNvdXJjZXMgZG9uJ3QgbWFrZSBpdCB0byB0aGUgV2ViIFBy
b2Nlc3Mgd2hlbiBORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSyBpcyBlbmFibGVkCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcAko
cmV2aXNpb24gMTcyNTAyKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFj
a2FnZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzA0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0Nv
cmVGb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmlu
Z051bWJlciAgICAgMTI2Ci0jZGVmaW5lIE1JTUVEZXNjcmlwdGlvblN0cmluZ051bWJlciAgICAg
ICAgICAgICAxMjcKLSNkZWZpbmUgTUlNRUxpc3RTdHJpbmdTdHJpbmdOdW1iZXIgICAgICAgICAg
ICAgIDEyOAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKE1JTUVUeXBl
UmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgewotICAgICAgICAvLyBC
ZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3
ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEKLSAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90
IHVubG9hZCB0aGUgSmF2YSBQbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBv
bmx5IFZNCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4p
OwotCi0gICAgICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVn
aW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKLSAgICAgICAgLy8gd2l0
aCB0aGUgSmF2YSBwbHVnLWluLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250
Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKLSAgICB9Ci0KLSAgICBpZiAobWltZVR5cGUg
PT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCk7Ci0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLQotfQotCi10eXBl
ZGVmIHZvaWQgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZv
aWQpOwotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcmVhZFBMaXN0RmlsZShD
RlN0cmluZ1JlZiBmaWxlTmFtZSwgYm9vbCBjcmVhdGVGaWxlLCBDRkJ1bmRsZVJlZiBidW5kbGUp
Ci17Ci0gICAgaWYgKGNyZWF0ZUZpbGUpIHsKLSAgICAgICAgQlBfQ3JlYXRlUGx1Z2luTUlNRVR5
cGVzUHJlZmVyZW5jZXNGdW5jUHRyIGZ1bmNQdHIgPQotICAgICAgICAgICAgKEJQX0NyZWF0ZVBs
dWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRl
ckZvck5hbWUoYnVuZGxlLCBDRlNUUigiQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5j
ZXMiKSk7Ci0gICAgICAgIGlmIChmdW5jUHRyKQotICAgICAgICAgICAgZnVuY1B0cigpOwotICAg
IH0KLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IG1hcDsKLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgZmlsZU5hbWUsIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkp
OwotCi0gICAgQ0ZEYXRhUmVmIHJlc291cmNlID0gMDsKLSAgICBTSW50MzIgY29kZTsKLSAgICBp
ZiAoIUNGVVJMQ3JlYXRlRGF0YUFuZFByb3BlcnRpZXNGcm9tUmVzb3VyY2Uoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgdXJsLmdldCgpLCAmcmVzb3VyY2UsIDAsIDAsICZjb2RlKSkKLSAgICAgICAgcmV0
dXJuIG1hcDsKLQotICAgIFJldGFpblB0cjxDRlByb3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0
ID0gYWRvcHRDRihDRlByb3BlcnR5TGlzdENyZWF0ZUZyb21YTUxEYXRhKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHJlc291cmNlLCBrQ0ZQcm9wZXJ0eUxpc3RJbW11dGFibGUsIDApKTsKLQotICAgIENG
UmVsZWFzZShyZXNvdXJjZSk7Ci0KLSAgICBpZiAoIXByb3BlcnR5TGlzdCkKLSAgICAgICAgcmV0
dXJuIG1hcDsKLQotICAgIGlmIChDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpICE9IENG
RGljdGlvbmFyeUdldFR5cGVJRCgpKQotICAgICAgICByZXR1cm4gbWFwOwotCi0gICAgbWFwID0g
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihzdGF0aWNfY2FzdDxDRlByb3BlcnR5TGlzdFJl
Zj4ocHJvcGVydHlMaXN0LmdldCgpKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChTSW50MTYgaWQpCi17Ci0gICAg
VmVjdG9yPFN0cmluZz4gbGlzdDsKLQotICAgIEhhbmRsZSBoYW5kbGUgPSBHZXQxUmVzb3VyY2Uo
J1NUUiMnLCBpZCk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybiBsaXN0OwotCi0g
ICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IHN0cmluZ0VuY29kaW5nRm9yUmVzb3VyY2Uo
aGFuZGxlKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIHAgPSAodW5zaWduZWQgY2hhciopKmhhbmRs
ZTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBsaXN0OwotCi0gICAgU0ludDE2IGNvdW50
ID0gKihTSW50MTYqKXA7Ci0gICAgcCArPSBzaXplb2YoU0ludDE2KTsKLQotICAgIGZvciAoU0lu
dDE2IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGxlbmd0
aCA9ICpwOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0ciA9IGFkb3B0Q0YoQ0ZT
dHJpbmdDcmVhdGVXaXRoUGFzY2FsU3RyaW5nKDAsIHAsIGVuY29kaW5nKSk7Ci0gICAgICAgIGxp
c3QuYXBwZW5kKHN0ci5nZXQoKSk7Ci0gICAgICAgIHAgKz0gMSArIGxlbmd0aDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbGlzdDsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQot
ewotICAgIGlmICghbG9hZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtaW1lRGljdDsKLQotICAgIFJldGFpblB0cjxDRlR5cGVSZWY+
IG1pbWVUeXBlc0ZpbGVOYW1lID0gQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5
KG1fbW9kdWxlLCBDRlNUUigiV2ViUGx1Z2luTUlNRVR5cGVzRmlsZW5hbWUiKSk7Ci0gICAgaWYg
KG1pbWVUeXBlc0ZpbGVOYW1lICYmIENGR2V0VHlwZUlEKG1pbWVUeXBlc0ZpbGVOYW1lLmdldCgp
KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0KLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBmaWxlTmFtZSA9IChDRlN0cmluZ1JlZiltaW1lVHlwZXNGaWxlTmFtZS5nZXQoKTsKLSAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBob21lRGlyID0gaG9tZURpcmVjdG9yeVBhdGgo
KS5jcmVhdGVDRlN0cmluZygpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGgg
PSBhZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBDRlNUUigiJUAvTGlicmFy
eS9QcmVmZXJlbmNlcy8lQCIpLCBob21lRGlyLmdldCgpLCBmaWxlTmFtZS5nZXQoKSkpOwotCi0g
ICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBsaXN0ID0gcmVhZFBMaXN0RmlsZShw
YXRoLmdldCgpLCAvKmNyZWF0ZUZpbGUqLyBmYWxzZSwgbV9tb2R1bGUpOwotICAgICAgICBpZiAo
cGxpc3QpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBwbGlzdCBpc24ndCBsb2NhbGl6ZWQsIGhh
dmUgdGhlIHBsdWctaW4gcmVjcmVhdGUgaXQgaW4gdGhlIHByZWZlcnJlZCBsYW5ndWFnZS4KLSAg
ICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbG9jYWxpemF0aW9uTmFtZSA9Ci0gICAg
ICAgICAgICAgICAgKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LmdldCgp
LCBDRlNUUigiV2ViUGx1Z2luTG9jYWxpemF0aW9uTmFtZSIpKTsKLSAgICAgICAgICAgIENGTG9j
YWxlUmVmIGxvY2FsZSA9IENGTG9jYWxlQ29weUN1cnJlbnQoKTsKLSAgICAgICAgICAgIGlmIChs
b2NhbGl6YXRpb25OYW1lICE9IENGTG9jYWxlR2V0SWRlbnRpZmllcihsb2NhbGUpKQotICAgICAg
ICAgICAgICAgIHBsaXN0ID0gcmVhZFBMaXN0RmlsZShwYXRoLmdldCgpLCAvKmNyZWF0ZUZpbGUq
LyB0cnVlLCBtX21vZHVsZSk7Ci0KLSAgICAgICAgICAgIENGUmVsZWFzZShsb2NhbGUpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUGxpc3QgZG9lc24ndCBleGlzdCwgYXNrIHRo
ZSBwbHVnLWluIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgICAgIHBsaXN0ID0gcmVhZFBMaXN0Rmls
ZShwYXRoLmdldCgpLCAvKmNyZWF0ZUZpbGUqLyB0cnVlLCBtX21vZHVsZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocGxpc3QpCi0gICAgICAgICAgICBtaW1lRGljdCA9IChDRkRpY3Rpb25h
cnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGxpc3QuZ2V0KCksIENGU1RSKCJXZWJQbHVnaW5N
SU1FVHlwZXMiKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtaW1lRGljdCkKLSAgICAgICAgbWltZURp
Y3QgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtl
eShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk1JTUVUeXBlcyIpKTsKLQotICAgIGlmIChtaW1l
RGljdCkgewotICAgICAgICBDRkluZGV4IHByb3BDb3VudCA9IENGRGljdGlvbmFyeUdldENvdW50
KG1pbWVEaWN0LmdldCgpKTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IGtleXMo
cHJvcENvdW50KTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IHZhbHVlcyhwcm9w
Q291bnQpOwotICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVzKG1pbWVEaWN0Lmdl
dCgpLCBrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcHJvcENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IChD
RlN0cmluZ1JlZilrZXlzW2ldOwotICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lVHlwZS5sb3dl
cigpOwotCi0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBleHRlbnNpb25z
RGljdCA9IChDRkRpY3Rpb25hcnlSZWYpdmFsdWVzW2ldOwotCi0gICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZOdW1iZXJSZWY+IGVuYWJsZWQgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZXh0ZW5zaW9uc0RpY3QuZ2V0KCksIENGU1RSKCJXZWJQbHVnaW5UeXBlRW5hYmxlZCIpKTsK
LSAgICAgICAgICAgIGlmIChlbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVuYWJsZWRW
YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoZW5hYmxlZC5n
ZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJmVuYWJsZWRWYWx1ZSkgJiYgZW5hYmxlZFZhbHVlID09
IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lRXh0ZW5zaW9uczsKLSAgICAgICAgICAgIFJldGFp
blB0cjxDRkFycmF5UmVmPiBleHRlbnNpb25zID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZXh0ZW5zaW9uc0RpY3QuZ2V0KCksIENGU1RSKCJXZWJQbHVnaW5FeHRlbnNpb25zIikp
OwotICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHsKLSAgICAgICAgICAgICAgICBDRkluZGV4
IGV4dGVuc2lvbkNvdW50ID0gQ0ZBcnJheUdldENvdW50KGV4dGVuc2lvbnMuZ2V0KCkpOwotICAg
ICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGV4dGVuc2lvbkNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9KENGU3RyaW5nUmVmKUNG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoZXh0ZW5zaW9ucy5nZXQoKSwgaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5sb3dlcigpOwotICAgICAgICAgICAgICAgICAg
ICBtaW1lRXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuc2V0KG1pbWVUeXBl
LCBtaW1lRXh0ZW5zaW9ucyk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IChD
RlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShleHRlbnNpb25zRGljdC5nZXQoKSwgQ0ZT
VFIoIldlYlBsdWdpblR5cGVEZXNjcmlwdGlvbiIpKTsKLSAgICAgICAgICAgIG1fbWltZVRvRGVz
Y3JpcHRpb25zLnNldChtaW1lVHlwZSwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgZGV0ZXJt
aW5lUXVpcmtzKG1pbWVUeXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbmFtZSA9IChDRlN0
cmluZ1JlZilDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkobV9tb2R1bGUsIENG
U1RSKCJXZWJQbHVnaW5OYW1lIikpOwotICAgICAgICBtX2Rlc2NyaXB0aW9uID0gKENGU3RyaW5n
UmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVsZSwgQ0ZTVFIo
IldlYlBsdWdpbkRlc2NyaXB0aW9uIikpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHJl
c0ZpbGUgPSBDRkJ1bmRsZU9wZW5CdW5kbGVSZXNvdXJjZU1hcChtX21vZHVsZSk7Ci0KLSAgICAg
ICAgVXNlUmVzRmlsZShyZXNGaWxlKTsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lcyA9
IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChNSU1FTGlzdFN0cmluZ1N0cmluZ051bWJlcik7Ci0K
LSAgICAgICAgaWYgKG1pbWVzLnNpemUoKSAlIDIgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnMgPSBzdHJpbmdMaXN0
RnJvbVJlc291cmNlSWQoTUlNRURlc2NyaXB0aW9uU3RyaW5nTnVtYmVyKTsKLSAgICAgICAgaWYg
KGRlc2NyaXB0aW9ucy5zaXplKCkgIT0gbWltZXMuc2l6ZSgpIC8gMikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgIGkgPCBtaW1lcy5zaXpl
KCk7IGkgKz0gMikgewotICAgICAgICAgICAgU3RyaW5nIG1pbWUgPSBtaW1lc1tpXS5sb3dlcigp
OwotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uczsKLSAgICAgICAgICAgIG1p
bWVzW2kgKyAxXS5sb3dlcigpLnNwbGl0KFVDaGFyKCcsJyksIGV4dGVuc2lvbnMpOwotCi0gICAg
ICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuc2V0KG1pbWUsIGV4dGVuc2lvbnMpOwotCi0gICAg
ICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5zZXQobWltZSwgZGVzY3JpcHRpb25zW2kgLyAy
XSk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IHN0cmluZ0xp
c3RGcm9tUmVzb3VyY2VJZChQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmluZ051bWJlcik7Ci0g
ICAgICAgIGlmIChuYW1lcy5zaXplKCkgPT0gMikgewotICAgICAgICAgICAgbV9kZXNjcmlwdGlv
biA9IG5hbWVzWzBdOwotICAgICAgICAgICAgbV9uYW1lID0gbmFtZXNbMV07Ci0gICAgICAgIH0K
LQotICAgICAgICBDRkJ1bmRsZUNsb3NlQnVuZGxlUmVzb3VyY2VNYXAobV9tb2R1bGUsIHJlc0Zp
bGUpOwotICAgIH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCk6IEZvdW5kIHBsdWctaW4gJyVzJyIsIG1fbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAo
aXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiXHRQbHVnLWlu
IGlzIGJsYWNrbGlzdGVkISIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3Rl
ZCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmxvYWQo
KQotewotICAgIGlmIChtX2lzTG9hZGVkKSB7Ci0gICAgICAgIG1fbG9hZENvdW50Kys7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0
aCA9IG1fcGF0aC5jcmVhdGVDRlN0cmluZygpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJs
ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBwYXRoLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZh
bHNlKSk7Ci0gICAgbV9tb2R1bGUgPSBDRkJ1bmRsZUNyZWF0ZShOVUxMLCB1cmwuZ2V0KCkpOwot
ICAgIGlmICghbV9tb2R1bGUgfHwgIUNGQnVuZGxlTG9hZEV4ZWN1dGFibGUobV9tb2R1bGUpKSB7
Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiJXMgbm90IGxvYWRlZCIsIG1fcGF0aC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1faXNMb2FkZWQgPSB0
cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0g
MDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOwotICAgIE5QRXJyb3Ig
bnBFcnI7Ci0KLSAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUNGQnVu
ZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0luaXRpYWxp
emUiKSk7Ci0gICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRy
KUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0dl
dEVudHJ5UG9pbnRzIikpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQ
dHIpQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKG1fbW9kdWxlLCBDRlNUUigiTlBf
U2h1dGRvd24iKSk7Ci0KLSAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9p
bnRzIHx8ICFtX05QUF9TaHV0ZG93bikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1lbXNl
dCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKLSAgICBtX3BsdWdp
bkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7Ci0KLSAgICBpbml0aWFsaXplQnJv
d3NlckZ1bmNzKCk7Ci0KLSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNz
KTsKLSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VS
Uk9SKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50
cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1fbG9hZENv
dW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0
ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdWludDE2X3QgUGx1Z2luUGFja2FnZTo6
TlBWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKLX0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1Bs
dWdpblZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMv
UGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24gMTcyNTAyKQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw2MjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJh
bWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVk
ZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAi
UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgot
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0K
LXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpJbnRlcnByZXRlcjsKLXVzaW5nIEpT
Qzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLXVzaW5nIEpTQzo6SlNWYWx1ZTsKLQot
dXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotCi0vLyAtLS0tLS0tLS0gQ29jb2Egc3BlY2lmaWMgdXRpbGl0eSBm
dW5jdGlvbnMgLS0tLS0tLS0tLQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplTlBDb2NvYUV2ZW50
KE5QQ29jb2FFdmVudCogZXZlbnQpCi17Ci0gICAgbWVtc2V0KGV2ZW50LCAwLCBzaXplb2YoTlBD
b2NvYUV2ZW50KSk7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGdldE1vZGlmaWVycyhVSUV2ZW50V2l0
aEtleVN0YXRlICpldmVudCkKLXsKLSAgICBpbnQzMl90IG1vZGlmaWVycyA9IDA7Ci0gICAgaWYg
KGV2ZW50LT5rZXlDb2RlKCkgPT0gNTcpIG1vZGlmaWVycyB8PSBOU0FscGhhU2hpZnRLZXlNYXNr
OwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkgIG1vZGlmaWVycyB8PSBOU1NoaWZ0S2V5TWFz
azsKLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkgICBtb2RpZmllcnMgfD0gTlNDb250cm9sS2V5
TWFzazsKLSAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkgICBtb2RpZmllcnMgfD0gTlNDb21tYW5k
S2V5TWFzazsKLSAgICBpZiAoZXZlbnQtPmFsdEtleSgpKSAgICBtb2RpZmllcnMgfD0gTlNBbHRl
cm5hdGVLZXlNYXNrOwotCi0gICAgcmV0dXJuIG1vZGlmaWVyczsKLX0KLQotc3RhdGljIENHQ29u
dGV4dFJlZiBjcmVhdGVCaXRtYXBDb250ZXh0KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
Q0dDb2xvclNwYWNlUmVmIGNvbG9yc3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KTsKLSAgICB1aW50IGZsYWdzID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDQgKiBzaXplLndpZHRoKCksIGNvbG9yc3BhY2Us
IGZsYWdzKTsKLQotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCBzaXplLmhl
aWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7Ci0gICAgQ0dD
b2xvclNwYWNlUmVsZWFzZShjb2xvcnNwYWNlKTsKLSAgICByZXR1cm4gY29udGV4dDsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tIExpZmV0aW1lIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0K
LQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0
YXJ0ZWQpOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpOwotCi0gICAgLy8gR3JhY2VmdWxseSBoYW5kbGUgdW5zdXBwb3J0ZWQgZHJhd2luZyBv
ciBldmVudCBtb2RlbHMuIFdlIGNhbiBkbyB0aGlzCi0gICAgLy8gbm93IHNpbmNlIHRoZSBkcmF3
aW5nIGFuZCBldmVudCBtb2RlbCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIE5QUF9OZXcuCi0gICAg
TlBCb29sIGV2ZW50TW9kZWxTdXBwb3J0ZWQ7Ci0gICAgaWYgKGdldFZhbHVlU3RhdGljKE5QTlZh
cmlhYmxlKE5QTlZzdXBwb3J0c0NvY29hQm9vbCksICZldmVudE1vZGVsU3VwcG9ydGVkKSAhPSBO
UEVSUl9OT19FUlJPUgotICAgICAgICAgICAgfHwgIWV2ZW50TW9kZWxTdXBwb3J0ZWQpIHsKLSAg
ICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICBM
T0coUGx1Z2lucywgIlBsdWctaW4gJyVzJyB1c2VzIHVuc3VwcG9ydGVkIGV2ZW50IG1vZGVsICVz
IiwKLSAgICAgICAgICAgICAgICBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIHByZXR0
eU5hbWVGb3JFdmVudE1vZGVsKE5QRXZlbnRNb2RlbENvY29hKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotICAgIGlmICghbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0Nh
bGwpKQotICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIENHQ29udGV4
dFJlbGVhc2UobV9jb250ZXh0UmVmKTsKLX0KLQotLy8gVXNlZCBiZWZvcmUgdGhlIHBsdWdpbiB2
aWV3IGhhcyBiZWVuIGluaXRpYWxpemVkIHByb3Blcmx5LCBhbmQgYXMgYQotLy8gZmFsbGJhY2sg
Zm9yIHZhcmlhYmxlcyB0aGF0IGRvIG5vdCByZXF1aXJlIGEgdmlldyB0byByZXNvbHZlLgotYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKLSAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3Qq
Pih2YWx1ZSkgPSAwOwotICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOgotICAg
ICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBO
VnN1cHBvcnRzQ29jb2FCb29sOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIENvcmVHcmFwaGljcyBpcyB0aGUgb25seSBkcmF3aW5nIG1vZGVs
IHdlIHN1cHBvcnQKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2w6Ci0gICAg
ICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwotICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBOUE5W
c3VwcG9ydHNBZHZhbmNlZEtleUhhbmRsaW5nOgotICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29s
Kj4odmFsdWUpID0gdHJ1ZTsKLSAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDoKLSAg
ICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOgotICAgICAgICAqc3RhdGljX2Nh
c3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7Ci0gICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBVc2VkIG9ubHkgZm9yIHZhcmlhYmxlcyB0aGF0IG5l
ZWQgYSB2aWV3IHRvIHJlc29sdmUKLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIGVycm9yKQotewotICAg
IC8vIEluIFdlYktpdDIsIHRoaXMgaXMgc2V0IGlmIHRoZSBwbHVnaW4gcXVlcmllcyBpdCdzIGF2
YWlsaWFibGl0eSBhbmQKLSAgICAvLyBubyBrZXkgZG93biBldmVudHMgaGF2ZSBhbHJlYWR5IGJl
ZW4gc2VudC4KLSAgICBpZiAodmFyaWFibGUgPT0gTlBOVnN1cHBvcnRzVXBkYXRlZENvY29hVGV4
dElucHV0Qm9vbCkgewotICAgICAgICBpZiAobV9rZXlEb3duU2VudCAmJiAhbV91cGRhdGVkQ29j
b2FUZXh0SW5wdXRSZXF1ZXN0ZWQpIHsKLSAgICAgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSBmYWxzZTsKLSAgICAgICAgICAgICplcnJvciA9IE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9v
bCo+KHZhbHVlKSA9IHRydWU7Ci0gICAgICAgICAgICAqZXJyb3IgPSBOUEVSUl9OT19FUlJPUjsK
LSAgICAgICAgICAgIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0g
ICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRQYXJlbnQoJXApIiwgcGFyZW50KTsKLQot
ICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAg
ICBpbml0KCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tIEdlb21ldHJ5IGFuZCBwYWludGluZyAt
LS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpCi17Ci0gICAgTE9HKFBs
dWdpbnMsICJQbHVnaW5WaWV3OjpzaG93KCkiKTsKLQotICAgIHNldFNlbGZWaXNpYmxlKHRydWUp
OwotCi0gICAgV2lkZ2V0OjpzaG93KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCi17
Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpoaWRlKCkiKTsKLQotICAgIHNldFNlbGZW
aXNpYmxlKGZhbHNlKTsKLQotICAgIFdpZGdldDo6aGlkZSgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZp
ZXc6OnNldEZvY3VzKCVkKSIsIGZvY3VzZWQpOwotICAgIGlmICghZm9jdXNlZCkKLSAgICAgICAg
V2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKLQotICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNl
ZCk7Ci0KLSAgICBOUENvY29hRXZlbnQgY29jb2FFdmVudDsKLSAgICBpbml0aWFsaXplTlBDb2Nv
YUV2ZW50KCZjb2NvYUV2ZW50KTsKLSAgICBjb2NvYUV2ZW50LnR5cGUgPSBOUENvY29hRXZlbnRG
b2N1c0NoYW5nZWQ7Ci0gICAgTlBCb29sIGZvY3VzID0gZm9jdXNlZDsKLSAgICBjb2NvYUV2ZW50
LmRhdGEuZm9jdXMuaGFzRm9jdXMgPSBmb2N1czsKLQotICAgIGlmKCFkaXNwYXRjaE5QQ29jb2FF
dmVudChjb2NvYUV2ZW50KSkgewotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6c2V0
Rm9jdXMoKTogRm9jdXMgZXZlbnQgJWQgbm90IGFjY2VwdGVkIiwgY29jb2FFdmVudC50eXBlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2li
bGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCi17Ci0gICAgc2V0
TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93IHx8ICFtX2NvbnRleHRSZWYpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRoZSBjb250ZXh0IGlzIHNldCB0aHJvdWdoIHRoZSBkcmF3IGV2ZW50
LgotICAgIEFTU0VSVCghbV9ucENnQ29udGV4dC5jb250ZXh0ICYmICFtX25wQ2dDb250ZXh0Lndp
bmRvdyk7Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopJm1fbnBDZ0NvbnRleHQ7Ci0g
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0KLSAgICBtX25wV2lu
ZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVj
dC55KCk7Ci0gICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOwotICAg
IG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOwotCi0gICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5sZWZ0ID0gbWF4KDAsIG1fd2luZG93UmVjdC54KCkpOwotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QudG9wID0gbWF4KDAsIG1fd2luZG93UmVjdC55KCkpOwotICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX3dpbmRvd1JlY3QueCgpICsgbV93aW5kb3dSZWN0Lndp
ZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX3dpbmRvd1JlY3QueSgp
ICsgbV93aW5kb3dSZWN0LmhlaWdodCgpOwotCi0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpzZXROUFdpbmRvd0lmTmVlZGVkKCk6IGNvbnRleHQ9JXAsIgotICAgICAgICAgICAgIiB3aW5k
b3cueDolZCB3aW5kb3cueTolZCB3aW5kb3cud2lkdGg6JWQgd2luZG93LmhlaWdodDolZCB3aW5k
b3cuY2xpcFJlY3Qgc2l6ZTolZHglZCIsCi0gICAgICAgICAgICBtX2NvbnRleHRSZWYsIG1fbnBX
aW5kb3cueCwgbV9ucFdpbmRvdy55LCBtX25wV2luZG93LndpZHRoLCBtX25wV2luZG93LmhlaWdo
dCwKLSAgICAgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgLSBtX25wV2luZG93LmNs
aXBSZWN0LmxlZnQsIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tIC0gbV9ucFdpbmRvdy5jbGlw
UmVjdC50b3ApOwotCi0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwot
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgp
Ci17Ci0gICAgaWYgKCFwYXJlbnQoKSkKLSAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFy
ZW50KCktPmlzRnJhbWVWaWV3KCkpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdG9GcmFt
ZVZpZXcocGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dS
ZWN0OwotICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFt
ZVJlY3QoKSk7Ci0KLSAgICBpZiAobV93aW5kb3dSZWN0LnNpemUoKSAhPSBvbGRXaW5kb3dSZWN0
LnNpemUoKSkgewotICAgICAgICBDR0NvbnRleHRSZWxlYXNlKG1fY29udGV4dFJlZik7Ci0gICAg
ICAgIG1fY29udGV4dFJlZiA9IGNyZWF0ZUJpdG1hcENvbnRleHQobV93aW5kb3dSZWN0LnNpemUo
KSk7Ci0gICAgICAgIENHQ29udGV4dENsZWFyUmVjdChtX2NvbnRleHRSZWYsIENHUmVjdE1ha2Uo
MCwgMCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSkpOwotICAg
IH0KLQotICAgIGlmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCkKLSAgICAgICAgc2V0
TlBXaW5kb3dJZk5lZWRlZCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNT
dGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkgewot
ICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAh
bV9jb250ZXh0UmVmKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KG1fY29udGV4dFJlZik7Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0KGZyYW1lUmVjdCgpKTsKLSAg
ICB0YXJnZXRSZWN0LmludGVyc2VjdHMocmVjdCk7Ci0KLSAgICAvLyBjbGlwIHRoZSBjb250ZXh0
IHNvIHRoYXQgcGx1Z2luIG9ubHkgdXBkYXRlcyB0aGUgaW50ZXJlc3RlZCBhcmVhLgotICAgIENH
UmVjdCByOwotICAgIHIub3JpZ2luLnggPSB0YXJnZXRSZWN0LngoKSAtIGZyYW1lUmVjdCgpLngo
KTsKLSAgICByLm9yaWdpbi55ID0gdGFyZ2V0UmVjdC55KCkgLSBmcmFtZVJlY3QoKS55KCk7Ci0g
ICAgci5zaXplLndpZHRoID0gdGFyZ2V0UmVjdC53aWR0aCgpOwotICAgIHIuc2l6ZS5oZWlnaHQg
PSB0YXJnZXRSZWN0LmhlaWdodCgpOwotICAgIENHQ29udGV4dENsaXBUb1JlY3QobV9jb250ZXh0
UmVmLCByKTsKLQotICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLy8gQ2xlYW4g
dGhlIHBpeG1hcCBpbiB0cmFuc3BhcmVudCBtb2RlLgotICAgICAgICBDR0NvbnRleHRDbGVhclJl
Y3QobV9jb250ZXh0UmVmLCBDR1JlY3RNYWtlKHIub3JpZ2luLngsIHIub3JpZ2luLnksIHIuc2l6
ZS53aWR0aCwgci5zaXplLmhlaWdodCkpOwotICAgIH0KLQotICAgIE5QQ29jb2FFdmVudCBjb2Nv
YUV2ZW50OwotICAgIGluaXRpYWxpemVOUENvY29hRXZlbnQoJmNvY29hRXZlbnQpOwotICAgIGNv
Y29hRXZlbnQudHlwZSA9IE5QQ29jb2FFdmVudERyYXdSZWN0OwotICAgIGNvY29hRXZlbnQuZGF0
YS5kcmF3LnggPSAwOwotICAgIGNvY29hRXZlbnQuZGF0YS5kcmF3LnkgPSAwOwotICAgIGNvY29h
RXZlbnQuZGF0YS5kcmF3LndpZHRoID0gQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9jb250ZXh0
UmVmKTsKLSAgICBjb2NvYUV2ZW50LmRhdGEuZHJhdy5oZWlnaHQgPSBDR0JpdG1hcENvbnRleHRH
ZXRIZWlnaHQobV9jb250ZXh0UmVmKTsKLSAgICBjb2NvYUV2ZW50LmRhdGEuZHJhdy5jb250ZXh0
ID0gbV9jb250ZXh0UmVmOwotCi0gICAgaWYoIWRpc3BhdGNoTlBDb2NvYUV2ZW50KGNvY29hRXZl
bnQpKQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6cGFpbnQoKTogUGFpbnQgZXZl
bnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOwotCi0gICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHRSZWYpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBv
cFVwQ29udGV4dE1lbnUoTlBNZW51ICptZW51KQotewotICAgIE5TRXZlbnQqIGN1cnJlbnRFdmVu
dCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIAotICAgIC8vIE5QTl9Qb3BVcENvbnRleHRN
ZW51IG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBwbHVnLWluJ3MgTlBQX0hhbmRsZUV2
ZW50LgotICAgIGlmICghY3VycmVudEV2ZW50KQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLSAgICAKLSAgICBOU1dpbmRvdyogd2luZG93ID0gW2N1cnJlbnRFdmVudCB3aW5k
b3ddOwotICAgIE5TVmlldyogdmlldyA9IFt3aW5kb3cgY29udGVudFZpZXddOwotICAgIFtOU01l
bnUgcG9wVXBDb250ZXh0TWVudTooTlNNZW51KiltZW51IHdpdGhFdmVudDpjdXJyZW50RXZlbnQg
Zm9yVmlldzp2aWV3XTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLXZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0
LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9w
KTsKLSAgICBpbnZhbGlkYXRlUmVjdChyKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKLXsKLSAgICAvLyBUT0RPOiBvcHRpbWl6ZQotICAg
IGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLSBFdmVudCBo
YW5kbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVXaGVl
bEV2ZW50KFdoZWVsRXZlbnQgKmV2ZW50KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBOUENvY29hRXZlbnQgY29jb2FFdmVudDsKLSAgICBpbml0
aWFsaXplTlBDb2NvYUV2ZW50KCZjb2NvYUV2ZW50KTsKLSAgICAKLSAgICBOU0V2ZW50ICpjdXJy
ZW50RXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICAKLSAgICBjb2NvYUV2ZW50LnR5
cGUgPSBOUENvY29hRXZlbnRTY3JvbGxXaGVlbDsKLSAgICAKLSAgICBjb2NvYUV2ZW50LmRhdGEu
bW91c2UucGx1Z2luWCA9IGV2ZW50LT5sYXllclgoKSAtIG1fbnBXaW5kb3cueCArIG1fd2luZG93
UmVjdC54KCkgLSBtX2VsZW1lbnQtPm9mZnNldExlZnQoKTsKLSAgICBjb2NvYUV2ZW50LmRhdGEu
bW91c2UucGx1Z2luWSA9IGV2ZW50LT5sYXllclkoKSAtIG1fbnBXaW5kb3cueSArIG1fd2luZG93
UmVjdC55KCkgLSBtX2VsZW1lbnQtPm9mZnNldFRvcCgpOwotICAgIGNvY29hRXZlbnQuZGF0YS5t
b3VzZS5kZWx0YVggPSBbY3VycmVudEV2ZW50IGRlbHRhWF07Ci0gICAgY29jb2FFdmVudC5kYXRh
Lm1vdXNlLmRlbHRhWSA9IFtjdXJyZW50RXZlbnQgZGVsdGFZXTsKLSAgICBjb2NvYUV2ZW50LmRh
dGEubW91c2UuZGVsdGFaID0gW2N1cnJlbnRFdmVudCBkZWx0YVpdOwotICAgIGNvY29hRXZlbnQu
ZGF0YS5tb3VzZS5tb2RpZmllckZsYWdzID0gZ2V0TW9kaWZpZXJzKGV2ZW50KTsKLSAgICAKLSAg
ICBpZighZGlzcGF0Y2hOUENvY29hRXZlbnQoY29jb2FFdmVudCkpIHsKLSAgICAgICAgTE9HKEV2
ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoKTogV2hlZWwgZXZlbnQgdHlwZSAl
ZCBhdCAlZCwlZCBub3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUsCi0gICAgICAgICAgICBj
b2NvYUV2ZW50LmRhdGEubW91c2UucGx1Z2luWCwgY29jb2FFdmVudC5kYXRhLm1vdXNlLnBsdWdp
blkpOwotICAgIH0KLSAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIGlm
ICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOUENvY29hRXZlbnRU
eXBlIGV2ZW50VHlwZTsKLSAgICBpbnQzMl90IGJ1dHRvbk51bWJlciA9IDA7Ci0gICAgaW50MzJf
dCBjbGlja0NvdW50ID0gMDsKLSAgICBOU0V2ZW50ICpjdXJyZW50RXZlbnQgPSBbTlNBcHAgY3Vy
cmVudEV2ZW50XTsKLQotICAgIE5TRXZlbnRUeXBlIHR5cGUgPSBbY3VycmVudEV2ZW50IHR5cGVd
OwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3duOgot
ICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURvd246Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNl
RG93bjoKLSAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50RXZlbnQgYnV0dG9uTnVt
YmVyXTsKLSAgICAgICAgICAgIGNsaWNrQ291bnQgPSBbY3VycmVudEV2ZW50IGNsaWNrQ291bnRd
OwotICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VEb3duOwotICAgICAg
ICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0byByZWNlaXZlIGtleWJvYXJkIGV2ZW50
cwotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0g
ICAgICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEZyYW1lKG1f
cGFyZW50RnJhbWUpOwotICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0
Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgTlNMZWZ0TW91c2VVcDoKLSAgICAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKLSAgICAg
ICAgY2FzZSBOU090aGVyTW91c2VVcDoKLSAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJy
ZW50RXZlbnQgYnV0dG9uTnVtYmVyXTsKLSAgICAgICAgICAgIGNsaWNrQ291bnQgPSBbY3VycmVu
dEV2ZW50IGNsaWNrQ291bnRdOwotICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50
TW91c2VVcDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTlNNb3VzZU1vdmVk
OgotICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2NvYUV2ZW50TW91c2VNb3ZlZDsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgotICAgICAg
ICBjYXNlIE5TUmlnaHRNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJh
Z2dlZDoKLSAgICAgICAgICAgIGJ1dHRvbk51bWJlciA9IFtjdXJyZW50RXZlbnQgYnV0dG9uTnVt
YmVyXTsKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudE1vdXNlRHJhZ2dlZDsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTlNNb3VzZUVudGVyZWQ6Ci0gICAg
ICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZUVudGVyZWQ7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIE5TTW91c2VFeGl0ZWQ6Ci0gICAgICAgICAgICBldmVu
dFR5cGUgPSBOUENvY29hRXZlbnRNb3VzZUV4aXRlZDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOUENvY29hRXZlbnQgY29jb2FFdmVudDsKLSAg
ICBpbml0aWFsaXplTlBDb2NvYUV2ZW50KCZjb2NvYUV2ZW50KTsKLQotICAgIGNvY29hRXZlbnQu
dHlwZSA9IGV2ZW50VHlwZTsKLSAgICBpZiAoIShOUENvY29hRXZlbnRNb3VzZUVudGVyZWQgPT0g
ZXZlbnRUeXBlIHx8IE5QQ29jb2FFdmVudE1vdXNlRXhpdGVkID09IGV2ZW50VHlwZSkpIHsKLSAg
ICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmJ1dHRvbk51bWJlciA9IGJ1dHRvbk51bWJlcjsK
LSAgICAgICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmNsaWNrQ291bnQgPSBjbGlja0NvdW50Owot
ICAgIH0KLQotICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YID0gZXZlbnQtPmxheWVy
WCgpIC0gbV9ucFdpbmRvdy54ICsgbV93aW5kb3dSZWN0LngoKSAtIG1fZWxlbWVudC0+b2Zmc2V0
TGVmdCgpOwotICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5ZID0gZXZlbnQtPmxheWVy
WSgpIC0gbV9ucFdpbmRvdy55ICsgbV93aW5kb3dSZWN0LnkoKSAtIG1fZWxlbWVudC0+b2Zmc2V0
VG9wKCk7Ci0gICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLmRlbHRhWCA9IFtjdXJyZW50RXZlbnQg
ZGVsdGFYXTsKLSAgICBjb2NvYUV2ZW50LmRhdGEubW91c2UuZGVsdGFZID0gW2N1cnJlbnRFdmVu
dCBkZWx0YVldOwotICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5kZWx0YVogPSBbY3VycmVudEV2
ZW50IGRlbHRhWl07Ci0gICAgY29jb2FFdmVudC5kYXRhLm1vdXNlLm1vZGlmaWVyRmxhZ3MgPSBn
ZXRNb2RpZmllcnMoZXZlbnQpOwotCi0gICAgaW50MTZfdCByZXNwb25zZSA9IGRpc3BhdGNoTlBD
b2NvYUV2ZW50KGNvY29hRXZlbnQpOwotICAgIGlmKHJlc3BvbnNlID09IGtOUEV2ZW50Tm90SGFu
ZGxlZCkgewotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dCgpOiBNb3VzZSBldmVudCB0eXBlICVkIGF0ICVkLCVkIG5vdCBhY2NlcHRlZCIsIGNvY29hRXZl
bnQudHlwZSwKLSAgICAgICAgICAgIGNvY29hRXZlbnQuZGF0YS5tb3VzZS5wbHVnaW5YLCBjb2Nv
YUV2ZW50LmRhdGEubW91c2UucGx1Z2luWSk7Ci0gICAgfQotCi0gICAgLy8gU2FmYXJpIHBvbGlj
eSBpcyB0byByZXR1cm4gdHJ1ZSBmb3IgYWxsIG1vdXNlIGV2ZW50cywgYmVjYXVzZSBzb21lIHBs
dWdpbnMKLSAgICAvLyByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGV5IGhhdmUgaGFuZGxlZCB0aGUg
ZXZlbnQuCi0gICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0gICAgCi12b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0g
ICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIExPRyhQbHVnaW5zLCAi
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCgpIC0tLS0tLS0tLS0tLS0tLS0tICIpOwot
Ci0gICAgTE9HKFBsdWdpbnMsICJQVjo6aEtFKCk6IEtFLmtleUNvZGU6IDB4JTAyWCwgS0UuY2hh
ckNvZGU6ICVkIiwKLSAgICAgICAgZXZlbnQtPmtleUNvZGUoKSwgZXZlbnQtPmNoYXJDb2RlKCkp
OwotCi0gICAgTlNFdmVudCAqY3VycmVudEV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07Ci0g
ICAgTlBDb2NvYUV2ZW50VHlwZSBldmVudFR5cGU7Ci0gICAgTlNFdmVudFR5cGUgdHlwZSA9IFtj
dXJyZW50RXZlbnQgdHlwZV07Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBO
U0tleURvd246Ci0gICAgICAgICAgICBldmVudFR5cGUgPSBOUENvY29hRXZlbnRLZXlEb3duOwot
ICAgICAgICAgICAgbV9rZXlEb3duU2VudCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBOU0tleVVwOgotICAgICAgICAgICAgaWYgKG1fZGlzcmVnYXJkS2V5VXBDb3Vu
dGVyID4gMCkgewotICAgICAgICAgICAgICAgIG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyLS07Ci0g
ICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnRUeXBlID0gTlBDb2Nv
YUV2ZW50S2V5VXA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOU0ZsYWdzQ2hh
bmdlZDoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE5QQ29jb2FFdmVudCBjb2NvYUV2ZW50OwotICAgIGluaXRpYWxpemVO
UENvY29hRXZlbnQoJmNvY29hRXZlbnQpOwotICAgIGNvY29hRXZlbnQudHlwZSA9IGV2ZW50VHlw
ZTsKLSAgICBpZiAoZXZlbnRUeXBlICE9IE5QQ29jb2FFdmVudEZsYWdzQ2hhbmdlZCkgewotICAg
ICAgICBOU1N0cmluZyAqY2hhcmFjdGVycyA9IFtjdXJyZW50RXZlbnQgY2hhcmFjdGVyc107Ci0g
ICAgICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgPSBbY3VycmVudEV2
ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Ci0gICAgICAgIGNvY29hRXZlbnQuZGF0
YS5rZXkuY2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBOU1N0cmluZyo+KGNoYXJhY3Rl
cnMpOwotICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmNoYXJhY3RlcnNJZ25vcmluZ01vZGlm
aWVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBOU1N0cmluZyo+KGNoYXJhY3RlcnNJZ25vcmluZ01v
ZGlmaWVycyk7Ci0gICAgICAgIGNvY29hRXZlbnQuZGF0YS5rZXkuaXNBUmVwZWF0ID0gW2N1cnJl
bnRFdmVudCBpc0FSZXBlYXRdOwotICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5LmtleUNvZGUg
PSBbY3VycmVudEV2ZW50IGtleUNvZGVdOwotICAgICAgICBjb2NvYUV2ZW50LmRhdGEua2V5Lm1v
ZGlmaWVyRmxhZ3MgPSBnZXRNb2RpZmllcnMoZXZlbnQpOwotICAgIH0KLQotICAgIGludDE2X3Qg
cmVzcG9uc2UgPSBkaXNwYXRjaE5QQ29jb2FFdmVudChjb2NvYUV2ZW50KTsKLSAgICBpZihyZXNw
b25zZSA9PSBrTlBFdmVudE5vdEhhbmRsZWQpIHsKLSAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdp
blZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3Qg
YWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOwotICAgIH0gZWxzZSBpZiAocmVzcG9uc2UgPT0g
a05QRXZlbnRTdGFydElNRSkgewotICAgICAgICAvLyBpbmNyZW1lbnQgY291bnRlciBhbmQgcmVz
ZW5kIGFzIGEgdGV4dCBpbnB1dAotICAgICAgICBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcisrOwot
ICAgICAgICBOUENvY29hRXZlbnQgdGV4dEV2ZW50OwotICAgICAgICBpbml0aWFsaXplTlBDb2Nv
YUV2ZW50KCZ0ZXh0RXZlbnQpOwotICAgICAgICB0ZXh0RXZlbnQudHlwZSA9IE5QQ29jb2FFdmVu
dFRleHRJbnB1dDsKLSAgICAgICAgdGV4dEV2ZW50LmRhdGEudGV4dC50ZXh0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxOUE5TU3RyaW5nKj4oW2N1cnJlbnRFdmVudCBjaGFyYWN0ZXJzXSk7Ci0gICAgICAg
IHJlc3BvbnNlID0gZGlzcGF0Y2hOUENvY29hRXZlbnQodGV4dEV2ZW50KTsKLSAgICAgICAgaWYo
cmVzcG9uc2UgPT0ga05QRXZlbnROb3RIYW5kbGVkKQotICAgICAgICAgICAgTE9HKEV2ZW50cywg
IlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAl
ZCBub3QgYWNjZXB0ZWQiLCBjb2NvYUV2ZW50LnR5cGUpOwotICAgIH0KLQotICAgIC8vIEFsbCBr
ZXlib2FyZCBldmVudHMgbmVlZCB0byBiZSBoYW5kbGVkIHRvIHByZXZlbnQgdGhlbSBmYWxsaW5n
Ci0gICAgLy8gdGhyb3VnaCB0byB0aGUgcGFnZSwgdW5sZXNzIHRoZXkgYXJlIE1ldGEga2V5IGV2
ZW50cywgaW4gd2hpY2gKLSAgICAvLyBjYXNlIHRoZXkgYXJlLCB1bmxlc3MgdGhleSBhcmUgQ21k
K2EuIEZyb20gV2ViS2l0MiwgcG9zc2libHkKLSAgICAvLyBub3QgdGhlIG1vc3QgZWxlZ2FudCBw
aWVjZSBvZiBrZXkgaGFuZGxpbmcgY29kZS4uLi4uCi0gICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkp
IHsKLSAgICAgICAgaWYgKGNvY29hRXZlbnQuZGF0YS5rZXkua2V5Q29kZSA9PSAwKQotICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gZWxzZSBpZ25vcmUsIGl0J3MgYSBNZXRhIEtleSBldmVudCBmb3IgdGhlIGJyb3dzZXIuCi0g
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLX0KLQotaW50MTZfdCBQ
bHVnaW5WaWV3OjpkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmIGNvY29hRXZlbnQp
Ci17Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotCi0gICAgaW50MTZfdCByZXNw
b25zZSA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmY29jb2FF
dmVudCk7Ci0KLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotICAgIHJldHVybiByZXNwb25zZTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0tLS0tLS0KLQot
TlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFt
ZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkK
LSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICBpZiAoIWZp
bGVFeGlzdHMoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
Ci0KLSAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgp
LCAiciIpOwotCi0gICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRh
KCksIDEsIDAsIGZpbGVIYW5kbGUpOwotCi0gICAgZmNsb3NlKGZpbGVIYW5kbGUpOwotCi0gICAg
aWYgKGJ5dGVzUmVhZCA8PSAwKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>
<flag name="review"
          id="261104"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="261128"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>