<?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>228854</bug_id>
          
          <creation_ts>2021-08-05 19:24:18 -0700</creation_ts>
          <short_desc>Remove inefficient use of HashMap from FormController along with a bit of other streamlining and modernizing</short_desc>
          <delta_ts>2021-08-24 11:33:09 -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>Forms</component>
          <version>WebKit Local 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1782428</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-08-05 19:24:18 -0700</bug_when>
    <thetext>Darin suggested some cleanups in FormController.cpp in https://bugs.webkit.org/show_bug.cgi?id=228724#c15.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784026</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-12 19:25:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/81880174&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784085</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-08-13 05:07:55 -0700</bug_when>
    <thetext>I’ll make those changes myself. Let me know if you’d prefer to do them or already started.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784086</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-08-13 05:08:16 -0700</bug_when>
    <thetext>I’m a bit concerned that there may not be enough test coverage for form saving and restoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784267</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-08-13 16:08:05 -0700</bug_when>
    <thetext>I have not started so feel free!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786073</commentid>
    <comment_count>5</comment_count>
      <attachid>436053</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-08-20 18:22:25 -0700</bug_when>
    <thetext>Created attachment 436053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786258</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-08-22 13:20:53 -0700</bug_when>
    <thetext>Passing all the tests and ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786412</commentid>
    <comment_count>7</comment_count>
      <attachid>436053</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-08-23 07:42:48 -0700</bug_when>
    <thetext>Comment on attachment 436053
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786847</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-24 11:33:06 -0700</bug_when>
    <thetext>Committed r281505 (240878@main): &lt;https://commits.webkit.org/240878@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436053.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436053</attachid>
            <date>2021-08-20 18:22:25 -0700</date>
            <delta_ts>2021-08-24 11:33:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228854-20210820182224.patch</filename>
            <type>text/plain</type>
            <size>34543</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg1NWUwOWJmNTY1YzIy
ODJkZjFhODIxMzQ3Y2RkYjkwODZjODk4Yy4uNjI2ZWY5MDJmMDBmNzE2YTA0NTkwNTc4M2E3Yzdj
NjJhMmQ2YTIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMS0wOC0xOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGluZWZmaWNpZW50
IHVzZSBvZiBIYXNoTWFwIGZyb20gRm9ybUNvbnRyb2xsZXIgYWxvbmcgd2l0aCBhIGJpdCBvZiBv
dGhlciBzdHJlYW1saW5pbmcgYW5kIG1vZGVybml6aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6b3duZXJGb3JtKTogUmVuYW1lZCBmcm9tIG93bmVyRm9ybUZvclN0YXRl
LiBSZW1vdmVkIHVubmVjZXNzYXJ5IHVzZSBvZgorICAgICAgICBpbmxpbmU7IHRydXN0IHRoZSBj
b21waWxlciB0byBpbmxpbmUgaWYgbmVlZGVkIHdpdGhvdXQgdGhlIGtleXdvcmQuIFJlbW92ZWQK
KyAgICAgICAgInVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXMiLiBVc2UgbnVsbHB0ciBpbnN0ZWFk
IG9mIDAuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdWZWN0b3JSZWFkZXI6OmNvbnN1bWVTdHJp
bmcpOiBBZGRlZC4gSGVscHMgcGFyc2UgYSB2ZWN0b3Igd2l0aG91dAorICAgICAgICBzbyBtYW55
IGluZGV4IHJhbmdlIGNoZWNrcy4gUmV0dXJucyBudWxsIHN0cmluZyBhdCBlbmQgb2YgdmVjdG9y
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nVmVjdG9yUmVhZGVyOjpjb25zdW1lU3VidmVjdG9y
KTogQWRkZWQuIEhlbHBzIHBhcnNlIGEgdmVjdG9yCisgICAgICAgIHdpdGhvdXQgc28gbWFueSBp
bmRleCByYW5nZSBjaGVja3MuIFJldHVybnMgdGhlIHN1YnZlY3Rvci4KKyAgICAgICAgKFdlYkNv
cmU6OmFwcGVuZFNlcmlhbGl6ZWRGb3JtQ29udHJvbFN0YXRlKTogUmVuYW1lZCBmcm9tCisgICAg
ICAgIHNlcmlhbGl6ZUZvcm1Db250cm9sU3RhdGVUbyB0byBtYWtlIGNsZWFyIHRoaXMgYXBwZW5k
cyB0byBhbiBleGlzdGluZyB2ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lU2VyaWFs
aXplZEZvcm1Db250cm9sU3RhdGUpOiBSZW5hbWVkIGZyb20KKyAgICAgICAgZGVzZXJpYWxpemVG
b3JtQ29udHJvbFN0YXRlIHRvIG1ha2UgY2xlYXIgdGhpcyByZWFkcyBwYXJ0IG9mIGEgdmVjdG9y
IGFuZAorICAgICAgICBpbmRpY2F0ZXMgd2hhdCB3YXMgcmVhZC4gVXNlIHRoZSBTdHJpbmdWZWN0
b3JSZWFkZXIgY2xhc3MgZm9yIHRoZSBhcmd1bWVudCB0eXBlCisgICAgICAgIHRvIG1ha2UgdGhh
dCBjbGVhci4gUmVmYWN0b3JlZCB0byB1c2UgdGhlIG5ldyBjb25zdW1lU3RyaW5nIGFuZCBjb25z
dW1lU3VidmVjdG9yCisgICAgICAgIGZ1bmN0aW9ucy4gQWxzbyB1c2UgcGFyc2VJbnRlZ2VyIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvdyB0cmFpbGluZyBqdW5rLgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUVsZW1lbnRLZXkpOiBEZWxldGVkIHRoaXMgZW50aXJlIGNsYXNzLCBraW5k
IG9mIGEgbG90IG9mIGNvZGUsCisgICAgICAgIGJlY2F1c2Ugd2UgY2FuIGluc3RlYWQgdXNlIHN0
ZDo6cGFpciBhbmQgb25seSBsb3NlIGEgbGl0dGxlIGJpdCBvZiBjbGFyaXR5LgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlKTogTWFkZSB0aGlzIGNsYXNz
IGEgbWVtYmVyIG9mCisgICAgICAgIEZvcm1Db250cm9sbGVyLiBBbHNvIHVzZSBzdGQ6OnBhaXIs
IHJlbmFtZWQgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cyB0byBtX21hcCwKKyAgICAgICAgYW5k
IHJlbW92ZWQgbV9jb250cm9sU3RhdGVDb3VudC4gVGhlIG9ubHkgY29kZSB0aGF0IHdhcyB1c2lu
ZyB0aGlzIHdhcworICAgICAgICBpbiBTYXZlZEZvcm1TdGF0ZTo6c2VyaWFsaXplVG8sIGFuZCB0
aGF0IGluIHR1cm4gd2FzIG9ubHkgdXNlZCBvbiBhCisgICAgICAgIFNhdmVkRm9ybVN0YXRlIHdo
aWNoIGNvbnRhaW5lZAorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6
ZVRvIGNvbnN0KTogRGVsZXRlZC4gQWxsIHRoZSBsb2dpYyBmcm9tIHRoaXMKKyAgICAgICAgZnVu
Y3Rpb24gaXMgbm93IGluIHRoZSBGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3RhdGUgZnVu
Y3Rpb24sIHdoaWNoIGlzCisgICAgICAgIHRoZSBvbmx5IHBsYWNlIGl0IHdhcyB1c2VkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlOjpjb25zdW1lU2Vy
aWFsaXplZFN0YXRlKTogUmVuYW1lZAorICAgICAgICBmcm9tIGRlc2VyaWFsaXplIHRvIG1ha2Ug
aXQgY2xlYXIgdGhhdCBpdCByZWFkcyBwYXJ0IG9mIGEgdmVjdG9yIGFuZCBpbmRpY2F0ZXMKKyAg
ICAgICAgd2hhdCBpcyByZWFkLiBVc2UgdGhlIFN0cmluZ1ZlY3RvclJlYWRlciBjbGFzcyBmb3Ig
dGhlIGFyZ3VtZW50IHR5cGUgdG8gbWFrZQorICAgICAgICB0aGF0IGNsZWFyLiBNb3ZlZCB0aGUg
aXNOb3RGb3JtQ29udHJvbFR5cGVDaGFyYWN0ZXIgZnJvbSBhIHNlcGFyYXRlIGZ1bmN0aW9uCisg
ICAgICAgIHRvIGJlIGEgbGFtYmRhIGluc2lkZSB0aGlzIGZ1bmN0aW9uLiBVc2UgY29uc3VtZVN0
cmluZywgU3RyaW5nVmlldzo6Y29udGFpbnMsCisgICAgICAgIGFuZCBjb25zdW1lU2VyaWFsaXpl
ZEZvcm1Db250cm9sU3RhdGUgdG8gc3RyZWFtbGluZSB0aGUgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIE1vdmVkIGNhbGwgdG8gSGFzaE1hcDo6YWRkIGhlcmUgaW5zdGVhZCBvZiBzZXBhcmF0ZSBh
cHBlbmRDb250cm9sU3RhdGUKKyAgICAgICAgZnVuY3Rpb24gc2luY2Ugd2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8gdHJhY2sgbV9jb250cm9sU3RhdGVDb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OlNhdmVk
Rm9ybVN0YXRlOjphcHBlbmRDb250cm9sU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlOjp0YWtlQ29udHJvbFN0YXRlKTogVGFr
ZSB0aGUgYXJndW1lbnRzCisgICAgICAgIGFzIGEgRm9ybUVsZW1lbnRLZXksIGFscmVhZHkgaW4g
YSBwYWlyLCBpbnN0ZWFkIG9mIGFzIHR3byBzZXBhcmF0ZSB2YWx1ZXMuCisgICAgICAgIFJlbW92
ZWQgdGhlIGNvZGUgdG8gbWFpbnRhaW4gbV9jb250cm9sU3RhdGVDb3VudC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZTo6YXBwZW5kUmVmZXJlbmNlZEZp
bGVQYXRocyBjb25zdCk6CisgICAgICAgIFJlbmFtZWQgZnJvbSByZWZlcmVuY2VkRmlsZVBhdGhz
IGFuZCBjaGFuZ2UgdGhpcyB0byBhcHBlbmQgdG8gYW4gZXhpc3RpbmcKKyAgICAgICAgdmVjdG9y
LCBzaW5jZSB0aGF0J3Mgd2hhdCB0aGUgb25seSBjYWxsZXIgd2FzIGRvaW5nLgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OkZvcm1LZXlHZW5lcmF0b3IpOiBNYWRlIHRoaXMgY2xh
c3MgYSBtZW1iZXIgb2YKKyAgICAgICAgRm9ybUNvbnRyb2xsZXIuIEFsc28gY2hhbmdlZCB0byBq
dXN0IHVzZSBTdHJpbmcgZm9yIHRoZSBmb3JtS2V5LCBzaW5jZSB0aGVyZQorICAgICAgICBpcyBu
byBzaWduaWZpY2FudCBzaGFyaW5nIG9yIG90aGVyIG9wdGltaXphdGlvbiBtYWRlIHBvc3NpYmxl
IGJ5IHVzaW5nCisgICAgICAgIEF0b21TdHJpbmcuIEFsc28gdXNlIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyIGluIG9uZSBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OnJlY29yZEZv
cm1TdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVNpZ25hdHVyZSk6
IE1lcmdlIGluIHRoZSBsb2dpYyBmcm9tIHRoZSByZWNvcmRGb3JtU3RydWN0dXJlCisgICAgICAg
IGZ1bmN0aW9uLCBzaW5jZSB0aGF0IHdhcyBhbiBhd2t3YXJkIGZ1bmN0aW9uIG5hbWUgYW5kIHRo
aXMgaXMgY2xlYXJlciBhcworICAgICAgICBqdXN0IG9uZSBmdW5jdGlvbi4gQWRkZWQgYSBjb21t
ZW50IGFib3V0IGZyYWdtZW50IGlkZW50aWZpZXJzLiBVc2UgdW5zaWduZWQKKyAgICAgICAgaW5z
dGVhZCBvZiBzaXplX3QgdG8gY291bnQgdXAgdG8gMi4gSW1wcm92ZWQgdGhlIGNvbW1lbnQgYWJv
dXQgd2h5IHRoZQorICAgICAgICBtYXhpbXVtIGlzIDIgYW5kIHVzZWQgc2ltcGxlciBsb29wIGxv
Z2ljLCBpczw+IGluc3RlYWQgb2YgYSBzcGVjaWZpYworICAgICAgICBmdW5jdGlvbiBjYWxsLCBk
b3duY2FzdDw+IGluc3RlYWQgb2Ygc3RhdGljX2Nhc3Q8PiwgYW5kIFJlZiBpbnN0ZWFkIG9mIFJl
ZlB0cjwuLi4+LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OkZvcm1LZXlHZW5l
cmF0b3I6OmZvcm1LZXkpOiBVc2UgUmVmUHRyIG9uIHRoZQorICAgICAgICBsZWZ0IHNpZGUgaW5z
dGVhZCBvZiBtYWtlUmVmUHRyLiBVc2UgU3RyaW5nIGluc3RlYWQgb2YgQXRvbVN0cmluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpGb3JtS2V5R2VuZXJhdG9yOjp3aWxsRGVs
ZXRlRm9ybSk6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpmb3JtU3RhdGVT
aWduYXR1cmUpOiBVc2UgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKTogRGVsZXRlZC4gVGhp
cyB3YXMgb25seQorICAgICAgICBldmVyIHVzZWQgYnkgZm9ybUVsZW1lbnRzU3RhdGUsIHdoaWNo
IGRvZXMgbm90IG5lZWQgYSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6
Zm9ybUVsZW1lbnRzU3RhdGUgY29uc3QpOiBVc2UgYSB2ZWN0b3IgdGhhdAorICAgICAgICB1c2Vz
IFJlZjw+IHNpbmNlIGl0J3MgYSBsaXR0bGUgc2FmZXIgZm9yIG9iamVjdCBsaWZldGltZSBhbmQg
dGhhdCBhbHNvIHN0b3JlcworICAgICAgICB0aGUgZm9ybSBrZXkgc28gd2UgY2FuIGdyb3VvcCBj
b250cm9scyBpbiB0aGUgc2FtZSBmb3JtIGFzIHBhcnQgb2Ygc29ydGluZy4KKyAgICAgICAgQWRk
ZWQgYW4gZWFybHkgcmV0dXJuIHdoZW4gdGhlcmUgYXJlIG5vIGNvbnRyb2xzIGluc3RlYWQgb2YK
KyAgICAgICAgZGV0ZWN0aW5nIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIE1vdmVk
IHRoZSBjb2RlIGZyb20KKyAgICAgICAgY3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAgYW5kIFNhdmVk
Rm9ybVN0YXRlOjpzZXJpYWxpemVUbyBpbiBoZXJlIHRvIGF2b2lkCisgICAgICAgIGNyZWF0aW5n
IGEgSGFzaE1hcCBqdXN0IHRvIGl0ZXJhdGUgaXQgYW5kIGJ1aWxkIGEgc3RyaW5nIHZlY3Rvciwg
dXNpbmcKKyAgICAgICAgc29ydGluZyB0byBncm91cCBhbmQgY291bnQgdGhlIGNvbnRyb2xzIGlu
IGVhY2ggZm9ybS4gVXNlIHNocmlua1RvRml0IHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGUgdmVj
dG9yIGlzIG5vdCBwZXJtYW5lbnRseSBvdmVyYWxsb2NhdGVkIGluc3RlYWQgb2YgYW4gYWx3YXlz
LXRvby1zbWFsbAorICAgICAgICByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUNvbnRyb2xsZXI6OnNldFN0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKTogVXBkYXRl
IGZvciB0aGUgY2hhbmdlIGluCisgICAgICAgIHBhcnNlU3RhdGVWZWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQpOiBVcGRhdGVk
IGZvciB0aGUgY2hhbmdlIHRvCisgICAgICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAgdmFsdWVzLiBV
c2UgYXV0byBhIGJpdCBhbmQgIml0ZXJhdG9yIiBpbnN0ZWQgb2YgIml0Ii4KKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Db250cm9sbGVyOjpwYXJzZVN0YXRlVmVjdG9yKTogUmVuYW1lZCBmcm9tCisg
ICAgICAgIGZvcm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3IgYW5kIGNoYW5nZWQgdG8gdXNlIGEgcmV0
dXJuIHZhbHVlIGluc3RlYWQgb2YgYW4gb3V0CisgICAgICAgIGFyZ3VtZW50LiBVc2UgU3RyaW5n
VmVjdG9yUmVhZGVyIGFuZCBjb25zdW1lU3RyaW5nIHRvIHN0cmVhbWxpbmUgdGhlIGNvZGUgYW5k
CisgICAgICAgIG1ha2UgaXQgYSBiaXQgbW9yZSBmb29scHJvb2YuIENoZWNrIHRoZSBleGhhdXN0
aW9uIG9mIHRoZSBpbnB1dCB2ZWN0b3IgaW5zaWRlCisgICAgICAgIHRoZSBsb29wIGluc3RlYWQg
b2YgY2hlY2tpbmcgZm9yIGFuIGVycm9yIGFmdGVyIHRoZSBsb29wLgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUNvbnRyb2xsZXI6OndpbGxEZWxldGVGb3JtKTogUGFzcyBhIHJlZmVyZW5jZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpyZXN0b3JlQ29udHJvbFN0YXRlRm9yKTog
VHdlYWsgY29tbWVudCBhbmQgdXNlIHx8CisgICAgICAgIGluc3RlYWQgb2YgdHdvIHNlcGFyYXRl
IGlmIHN0YXRlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6cmVzdG9y
ZUNvbnRyb2xTdGF0ZUluKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxl
cjo6cmVmZXJlbmNlZEZpbGVQYXRocyk6IFVzZSBwYXJzZVN0YXRlVmVjdG9yIGFuZAorICAgICAg
ICBhcHBlbmRSZWZlcmVuY2VkRmlsZVBhdGhzLgorCisgICAgICAgICogaHRtbC9Gb3JtQ29udHJv
bGxlci5oOiBSZW1vdmVkIGFsbW9zdCBhbGwgdGhlIGluY2x1ZGVzLCB3aGljaCB3ZXJlIG5vdCBu
ZWVkZWQuCisgICAgICAgIE1hZGUgdGhlIEZvcm1LZXlHZW5lcmF0b3IgYW5kIFNhdmVkRm9ybVN0
YXRlIGNsYXNzZXMgbWVtYmVycyBvZiBGb3JtQ29udHJvbGxlci4KKyAgICAgICAgQ2hhbmdlZCBT
YXZlZEZvcm1TdGF0ZU1hcCB0byB1c2UgU3RyaW5nIGFzIHRoZSBrZXkgaW5zdGVhZCBvZiBSZWZQ
dHI8QXRvbVN0cmluZ0ltcGw+LAorICAgICAgICBubyBuZWVkIGZvciB0aGUgZXhvdGljIHR5cGUu
IENoYW5nZWQgU2F2ZWRGb3JtU3RhdGVNYXAgdG8gdXNlIFNhdmVkRm9ybVN0YXRlCisgICAgICAg
IGFzIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIHN0ZDo6dW5pcXVlX3B0cjxTYXZlZEZvcm1TdGF0ZT4u
IFJlbW92ZWQgdGhlIHVudXNlZAorICAgICAgICBtZW1iZXIgZnVuY3Rpb24gY3JlYXRlU2F2ZWRG
b3JtU3RhdGVNYXAgYW5kIHJlbmFtZWQgZm9ybVN0YXRlc0Zyb21TdGF0ZVZlY3RvcgorICAgICAg
ICB0byBwYXJzZVN0YXRlVmVjdG9yIGFuZCBjaGFuZ2VkIGl0IHRvIHVzZSBhIHJldHVybiB2YWx1
ZS4KKwogMjAyMS0wOC0yMCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0lGQ11bSW50ZWdyYXRpb25dIEVuYWJsZSBub24tYXV0byBsaW5lLWJyZWFrIHZhbHVlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAppbmRleCAzMzUyMmNmNGZlZWI5M2Zh
MjliNWE3NzdmYjk3YzE4ZmViOTU3Zjg0Li4yMThiOGE3MGRlNGYyZDNiNmI5ZWQxNDMyMjFhOGQ4
MTZkZDg2NWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMywxOSArMzMs
NDEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotCi1zdGF0aWMgaW5saW5lIEhUTUxGb3JtRWxlbWVudCogb3duZXJGb3JtRm9yU3RhdGUoY29u
c3QgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSYgY29udHJvbCkKK3N0YXRpYyBIVE1M
Rm9ybUVsZW1lbnQqIG93bmVyRm9ybShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlJiBjb250cm9sKQogewogICAgIC8vIEFzc3VtZSBjb250cm9scyB3aXRoIGZvcm0gYXR0cmli
dXRlIGhhdmUgbm8gb3duZXJzIGJlY2F1c2Ugd2UgcmVzdG9yZQogICAgIC8vIHN0YXRlIGR1cmlu
ZyBwYXJzaW5nIGFuZCBmb3JtIG93bmVycyBvZiBzdWNoIGNvbnRyb2xzIG1pZ2h0IGJlCiAgICAg
Ly8gaW5kZXRlcm1pbmF0ZS4KLSAgICByZXR1cm4gY29udHJvbC5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGZvcm1BdHRyKSA/IDAgOiBjb250cm9sLmZvcm0oKTsKKyAgICByZXR1
cm4gY29udHJvbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
Zm9ybUF0dHIpID8gbnVsbHB0ciA6IGNvbnRyb2wuZm9ybSgpOworfQorCitzdHJ1Y3QgU3RyaW5n
VmVjdG9yUmVhZGVyIHsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yOworICAgIHNp
emVfdCBpbmRleCB7IDAgfTsKKworICAgIGNvbnN0IFN0cmluZyYgY29uc3VtZVN0cmluZygpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGNvbnN1bWVTdWJ2ZWN0b3Ioc2l6ZV90IHN1YnZlY3RvclNpemUp
OworfTsKKworY29uc3QgU3RyaW5nJiBTdHJpbmdWZWN0b3JSZWFkZXI6OmNvbnN1bWVTdHJpbmco
KQoreworICAgIGlmIChpbmRleCA9PSB2ZWN0b3Iuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVs
bFN0cmluZygpOworICAgIHJldHVybiB2ZWN0b3JbaW5kZXgrK107Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFN0cmluZ1ZlY3RvclJlYWRlcjo6Y29uc3VtZVN1YnZlY3RvcihzaXplX3Qgc3VidmVjdG9y
U2l6ZSkKK3sKKyAgICBpZiAoc3VidmVjdG9yU2l6ZSA+IHZlY3Rvci5zaXplKCkgLSBpbmRleCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHN1YnZlY3RvckluZGV4ID0gaW5kZXg7Cisg
ICAgaW5kZXggKz0gc3VidmVjdG9yU2l6ZTsKKyAgICByZXR1cm4geyB2ZWN0b3IuZGF0YSgpICsg
c3VidmVjdG9ySW5kZXgsIHN1YnZlY3RvclNpemUgfTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi0vLyBTZXJpbGl6ZWQgZm9ybSBvZiBGb3JtQ29udHJvbFN0YXRlOgorLy8gU2VyaWFs
aXplZCBmb3JtIG9mIEZvcm1Db250cm9sU3RhdGU6CiAvLyAgKCcsJyBtZWFucyBzdHJpbmdzIGFy
b3VuZCBpdCBhcmUgc2VwYXJhdGVkIGluIHN0YXRlVmVjdG9yLikKIC8vCiAvLyBTZXJpYWxpemVk
Q29udHJvbFN0YXRlIDo6PSBTa2lwU3RhdGUgfCBSZXN0b3JlU3RhdGUKQEAgLTU0LDI4NyArNzYs
MTU1IEBAIHN0YXRpYyBpbmxpbmUgSFRNTEZvcm1FbGVtZW50KiBvd25lckZvcm1Gb3JTdGF0ZShj
b25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0CiAvLyBVbnNpZ25lZE51bWJlciA6Oj0gWzAt
OV0rCiAvLyBDb250cm9sVmFsdWUgOjo9IGFyYml0cmFyeSBzdHJpbmcKIC8vCi0vLyBSZXN0b3Jl
U3RhdGUgaGFzIGEgc2VxdWVuY2Ugb2YgQ29udHJvbFZhbHVlcy4gVGhlIGxlbmd0aCBvZiB0aGUK
LS8vIHNlcXVlbmNlIGlzIHJlcHJlc2VudGVkIGJ5IFVuc2lnbmVkTnVtYmVyLgorLy8gVGhlIFVu
c2lnbmVkTnVtYmVyIGluIFJlc3RvcmVTdGF0ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5j
ZSBvZiBDb250cm9sVmFsdWVzLgogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsaXplRm9ybUNv
bnRyb2xTdGF0ZVRvKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmIGZvcm1Db250cm9sU3RhdGUsIFZl
Y3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikKK3N0YXRpYyB2b2lkIGFwcGVuZFNlcmlhbGl6ZWRG
b3JtQ29udHJvbFN0YXRlKFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IsIGNvbnN0IEZvcm1Db250cm9s
U3RhdGUmIHN0YXRlKQogewotICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlcihm
b3JtQ29udHJvbFN0YXRlLnNpemUoKSkpOwotICAgIGZvciAoYXV0byYgdmFsdWUgOiBmb3JtQ29u
dHJvbFN0YXRlKQotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQodmFsdWUuaXNOdWxsKCkgPyBl
bXB0eVN0cmluZygpIDogdmFsdWUpOworICAgIHZlY3Rvci5hcHBlbmQoU3RyaW5nOjpudW1iZXIo
c3RhdGUuc2l6ZSgpKSk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHN0YXRlKQorICAgICAgICB2
ZWN0b3IuYXBwZW5kKHZhbHVlLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHZhbHVlKTsKIH0K
IAotc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPEZvcm1Db250cm9sU3RhdGU+IGRlc2VyaWFs
aXplRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IsIHNp
emVfdCYgaW5kZXgpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxGb3JtQ29udHJvbFN0YXRlPiBjb25z
dW1lU2VyaWFsaXplZEZvcm1Db250cm9sU3RhdGUoU3RyaW5nVmVjdG9yUmVhZGVyJiByZWFkZXIp
CiB7Ci0gICAgaWYgKGluZGV4ID49IHN0YXRlVmVjdG9yLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICBhdXRvIHNpemUgPSBwYXJzZUludGVnZXJBbGxvd2luZ1RyYWls
aW5nSnVuazxzaXplX3Q+KHN0YXRlVmVjdG9yW2luZGV4KytdKS52YWx1ZV9vcigwKTsKLSAgICBp
ZiAoaW5kZXggKyBzaXplID4gc3RhdGVWZWN0b3Iuc2l6ZSgpKQorICAgIGF1dG8gc2l6ZVN0cmlu
ZyA9IHJlYWRlci5jb25zdW1lU3RyaW5nKCk7CisgICAgaWYgKHNpemVTdHJpbmcuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgVmVjdG9yPFN0cmluZz4gc3VidmVj
dG9yOwotICAgIHN1YnZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBzdWJ2ZWN0b3IudW5jaGVj
a2VkQXBwZW5kKHN0YXRlVmVjdG9yW2luZGV4KytdKTsKLSAgICByZXR1cm4gc3VidmVjdG9yOwor
ICAgIHJldHVybiByZWFkZXIuY29uc3VtZVN1YnZlY3RvcihwYXJzZUludGVnZXI8c2l6ZV90Pihz
aXplU3RyaW5nKS52YWx1ZV9vcigwKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
Y2xhc3MgRm9ybUVsZW1lbnRLZXkgewotcHVibGljOgotICAgIGV4cGxpY2l0IEZvcm1FbGVtZW50
S2V5KEF0b21TdHJpbmdJbXBsKiA9IG51bGxwdHIsIEF0b21TdHJpbmdJbXBsKiA9IG51bGxwdHIp
OwotICAgIH5Gb3JtRWxlbWVudEtleSgpOwotICAgIEZvcm1FbGVtZW50S2V5KGNvbnN0IEZvcm1F
bGVtZW50S2V5Jik7Ci0gICAgRm9ybUVsZW1lbnRLZXkmIG9wZXJhdG9yPShjb25zdCBGb3JtRWxl
bWVudEtleSYpOwotCi0gICAgQXRvbVN0cmluZ0ltcGwqIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KLSAgICBBdG9tU3RyaW5nSW1wbCogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotCi0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkg
Y29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgRm9ybUVsZW1l
bnRLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fbmFtZShoYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi1wcml2
YXRlOgotICAgIHZvaWQgcmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBkZXJlZigpIGNvbnN0OwotCi0g
ICAgc3RhdGljIEF0b21TdHJpbmdJbXBsKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PEF0b21TdHJpbmdJbXBsKj4oLTEpOyB9Ci0KLSAgICBBdG9tU3Ry
aW5nSW1wbCogbV9uYW1lOwotICAgIEF0b21TdHJpbmdJbXBsKiBtX3R5cGU7Ci19OwotCi1Gb3Jt
RWxlbWVudEtleTo6Rm9ybUVsZW1lbnRLZXkoQXRvbVN0cmluZ0ltcGwqIG5hbWUsIEF0b21TdHJp
bmdJbXBsKiB0eXBlKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX3R5cGUodHlwZSkKLXsK
LSAgICByZWYoKTsKLX0KLQotRm9ybUVsZW1lbnRLZXk6On5Gb3JtRWxlbWVudEtleSgpCi17Ci0g
ICAgZGVyZWYoKTsKLX0KLQotRm9ybUVsZW1lbnRLZXk6OkZvcm1FbGVtZW50S2V5KGNvbnN0IEZv
cm1FbGVtZW50S2V5JiBvdGhlcikKLSAgICA6IG1fbmFtZShvdGhlci5uYW1lKCkpCi0gICAgLCBt
X3R5cGUob3RoZXIudHlwZSgpKQotewotICAgIHJlZigpOwotfQotCi1Gb3JtRWxlbWVudEtleSYg
Rm9ybUVsZW1lbnRLZXk6Om9wZXJhdG9yPShjb25zdCBGb3JtRWxlbWVudEtleSYgb3RoZXIpCi17
Ci0gICAgb3RoZXIucmVmKCk7Ci0gICAgZGVyZWYoKTsKLSAgICBtX25hbWUgPSBvdGhlci5uYW1l
KCk7Ci0gICAgbV90eXBlID0gb3RoZXIudHlwZSgpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
dm9pZCBGb3JtRWxlbWVudEtleTo6cmVmKCkgY29uc3QKLXsKLSAgICBpZiAobmFtZSgpKQotICAg
ICAgICBuYW1lKCktPnJlZigpOwotICAgIGlmICh0eXBlKCkpCi0gICAgICAgIHR5cGUoKS0+cmVm
KCk7Ci19Ci0KLXZvaWQgRm9ybUVsZW1lbnRLZXk6OmRlcmVmKCkgY29uc3QKLXsKLSAgICBpZiAo
bmFtZSgpKQotICAgICAgICBuYW1lKCktPmRlcmVmKCk7Ci0gICAgaWYgKHR5cGUoKSkKLSAgICAg
ICAgdHlwZSgpLT5kZXJlZigpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
cm1FbGVtZW50S2V5JiBhLCBjb25zdCBGb3JtRWxlbWVudEtleSYgYikKLXsKLSAgICByZXR1cm4g
YS5uYW1lKCkgPT0gYi5uYW1lKCkgJiYgYS50eXBlKCkgPT0gYi50eXBlKCk7Ci19Ci0KLXN0cnVj
dCBGb3JtRWxlbWVudEtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZv
cm1FbGVtZW50S2V5Jik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9ybUVsZW1lbnRL
ZXkmIGEsIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19
OwotCi11bnNpZ25lZCBGb3JtRWxlbWVudEtleUhhc2g6Omhhc2goY29uc3QgRm9ybUVsZW1lbnRL
ZXkmIGtleSkKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihG
b3JtRWxlbWVudEtleSk+KCZrZXkpOwotfQotCi1zdHJ1Y3QgRm9ybUVsZW1lbnRLZXlIYXNoVHJh
aXRzIDogSGFzaFRyYWl0czxGb3JtRWxlbWVudEtleT4gewotICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShGb3JtRWxlbWVudEtleSYgc2xvdCkgeyBuZXcgKE5vdE51bGwsICZz
bG90KSBGb3JtRWxlbWVudEtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7IH0KLSAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb3JtRWxlbWVudEtleSYgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLX07Ci0KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgU2F2ZWRGb3JtU3RhdGUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNhdmVkRm9ybVN0YXRlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LQorY2xhc3MgRm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlIHsKIHB1YmxpYzoKLSAgICBT
YXZlZEZvcm1TdGF0ZSgpID0gZGVmYXVsdDsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNh
dmVkRm9ybVN0YXRlPiBkZXNlcmlhbGl6ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIHNpemVfdCYg
aW5kZXgpOwotICAgIHZvaWQgc2VyaWFsaXplVG8oVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKLSAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRz
LmlzRW1wdHkoKTsgfQotICAgIHZvaWQgYXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIGNvbnN0IEZvcm1Db250cm9sU3RhdGUm
KTsKLSAgICBGb3JtQ29udHJvbFN0YXRlIHRha2VDb250cm9sU3RhdGUoY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSk7CisgICAgc3RhdGljIFNhdmVkRm9ybVN0
YXRlIGNvbnN1bWVTZXJpYWxpemVkU3RhdGUoU3RyaW5nVmVjdG9yUmVhZGVyJik7CiAKLSAgICBW
ZWN0b3I8U3RyaW5nPiByZWZlcmVuY2VkRmlsZVBhdGhzKCkgY29uc3Q7CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CiAKLXByaXZhdGU6Ci0gICAg
SGFzaE1hcDxGb3JtRWxlbWVudEtleSwgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4sIEZvcm1FbGVt
ZW50S2V5SGFzaCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBtX3N0YXRlRm9yTmV3Rm9ybUVs
ZW1lbnRzOwotICAgIHNpemVfdCBtX2NvbnRyb2xTdGF0ZUNvdW50IHsgMCB9OwotfTsKKyAgICB1
c2luZyBGb3JtRWxlbWVudEtleSA9IHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPjsK
KyAgICBGb3JtQ29udHJvbFN0YXRlIHRha2VDb250cm9sU3RhdGUoY29uc3QgRm9ybUVsZW1lbnRL
ZXkmKTsKIAotc3RhdGljIGJvb2wgaXNOb3RGb3JtQ29udHJvbFR5cGVDaGFyYWN0ZXIoVUNoYXIg
Y2gpCi17Ci0gICAgcmV0dXJuICEoY2ggPT0gJy0nIHx8IGlzQVNDSUlMb3dlcihjaCkpOwotfQor
ICAgIHZvaWQgYXBwZW5kUmVmZXJlbmNlZEZpbGVQYXRocyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0
OwogCi1zdGQ6OnVuaXF1ZV9wdHI8U2F2ZWRGb3JtU3RhdGU+IFNhdmVkRm9ybVN0YXRlOjpkZXNl
cmlhbGl6ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IsIHNpemVfdCYgaW5kZXgp
Ci17Ci0gICAgaWYgKGluZGV4ID49IHN0YXRlVmVjdG9yLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byBpdGVtQ291bnQgPSBwYXJzZUludGVnZXJBbGxvd2luZ1RyYWls
aW5nSnVuazxzaXplX3Q+KHN0YXRlVmVjdG9yW2luZGV4KytdKS52YWx1ZV9vcigwKTsKLSAgICBp
ZiAoIWl0ZW1Db3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBzYXZlZEZv
cm1TdGF0ZSA9IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGU+KCk7Ci0gICAgd2hpbGUgKGl0ZW1D
b3VudC0tKSB7Ci0gICAgICAgIGlmIChpbmRleCArIDEgPj0gc3RhdGVWZWN0b3Iuc2l6ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gc3RhdGVW
ZWN0b3JbaW5kZXgrK107Ci0gICAgICAgIFN0cmluZyB0eXBlID0gc3RhdGVWZWN0b3JbaW5kZXgr
K107Ci0gICAgICAgIGF1dG8gc3RhdGUgPSBkZXNlcmlhbGl6ZUZvcm1Db250cm9sU3RhdGUoc3Rh
dGVWZWN0b3IsIGluZGV4KTsKLSAgICAgICAgaWYgKHR5cGUuaXNFbXB0eSgpIHx8IHR5cGUuZmlu
ZChpc05vdEZvcm1Db250cm9sVHlwZUNoYXJhY3RlcikgIT0gbm90Rm91bmQgfHwgIXN0YXRlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNhdmVkRm9ybVN0YXRlLT5hcHBl
bmRDb250cm9sU3RhdGUobmFtZSwgdHlwZSwgc3RhdGUudmFsdWUoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBzYXZlZEZvcm1TdGF0ZTsKLX0KK3ByaXZhdGU6CisgICAgSGFzaE1hcDxGb3JtRWxlbWVu
dEtleSwgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4+IG1fbWFwOworfTsKIAotdm9pZCBTYXZlZEZv
cm1TdGF0ZTo6c2VyaWFsaXplVG8oVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAot
ewotICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNv
dW50KSk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50
cykgewotICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gZWxlbWVudC5rZXk7Ci0g
ICAgICAgIGZvciAoYXV0byYgY29udHJvbFN0YXRlIDogZWxlbWVudC52YWx1ZSkgewotICAgICAg
ICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS5uYW1lKCkpOwotICAgICAgICAgICAgc3RhdGVW
ZWN0b3IuYXBwZW5kKGtleS50eXBlKCkpOwotICAgICAgICAgICAgc2VyaWFsaXplRm9ybUNvbnRy
b2xTdGF0ZVRvKGNvbnRyb2xTdGF0ZSwgc3RhdGVWZWN0b3IpOwotICAgICAgICB9CitGb3JtQ29u
dHJvbGxlcjo6U2F2ZWRGb3JtU3RhdGUgRm9ybUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlOjpj
b25zdW1lU2VyaWFsaXplZFN0YXRlKFN0cmluZ1ZlY3RvclJlYWRlciYgcmVhZGVyKQoreworICAg
IGF1dG8gaXNOb3RGb3JtQ29udHJvbFR5cGVDaGFyYWN0ZXIgPSBbXShVQ2hhciBjaGFyYWN0ZXIp
IHsKKyAgICAgICAgcmV0dXJuICEoY2hhcmFjdGVyID09ICctJyB8fCBpc0FTQ0lJTG93ZXIoY2hh
cmFjdGVyKSk7CisgICAgfTsKKworICAgIFNhdmVkRm9ybVN0YXRlIHJlc3VsdDsKKyAgICBhdXRv
IGNvdW50ID0gcGFyc2VJbnRlZ2VyPHNpemVfdD4ocmVhZGVyLmNvbnN1bWVTdHJpbmcoKSkudmFs
dWVfb3IoMCk7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgYXV0byYgbmFtZSA9IHJl
YWRlci5jb25zdW1lU3RyaW5nKCk7CisgICAgICAgIGF1dG8mIHR5cGUgPSByZWFkZXIuY29uc3Vt
ZVN0cmluZygpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgU3RyaW5nVmlldyB7IHR5
cGUgfS5jb250YWlucyhpc05vdEZvcm1Db250cm9sVHlwZUNoYXJhY3RlcikpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICBhdXRvIHN0YXRlID0gY29uc3VtZVNlcmlhbGl6ZWRGb3Jt
Q29udHJvbFN0YXRlKHJlYWRlcik7CisgICAgICAgIGlmICghc3RhdGUpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICByZXN1bHQubV9tYXAuYWRkKHsgbmFtZSwgdHlwZSB9LCBEZXF1
ZTxGb3JtQ29udHJvbFN0YXRlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSgq
c3RhdGUpKTsKICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTYXZlZEZvcm1T
dGF0ZTo6YXBwZW5kQ29udHJvbFN0YXRlKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGNvbnN0IEF0
b21TdHJpbmcmIHR5cGUsIGNvbnN0IEZvcm1Db250cm9sU3RhdGUmIHN0YXRlKQorRm9ybUNvbnRy
b2xTdGF0ZSBGb3JtQ29udHJvbGxlcjo6U2F2ZWRGb3JtU3RhdGU6OnRha2VDb250cm9sU3RhdGUo
Y29uc3QgRm9ybUVsZW1lbnRLZXkmIGtleSkKIHsKLSAgICBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzLmFkZChGb3JtRWxlbWVudEtleSB7IG5hbWUuaW1wbCgpLCB0eXBlLmltcGwoKSB9LCBEZXF1
ZTxGb3JtQ29udHJvbFN0YXRlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RhdGUpOwot
ICAgICsrbV9jb250cm9sU3RhdGVDb3VudDsKLX0KLQotRm9ybUNvbnRyb2xTdGF0ZSBTYXZlZEZv
cm1TdGF0ZTo6dGFrZUNvbnRyb2xTdGF0ZShjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBjb25zdCBB
dG9tU3RyaW5nJiB0eXBlKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3N0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzLmZpbmQoRm9ybUVsZW1lbnRLZXkgeyBuYW1lLmltcGwoKSwgdHlwZS5pbXBsKCkg
fSk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZW5kKCkp
CisgICAgYXV0byBpdGVyYXRvciA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07Ci0KICAgICBhdXRvIHN0YXRlID0g
aXRlcmF0b3ItPnZhbHVlLnRha2VGaXJzdCgpOwotICAgIC0tbV9jb250cm9sU3RhdGVDb3VudDsK
ICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cy5yZW1vdmUoaXRlcmF0b3IpOworICAgICAgICBtX21hcC5yZW1vdmUoaXRl
cmF0b3IpOwogICAgIHJldHVybiBzdGF0ZTsKIH0KIAotVmVjdG9yPFN0cmluZz4gU2F2ZWRGb3Jt
U3RhdGU6OnJlZmVyZW5jZWRGaWxlUGF0aHMoKSBjb25zdAordm9pZCBGb3JtQ29udHJvbGxlcjo6
U2F2ZWRGb3JtU3RhdGU6OmFwcGVuZFJlZmVyZW5jZWRGaWxlUGF0aHMoVmVjdG9yPFN0cmluZz4m
IHZlY3RvcikgY29uc3QKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiB0b1JldHVybjsKLSAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKSB7Ci0gICAgICAgIGlm
ICghZXF1YWwoZWxlbWVudC5rZXkudHlwZSgpLCAiZmlsZSIsIDQpKQorICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IG1fbWFwKSB7CisgICAgICAgIGlmIChlbGVtZW50LmtleS5zZWNvbmQgIT0gImZp
bGUiKSAvLyB0eXBlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChhdXRvJiBz
dGF0ZSA6IGVsZW1lbnQudmFsdWUpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IEhU
TUxJbnB1dEVsZW1lbnQ6OmZpbGVzRnJvbUZpbGVJbnB1dEZvcm1Db250cm9sU3RhdGUoc3RhdGUp
KQotICAgICAgICAgICAgICAgIHRvUmV0dXJuLmFwcGVuZChmaWxlLnBhdGgpOworICAgICAgICAg
ICAgICAgIHZlY3Rvci5hcHBlbmQoZmlsZS5wYXRoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBy
ZXR1cm4gdG9SZXR1cm47CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgRm9y
bUtleUdlbmVyYXRvciB7CitjbGFzcyBGb3JtQ29udHJvbGxlcjo6Rm9ybUtleUdlbmVyYXRvciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ybUtleUdlbmVyYXRvcik7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKICAgICBGb3JtS2V5R2VuZXJhdG9yKCkgPSBk
ZWZhdWx0OwotICAgIEF0b21TdHJpbmcgZm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlJik7Ci0gICAgdm9pZCB3aWxsRGVsZXRlRm9ybShIVE1MRm9ybUVsZW1lbnQq
KTsKKyAgICBTdHJpbmcgZm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlJik7CisgICAgdm9pZCB3aWxsRGVsZXRlRm9ybShIVE1MRm9ybUVsZW1lbnQmKTsKIAogcHJp
dmF0ZToKLSAgICBXZWFrSGFzaE1hcDxIVE1MRm9ybUVsZW1lbnQsIEF0b21TdHJpbmc+IG1fZm9y
bVRvS2V5TWFwOworICAgIFdlYWtIYXNoTWFwPEhUTUxGb3JtRWxlbWVudCwgU3RyaW5nPiBtX2Zv
cm1Ub0tleU1hcDsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+IG1fZm9ybVNpZ25hdHVy
ZVRvTmV4dEluZGV4TWFwOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlY29yZEZvcm1TdHJ1
Y3R1cmUoY29uc3QgSFRNTEZvcm1FbGVtZW50JiBmb3JtLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQorc3RhdGljIFN0cmluZyBmb3JtU2lnbmF0dXJlKGNvbnN0IEhUTUxGb3JtRWxlbWVudCYgZm9y
bSkKIHsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICAvLyBSZW1vdmUgdGhlIHF1
ZXJ5IHBhcnQgYmVjYXVzZSBpdCBtaWdodCBjb250YWluIHZvbGF0aWxlIHBhcmFtZXRlcnMgc3Vj
aCBhcyBhIHNlc3Npb24ga2V5LgorICAgIC8vIEZJWE1FOiBCdXQgbGVhdmUgdGhlIGZyYWdtZW50
IGlkZW50aWZpZXI/IFBlcmhhcHMgd2Ugc2hvdWxkIHN3aXRjaCB0byByZW1vdmVRdWVyeUFuZEZy
YWdtZW50SWRlbnRpZmllci4KKworICAgIFVSTCBhY3Rpb25VUkwgPSBmb3JtLmdldFVSTEF0dHJp
YnV0ZShhY3Rpb25BdHRyKTsKKyAgICBhY3Rpb25VUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBidWls
ZGVyLmFwcGVuZChhY3Rpb25VUkwuc3RyaW5nKCkpOworCisgICAgLy8gVHdvIG5hbWVkIGNvbnRy
b2xzIHNlZW1zIHRvIGJlIGVub3VnaCB0byBkaXN0aW5ndWlzaCBzaW1pbGFyIGJ1dCBkaWZmZXJl
bnQgZm9ybXMuCisgICAgY29uc3RleHByIHVuc2lnbmVkIG1heE5hbWVkQ29udHJvbHNUb0JlUmVj
b3JkZWQgPSAyOworCiAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2Ny
aXB0RGlzYWxsb3dlZFNjb3BlOwotICAgIC8vIDIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIGZv
cm1zIGluIHdlYmtpdC5vcmcvYi85MTIwOSNjMAotICAgIGNvbnN0IHNpemVfdCBuYW1lZENvbnRy
b2xzVG9CZVJlY29yZGVkID0gMjsKLSAgICBhdXRvJiBjb250cm9scyA9IGZvcm0udW5zYWZlQXNz
b2NpYXRlZEVsZW1lbnRzKCk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGJ1aWxkZXIu
YXBwZW5kKCIgWyIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBuYW1lZENvbnRyb2xzID0gMDsg
aSA8IGNvbnRyb2xzLnNpemUoKSAmJiBuYW1lZENvbnRyb2xzIDwgbmFtZWRDb250cm9sc1RvQmVS
ZWNvcmRlZDsgKytpKSB7Ci0gICAgICAgIGF1dG8qIGZvcm1Bc3NvY2lhdGVkRWxlbWVudCA9IGNv
bnRyb2xzW2ldLT5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpOwotICAgICAgICBpZiAoIWZvcm1B
c3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKSkKKyAgICBm
b3IgKGF1dG8mIGNvbnRyb2wgOiBmb3JtLnVuc2FmZUFzc29jaWF0ZWRFbGVtZW50cygpKSB7Cisg
ICAgICAgIGF1dG8gZWxlbWVudCA9IGNvbnRyb2wtPmFzRm9ybUFzc29jaWF0ZWRFbGVtZW50KCk7
CisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZT4oZWxlbWVu
dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU+IGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKj4oZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKLSAgICAgICAgaWYgKCFv
d25lckZvcm1Gb3JTdGF0ZSgqY29udHJvbCkpCisgICAgICAgIFJlZiBjb250cm9sV2l0aFN0YXRl
ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZT4oKmVsZW1lbnQpOwor
ICAgICAgICBpZiAoIW93bmVyRm9ybShjb250cm9sV2l0aFN0YXRlKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBBdG9tU3RyaW5nIG5hbWUgPSBjb250cm9sLT5uYW1lKCk7CisgICAg
ICAgIGF1dG8mIG5hbWUgPSBjb250cm9sV2l0aFN0YXRlLT5uYW1lKCk7CiAgICAgICAgIGlmIChu
YW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBuYW1lZENvbnRy
b2xzKys7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG5hbWUsICcgJyk7CisgICAgICAgIGlmICgr
K2NvdW50ID49IG1heE5hbWVkQ29udHJvbHNUb0JlUmVjb3JkZWQpCisgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKLX0KIAotc3RhdGljIGlubGluZSBT
dHJpbmcgZm9ybVNpZ25hdHVyZShjb25zdCBIVE1MRm9ybUVsZW1lbnQmIGZvcm0pCi17Ci0gICAg
VVJMIGFjdGlvblVSTCA9IGZvcm0uZ2V0VVJMQXR0cmlidXRlKGFjdGlvbkF0dHIpOwotICAgIC8v
IFJlbW92ZSB0aGUgcXVlcnkgcGFydCBiZWNhdXNlIGl0IG1pZ2h0IGNvbnRhaW4gdm9sYXRpbGUg
cGFyYW1ldGVycyBzdWNoCi0gICAgLy8gYXMgYSBzZXNzaW9uIGtleS4KLSAgICBhY3Rpb25VUkwu
c2V0UXVlcnkoU3RyaW5nKCkpOwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBpZiAo
IWFjdGlvblVSTC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjdGlvblVSTC5z
dHJpbmcoKSk7Ci0KLSAgICByZWNvcmRGb3JtU3RydWN0dXJlKGZvcm0sIGJ1aWxkZXIpOwogICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLUF0b21TdHJpbmcgRm9ybUtleUdlbmVy
YXRvcjo6Zm9ybUtleShjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJiBjb250
cm9sKQorU3RyaW5nIEZvcm1Db250cm9sbGVyOjpGb3JtS2V5R2VuZXJhdG9yOjpmb3JtS2V5KGNv
bnN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUmIGNvbnRyb2wpCiB7Ci0gICAgYXV0
byBmb3JtID0gbWFrZVJlZlB0cihvd25lckZvcm1Gb3JTdGF0ZShjb250cm9sKSk7CisgICAgUmVm
UHRyIGZvcm0gPSBvd25lckZvcm0oY29udHJvbCk7CiAgICAgaWYgKCFmb3JtKSB7Ci0gICAgICAg
IHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZm9ybUtl
eUZvck5vT3duZXIoIk5vIG93bmVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZm9ybUtl
eUZvck5vT3duZXIoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk5vIG93bmVyIikpOwogICAgICAg
ICByZXR1cm4gZm9ybUtleUZvck5vT3duZXI7CiAgICAgfQotCi0gICAgcmV0dXJuIG1fZm9ybVRv
S2V5TWFwLmVuc3VyZSgqZm9ybSwgW3RoaXMsICZmb3JtXSB7CisgICAgcmV0dXJuIG1fZm9ybVRv
S2V5TWFwLmVuc3VyZSgqZm9ybSwgW3RoaXMsIGZvcm1dIHsKICAgICAgICAgYXV0byBzaWduYXR1
cmUgPSBmb3JtU2lnbmF0dXJlKCpmb3JtKTsKICAgICAgICAgYXV0byBuZXh0SW5kZXggPSBtX2Zv
cm1TaWduYXR1cmVUb05leHRJbmRleE1hcC5hZGQoc2lnbmF0dXJlLCAwKS5pdGVyYXRvci0+dmFs
dWUrKzsKLSAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBtYWtlQXRvbVN0
cmluZyB0byB1c2UgdG8gb3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cmluZyBhbHJlYWR5
IGV4aXN0cy4KICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoc2lnbmF0dXJlLCAiICMiLCBuZXh0
SW5kZXgpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotdm9pZCBGb3JtS2V5R2VuZXJh
dG9yOjp3aWxsRGVsZXRlRm9ybShIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit2b2lkIEZvcm1Db250
cm9sbGVyOjpGb3JtS2V5R2VuZXJhdG9yOjp3aWxsRGVsZXRlRm9ybShIVE1MRm9ybUVsZW1lbnQm
IGZvcm0pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZm9ybSk7Ci0gICAgbV9mb3JtVG9LZXlNYXAu
cmVtb3ZlKCpmb3JtKTsKKyAgICBtX2Zvcm1Ub0tleU1hcC5yZW1vdmUoZm9ybSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0NSwxMTAgKzIzNSwxMDggQEAgRm9ybUNvbnRyb2xs
ZXI6On5Gb3JtQ29udHJvbGxlcigpID0gZGVmYXVsdDsKIAogc3RhdGljIFN0cmluZyBmb3JtU3Rh
dGVTaWduYXR1cmUoKQogewotICAgIC8vIEluIHRoZSBsZWdhY3kgdmVyc2lvbiBvZiBzZXJpYWxp
emVkIHN0YXRlLCB0aGUgZmlyc3QgaXRlbSB3YXMgYSBuYW1lCi0gICAgLy8gYXR0cmlidXRlIHZh
bHVlIG9mIGEgZm9ybSBjb250cm9sLiBUaGUgZm9sbG93aW5nIHN0cmluZyBsaXRlcmFsIHNob3Vs
ZAotICAgIC8vIGNvbnRhaW4gc29tZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSByYXJlbHkgdXNlZCBm
b3IgbmFtZSBhdHRyaWJ1dGUgdmFsdWVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHNpZ25hdHVyZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiXG5ccj8lIFdlYktpdCBzZXJp
YWxpemVkIGZvcm0gc3RhdGUgdmVyc2lvbiA4IFxuXHI9JiIpKTsKKyAgICAvLyBJbiB0aGUgbGVn
YWN5IHZlcnNpb24gb2Ygc2VyaWFsaXplZCBzdGF0ZSwgdGhlIGZpcnN0IGl0ZW0gd2FzIGEgbmFt
ZSBhdHRyaWJ1dGUKKyAgICAvLyB2YWx1ZSBvZiBhIGZvcm0gY29udHJvbC4gVGhlIGZvbGxvd2lu
ZyBzdHJpbmcgbGl0ZXJhbCBjb250YWlucyBzb21lIGNoYXJhY3RlcnMKKyAgICAvLyB3aGljaCBh
cmUgcmFyZWx5IHVzZWQgZm9yIG5hbWUgYXR0cmlidXRlIHZhbHVlcyBzbyBpdCB3b24ndCBtYXRj
aC4KKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPFN0cmluZz4gc2lnbmF0dXJl
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJcblxyPyUgV2ViS2l0IHNlcmlhbGl6ZWQgZm9ybSBz
dGF0ZSB2ZXJzaW9uIDggXG5ccj0mIikpOwogICAgIHJldHVybiBzaWduYXR1cmU7CiB9CiAKLXN0
ZDo6dW5pcXVlX3B0cjxGb3JtQ29udHJvbGxlcjo6U2F2ZWRGb3JtU3RhdGVNYXA+IEZvcm1Db250
cm9sbGVyOjpjcmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChjb25zdCBGb3JtQ29udHJvbFZlY3RvciYg
Y29udHJvbExpc3QpCi17Ci0gICAgRm9ybUtleUdlbmVyYXRvciBrZXlHZW5lcmF0b3I7Ci0gICAg
YXV0byBzdGF0ZU1hcCA9IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGVNYXA+KCk7Ci0gICAgZm9y
IChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJiBjb250cm9sIDogY29udHJv
bExpc3QpIHsKLSAgICAgICAgaWYgKCFjb250cm9sLnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8mIGZvcm1T
dGF0ZSA9IHN0YXRlTWFwLT5hZGQoa2V5R2VuZXJhdG9yLmZvcm1LZXkoY29udHJvbCkuaW1wbCgp
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmICghZm9ybVN0YXRlKQotICAg
ICAgICAgICAgZm9ybVN0YXRlID0gbWFrZVVuaXF1ZTxTYXZlZEZvcm1TdGF0ZT4oKTsKLSAgICAg
ICAgZm9ybVN0YXRlLT5hcHBlbmRDb250cm9sU3RhdGUoY29udHJvbC5uYW1lKCksIGNvbnRyb2wu
dHlwZSgpLCBjb250cm9sLnNhdmVGb3JtQ29udHJvbFN0YXRlKCkpOwotICAgIH0KLSAgICByZXR1
cm4gc3RhdGVNYXA7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpmb3JtRWxl
bWVudHNTdGF0ZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIGNvbnN0CiB7Ci0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBzYXZpbmcgdGhlIHN0YXRlIG9mIGZvcm0gY29udHJvbHMgaW4gc2hh
ZG93IHRyZWVzLCB0b28uCi0gICAgRm9ybUNvbnRyb2xWZWN0b3IgY29udHJvbHM7Ci0gICAgZm9y
IChhdXRvJiBjb250cm9sIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZT4oZG9jdW1lbnQpKSB7Ci0gICAgICAgIEFTU0VSVChjb250cm9sLmluc2VydGlv
bkluZGV4KCkpOwotICAgICAgICBjb250cm9scy5hcHBlbmQoY29udHJvbCk7CisgICAgc3RydWN0
IENvbnRyb2wgeworICAgICAgICBSZWY8Y29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZT4gY29udHJvbDsKKyAgICAgICAgU3RyaW5nIGZvcm1LZXk7CisgICAgfTsKKworICAgIFZl
Y3RvcjxDb250cm9sPiBjb250cm9sczsKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgc2F2aW5nIHRoZSBzdGF0ZSBvZiBmb3JtIGNvbnRyb2xzIGluIHNoYWRvdyB0cmVlcywg
dG9vLgorICAgICAgICBGb3JtS2V5R2VuZXJhdG9yIGtleUdlbmVyYXRvcjsKKyAgICAgICAgZm9y
IChhdXRvJiBjb250cm9sIDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZT4oZG9jdW1lbnQpKSB7CisgICAgICAgICAgICBBU1NFUlQoY29udHJvbC5pbnNl
cnRpb25JbmRleCgpKTsKKyAgICAgICAgICAgIGlmIChjb250cm9sLnNob3VsZFNhdmVBbmRSZXN0
b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRyb2xzLmFwcGVuZCh7
IGNvbnRyb2wsIGtleUdlbmVyYXRvci5mb3JtS2V5KGNvbnRyb2wpIH0pOworICAgICAgICB9CiAg
ICAgfQotCi0gICAgc3RkOjpzb3J0KGNvbnRyb2xzLmJlZ2luKCksIGNvbnRyb2xzLmVuZCgpLCBb
XShhdXRvIGEsIGF1dG8gYikgewotICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25JbmRl
eCgpIDwgYi5nZXQoKS5pbnNlcnRpb25JbmRleCgpOworICAgIGlmIChjb250cm9scy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgc3RkOjpzb3J0KGNvbnRyb2xzLmJlZ2luKCks
IGNvbnRyb2xzLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgIGlmIChhLmZv
cm1LZXkgIT0gYi5mb3JtS2V5KQorICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVM
ZXNzVGhhbihhLmZvcm1LZXksIGIuZm9ybUtleSk7CisgICAgICAgIHJldHVybiBhLmNvbnRyb2wt
Pmluc2VydGlvbkluZGV4KCkgPCBiLmNvbnRyb2wtPmluc2VydGlvbkluZGV4KCk7CiAgICAgfSk7
CiAKLSAgICBhdXRvIHN0YXRlTWFwID0gY3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAoY29udHJvbHMp
OwogICAgIFZlY3RvcjxTdHJpbmc+IHN0YXRlVmVjdG9yOwotICAgIHN0YXRlVmVjdG9yLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoY29udHJvbHMuc2l6ZSgpICogNCk7CiAgICAgc3RhdGVWZWN0b3Iu
YXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVyZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0YXRlIDogKnN0
YXRlTWFwKSB7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChzdGF0ZS5rZXkuZ2V0KCkpOwot
ICAgICAgICBzdGF0ZS52YWx1ZS0+c2VyaWFsaXplVG8oc3RhdGVWZWN0b3IpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gY29udHJvbHMuc2l6ZSgpOyBpIDwgc2l6ZTsgKSB7CisgICAg
ICAgIGF1dG8gZm9ybVN0YXJ0ID0gaTsKKyAgICAgICAgYXV0byBmb3JtS2V5ID0gY29udHJvbHNb
Zm9ybVN0YXJ0XS5mb3JtS2V5OworICAgICAgICB3aGlsZSAoKytpIDwgc2l6ZSAmJiBjb250cm9s
c1tpXS5mb3JtS2V5ID09IGZvcm1LZXkpIHsgfQorICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQo
Zm9ybUtleSk7CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJlcihpIC0g
Zm9ybVN0YXJ0KSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBmb3JtU3RhcnQ7IGogPCBpOyAr
K2opIHsKKyAgICAgICAgICAgIGF1dG8mIGNvbnRyb2wgPSBjb250cm9sc1tqXS5jb250cm9sLmdl
dCgpOworICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGNvbnRyb2wubmFtZSgpKTsKKyAg
ICAgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChjb250cm9sLnR5cGUoKSk7CisgICAgICAgICAg
ICBhcHBlbmRTZXJpYWxpemVkRm9ybUNvbnRyb2xTdGF0ZShzdGF0ZVZlY3RvciwgY29udHJvbC5z
YXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBib29sIGhhc09u
bHlTaWduYXR1cmUgPSBzdGF0ZVZlY3Rvci5zaXplKCkgPT0gMTsKLSAgICBpZiAoaGFzT25seVNp
Z25hdHVyZSkKLSAgICAgICAgc3RhdGVWZWN0b3IuY2xlYXIoKTsKKyAgICBzdGF0ZVZlY3Rvci5z
aHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBzdGF0ZVZlY3RvcjsKIH0KIAogdm9pZCBGb3JtQ29u
dHJvbGxlcjo6c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHN0YXRlVmVjdG9yKQogewotICAgIGZvcm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0
b3IsIG1fc2F2ZWRGb3JtU3RhdGVNYXApOworICAgIG1fc2F2ZWRGb3JtU3RhdGVNYXAgPSBwYXJz
ZVN0YXRlVmVjdG9yKHN0YXRlVmVjdG9yKTsKIH0KIAogRm9ybUNvbnRyb2xTdGF0ZSBGb3JtQ29u
dHJvbGxlcjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3QgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSYgY29udHJvbCkKIHsKICAgICBpZiAobV9zYXZlZEZvcm1TdGF0ZU1hcC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgaWYgKCFtX2Zvcm1LZXlHZW5lcmF0b3IpCiAgICAgICAgIG1fZm9ybUtl
eUdlbmVyYXRvciA9IG1ha2VVbmlxdWU8Rm9ybUtleUdlbmVyYXRvcj4oKTsKLSAgICBTYXZlZEZv
cm1TdGF0ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQobV9mb3Jt
S2V5R2VuZXJhdG9yLT5mb3JtS2V5KGNvbnRyb2wpLmltcGwoKSk7Ci0gICAgaWYgKGl0ID09IG1f
c2F2ZWRGb3JtU3RhdGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRl
KCk7Ci0gICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IGl0LT52YWx1ZS0+dGFrZUNvbnRyb2xT
dGF0ZShjb250cm9sLm5hbWUoKSwgY29udHJvbC50eXBlKCkpOwotICAgIGlmIChpdC0+dmFsdWUt
PmlzRW1wdHkoKSkKLSAgICAgICAgbV9zYXZlZEZvcm1TdGF0ZU1hcC5yZW1vdmUoaXQpOworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3NhdmVkRm9ybVN0YXRlTWFwLmZpbmQobV9mb3JtS2V5R2VuZXJh
dG9yLT5mb3JtS2V5KGNvbnRyb2wpKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9zYXZlZEZvcm1T
dGF0ZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHN0YXRlID0gaXRl
cmF0b3ItPnZhbHVlLnRha2VDb250cm9sU3RhdGUoeyBjb250cm9sLm5hbWUoKSwgY29udHJvbC50
eXBlKCkgfSk7CisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1f
c2F2ZWRGb3JtU3RhdGVNYXAucmVtb3ZlKGl0ZXJhdG9yKTsKICAgICByZXR1cm4gc3RhdGU7CiB9
CiAKLXZvaWQgRm9ybUNvbnRyb2xsZXI6OmZvcm1TdGF0ZXNGcm9tU3RhdGVWZWN0b3IoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yLCBTYXZlZEZvcm1TdGF0ZU1hcCYgbWFwKQorRm9y
bUNvbnRyb2xsZXI6OlNhdmVkRm9ybVN0YXRlTWFwIEZvcm1Db250cm9sbGVyOjpwYXJzZVN0YXRl
VmVjdG9yKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikKIHsKLSAgICBtYXAuY2xl
YXIoKTsKKyAgICBTdHJpbmdWZWN0b3JSZWFkZXIgcmVhZGVyIHsgc3RhdGVWZWN0b3IgfTsKIAot
ICAgIHNpemVfdCBpID0gMDsKLSAgICBpZiAoc3RhdGVWZWN0b3Iuc2l6ZSgpIDwgMSB8fCBzdGF0
ZVZlY3RvcltpKytdICE9IGZvcm1TdGF0ZVNpZ25hdHVyZSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHJlYWRlci5jb25zdW1lU3RyaW5nKCkgIT0gZm9ybVN0YXRlU2lnbmF0dXJlKCkpCisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICB3aGlsZSAoaSArIDEgPCBzdGF0ZVZlY3Rvci5zaXpl
KCkpIHsKLSAgICAgICAgQXRvbVN0cmluZyBmb3JtS2V5ID0gc3RhdGVWZWN0b3JbaSsrXTsKLSAg
ICAgICAgYXV0byBzdGF0ZSA9IFNhdmVkRm9ybVN0YXRlOjpkZXNlcmlhbGl6ZShzdGF0ZVZlY3Rv
ciwgaSk7Ci0gICAgICAgIGlmICghc3RhdGUpIHsKLSAgICAgICAgICAgIGkgPSAwOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWFwLmFkZChmb3JtS2V5LmltcGwoKSwg
V1RGTW92ZShzdGF0ZSkpOworICAgIFNhdmVkRm9ybVN0YXRlTWFwIG1hcDsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBhdXRvIGZvcm1LZXkgPSByZWFkZXIuY29uc3VtZVN0cmluZygpOwor
ICAgICAgICBpZiAoZm9ybUtleS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBtYXA7Cisg
ICAgICAgIGF1dG8gc3RhdGUgPSBTYXZlZEZvcm1TdGF0ZTo6Y29uc3VtZVNlcmlhbGl6ZWRTdGF0
ZShyZWFkZXIpOworICAgICAgICBpZiAoc3RhdGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgbWFwLmFkZChmb3JtS2V5LCBXVEZNb3ZlKHN0YXRlKSk7CiAgICAg
fQotICAgIGlmIChpICE9IHN0YXRlVmVjdG9yLnNpemUoKSkKLSAgICAgICAgbWFwLmNsZWFyKCk7
CiB9CiAKIHZvaWQgRm9ybUNvbnRyb2xsZXI6OndpbGxEZWxldGVGb3JtKEhUTUxGb3JtRWxlbWVu
dCYgZm9ybSkKIHsKICAgICBpZiAobV9mb3JtS2V5R2VuZXJhdG9yKQotICAgICAgICBtX2Zvcm1L
ZXlHZW5lcmF0b3ItPndpbGxEZWxldGVGb3JtKCZmb3JtKTsKKyAgICAgICAgbV9mb3JtS2V5R2Vu
ZXJhdG9yLT53aWxsRGVsZXRlRm9ybShmb3JtKTsKIH0KIAogdm9pZCBGb3JtQ29udHJvbGxlcjo6
cmVzdG9yZUNvbnRyb2xTdGF0ZUZvcihIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJiBj
b250cm9sKQogewotICAgIC8vIFdlIGRvbid0IHNhdmUgc3RhdGUgb2YgYSBjb250cm9sIHdpdGgg
c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkKLSAgICAvLyA9PSBmYWxzZS4g
QnV0IHdlIG5lZWQgdG8gc2tpcCByZXN0b3JpbmcgcHJvY2VzcyB0b28gYmVjYXVzZSBhIGNvbnRy
b2wgaW4KKyAgICAvLyBXZSBkb24ndCBzYXZlIHN0YXRlIG9mIGEgY29udHJvbCB3aGVuIHNob3Vs
ZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpCisgICAgLy8gaXMgZmFsc2UuIEJ1dCB3
ZSBuZWVkIHRvIHNraXAgcmVzdG9yaW5nIHByb2Nlc3MgdG9vIGJlY2F1c2UgYSBjb250cm9sIGlu
CiAgICAgLy8gYW5vdGhlciBmb3JtIG1pZ2h0IGhhdmUgdGhlIHNhbWUgcGFpciBvZiBuYW1lIGFu
ZCB0eXBlIGFuZCBzYXZlZCBpdHMgc3RhdGUuCi0gICAgaWYgKCFjb250cm9sLnNob3VsZFNhdmVB
bmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG93
bmVyRm9ybUZvclN0YXRlKGNvbnRyb2wpKQorICAgIGlmICghY29udHJvbC5zaG91bGRTYXZlQW5k
UmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSB8fCBvd25lckZvcm0oY29udHJvbCkpCiAgICAgICAg
IHJldHVybjsKICAgICBhdXRvIHN0YXRlID0gdGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29udHJv
bCk7CiAgICAgaWYgKCFzdGF0ZS5pc0VtcHR5KCkpCkBAIC00NjEsOSArMzQ5LDcgQEAgdm9pZCBG
b3JtQ29udHJvbGxlcjo6cmVzdG9yZUNvbnRyb2xTdGF0ZUluKEhUTUxGb3JtRWxlbWVudCYgZm9y
bSkKICAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPihlbGVt
ZW50LmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBjb250cm9s
ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZT4oZWxlbWVudC5nZXQo
KSk7Ci0gICAgICAgIGlmICghY29udHJvbC5zaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAob3duZXJGb3JtRm9y
U3RhdGUoY29udHJvbCkgIT0gJmZvcm0pCisgICAgICAgIGlmICghY29udHJvbC5zaG91bGRTYXZl
QW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSB8fCBvd25lckZvcm0oY29udHJvbCkgIT0gJmZv
cm0pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzdGF0ZSA9IHRha2VTdGF0
ZUZvckZvcm1FbGVtZW50KGNvbnRyb2wpOwogICAgICAgICBpZiAoIXN0YXRlLmlzRW1wdHkoKSkK
QEAgLTQ3OSwxMCArMzY1LDkgQEAgYm9vbCBGb3JtQ29udHJvbGxlcjo6aGFzRm9ybVN0YXRlVG9S
ZXN0b3JlKCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpyZWZlcmVuY2Vk
RmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikKIHsKICAgICBWZWN0
b3I8U3RyaW5nPiBwYXRoczsKLSAgICBTYXZlZEZvcm1TdGF0ZU1hcCBtYXA7Ci0gICAgZm9ybVN0
YXRlc0Zyb21TdGF0ZVZlY3RvcihzdGF0ZVZlY3RvciwgbWFwKTsKLSAgICBmb3IgKGF1dG8mIHN0
YXRlIDogbWFwLnZhbHVlcygpKQotICAgICAgICBwYXRocy5hcHBlbmRWZWN0b3Ioc3RhdGUtPnJl
ZmVyZW5jZWRGaWxlUGF0aHMoKSk7CisgICAgYXV0byBwYXJzZWRTdGF0ZSA9IHBhcnNlU3RhdGVW
ZWN0b3Ioc3RhdGVWZWN0b3IpOworICAgIGZvciAoYXV0byYgc3RhdGUgOiBwYXJzZWRTdGF0ZS52
YWx1ZXMoKSkKKyAgICAgICAgc3RhdGUuYXBwZW5kUmVmZXJlbmNlZEZpbGVQYXRocyhwYXRocyk7
CiAgICAgcmV0dXJuIHBhdGhzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Zvcm1Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgK
aW5kZXggZmU1NjBhZjliNWNjZmRhYmM0NzBmOTI4MTU2ZDBiZThkM2U0MDFlZS4uYjIyMDllZDU1
MWMzNTg0MTAzZmViYTRkNWNmNjBiNWMwZWU0MDRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yMiwyOSArMjIsMjQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKLWNsYXNz
IEZvcm1LZXlHZW5lcmF0b3I7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgU2F2ZWRGb3JtU3RhdGU7CiAKIHVzaW5n
IEZvcm1Db250cm9sU3RhdGUgPSBWZWN0b3I8U3RyaW5nPjsKIAogY2xhc3MgRm9ybUNvbnRyb2xs
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiBwdWJsaWM6CiAgICAgRm9ybUNv
bnRyb2xsZXIoKTsKICAgICB+Rm9ybUNvbnRyb2xsZXIoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+
IGZvcm1FbGVtZW50c1N0YXRlKGNvbnN0IERvY3VtZW50JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRT
dGF0ZUZvck5ld0Zvcm1FbGVtZW50cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQg
c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVj
dG9yKTsKIAogICAgIHZvaWQgd2lsbERlbGV0ZUZvcm0oSFRNTEZvcm1FbGVtZW50Jik7CiAgICAg
dm9pZCByZXN0b3JlQ29udHJvbFN0YXRlRm9yKEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUmKTsKQEAgLTU0LDEyICs0OSwxMiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHN0YXRlVmVjdG9yKTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBGb3JtQ29udHJvbFZlY3Rv
ciA9IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGU+PjsKLSAgICB1c2luZyBTYXZlZEZvcm1TdGF0ZU1hcCA9IEhhc2hNYXA8
UmVmUHRyPEF0b21TdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlPj47
CisgICAgY2xhc3MgRm9ybUtleUdlbmVyYXRvcjsKKyAgICBjbGFzcyBTYXZlZEZvcm1TdGF0ZTsK
KyAgICB1c2luZyBTYXZlZEZvcm1TdGF0ZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTYXZlZEZvcm1T
dGF0ZT47CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlTWFwPiBj
cmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChjb25zdCBGb3JtQ29udHJvbFZlY3RvciYpOwogICAgIEZv
cm1Db250cm9sU3RhdGUgdGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoY29uc3QgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZSYpOwotICAgIHN0YXRpYyB2b2lkIGZvcm1TdGF0ZXNGcm9tU3Rh
dGVWZWN0b3IoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBTYXZlZEZvcm1TdGF0ZU1hcCYpOworICAg
IHN0YXRpYyBTYXZlZEZvcm1TdGF0ZU1hcCBwYXJzZVN0YXRlVmVjdG9yKGNvbnN0IFZlY3RvcjxT
dHJpbmc+Jik7CiAKICAgICBTYXZlZEZvcm1TdGF0ZU1hcCBtX3NhdmVkRm9ybVN0YXRlTWFwOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtS2V5R2VuZXJhdG9yPiBtX2Zvcm1LZXlHZW5lcmF0b3I7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>