<?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>100821</bug_id>
          
          <creation_ts>2012-10-31 00:21:26 -0700</creation_ts>
          <short_desc>Convert the rest of the encoders to take the encoder as a reference</short_desc>
          <delta_ts>2012-10-31 14:19:32 -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>New Bugs</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>755020</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-31 00:21:26 -0700</bug_when>
    <thetext>Convert the rest of the encoders to take the encoder as a reference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755022</commentid>
    <comment_count>1</comment_count>
      <attachid>171590</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-31 00:22:12 -0700</bug_when>
    <thetext>Created attachment 171590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755024</commentid>
    <comment_count>2</comment_count>
      <attachid>171590</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-31 00:27:30 -0700</bug_when>
    <thetext>Comment on attachment 171590
Patch

Attachment 171590 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14660102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755526</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-31 12:11:26 -0700</bug_when>
    <thetext>Please upload a new patch that doesn&apos;t break Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755528</commentid>
    <comment_count>4</comment_count>
      <attachid>171700</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-31 12:12:18 -0700</bug_when>
    <thetext>Created attachment 171700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755533</commentid>
    <comment_count>5</comment_count>
      <attachid>171700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-31 12:20:43 -0700</bug_when>
    <thetext>Comment on attachment 171700
Patch

Attachment 171700 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14686227</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755604</commentid>
    <comment_count>6</comment_count>
      <attachid>171714</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-31 13:57:47 -0700</bug_when>
    <thetext>Created attachment 171714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755613</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-31 14:19:32 -0700</bug_when>
    <thetext>Committed r133075: &lt;http://trac.webkit.org/changeset/133075&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171590</attachid>
            <date>2012-10-31 00:22:12 -0700</date>
            <delta_ts>2012-10-31 12:12:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100821-20121031002043.patch</filename>
            <type>text/plain</type>
            <size>81705</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEwLTMxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCB0aGUgcmVzdCBvZiB0aGUg
ZW5jb2RlcnMgdG8gdGFrZSB0aGUgZW5jb2RlciBhcyBhIHJlZmVyZW5jZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwODIxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChDb3JlSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpl
bmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
Lmg6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAg
ICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdlYktpdDo6VXNl
ck1lc3NhZ2VEZWNvZGVyOjpiYXNlRGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBv
c2l0aW9uOjpEYXRhOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAoQ29yZUlQQzo6ZW5j
b2RlSW1hZ2UpOgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlRGF0YU9iamVjdCk6CisgICAgICAg
IChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVHS2V5RmlsZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2Rl
cnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICogU2hhcmVk
L3F0L0FyZ3VtZW50Q29kZXJzUXQuaDoKKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAqIFNo
YXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6
OmVuY29kZVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwOgor
ICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRlY29k
ZXJBZGFwdGVyOjpkZWNvZGVCeXRlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Vu
Y29kZXJBZGFwdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RW5jb2RlckFkYXB0ZXI6OmVuY29k
ZUJ5dGVzKToKKwogMjAxMi0xMC0zMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIE1ha2UgV2ViS2l0MiBCdWlsZCB3aXRoIE5FVFdPUktfUFJP
Q0VTUyBkaXNhYmxlZApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5
ICszOCw5IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogLy8gQW4gYXJndW1lbnQgY29kZXIgd29y
a3Mgb24gUE9EIHR5cGVzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1l
bnRDb2RlciB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgVCYgdCkKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQp
LCBfX2FsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgX19hbGlnbm9m
KFQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBUJiB0KQpAQCAtNTAsMTAgKzUwLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IFNpbXBsZUFyZ3VtZQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYg
cGFpcikKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnNlY29uZCk7Cisg
ICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKICAgICB9CiAKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBzdGQ6OnBhaXI8
VCwgVT4mIHBhaXIpCkBAIC03MywxMCArNzIsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBzdHJ1Y3QgCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFt
ZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5
cGUsIFZhbHVlVHlwZT4gPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYg
cGFpcikKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsK
LSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIua2V5KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKHBhaXIudmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFs
dWU7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKQEAgLTk4
LDExICs5NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1CiB0
ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBUPiBzdHJ1Y3QgVmVjdG9y
QXJndW1lbnRDb2RlcjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3Vt
ZW50Q29kZXI8ZmFsc2UsIFQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikK
ICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVj
dG9yLnNpemUoKSkpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
ZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUodmVjdG9yW2ldKTsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFZlY3RvcjxUPiYgdmVjdG9yKQpAQCAtMTI3
LDEwICsxMjUsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3VtZQog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3VtZW50Q29kZXI8dHJ1
ZSwgVD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQogICAgIHsKLSAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihU
KSwgX19hbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFQpLCBfX2FsaWdub2YoVCkpOwogICAgIH0KICAgICAKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBWZWN0b3I8VD4mIHZlY3Rv
cikKQEAgLTE2MiwxMSArMTYwLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1
bWVudENvZGUKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+ID4gewogICAgIHR5cGVkZWYg
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+IEhhc2hNYXBUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUm
IGhhc2hNYXApCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKICAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZSgqaXQp
OworICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDggQEAgdm9pZCBQcmludEluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudAogICAg
IGVuY29kZXIgPDwgYXZhaWxhYmxlUGFwZXJIZWlnaHQ7CiAKICNpZiBQTEFURk9STShHVEspCi0g
ICAgQ29yZUlQQzo6ZW5jb2RlKCZlbmNvZGVyLCBwcmludFNldHRpbmdzLmdldCgpKTsKLSAgICBD
b3JlSVBDOjplbmNvZGUoJmVuY29kZXIsIHBhZ2VTZXR1cC5nZXQoKSk7CisgICAgQ29yZUlQQzo6
ZW5jb2RlKGVuY29kZXIsIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29k
ZShlbmNvZGVyLCBwYWdlU2V0dXAuZ2V0KCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSAr
MzAsOSBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdoZW4g
d2UgZW5jb2RlIGEgUmVmUHRyIHdlIHdhbnQgdG8gZW5jb2RlIHRoZSBvYmplY3QgaXQgcG9pbnRz
IHRvIGFuZCBpdCBpcyBuZXZlciBudWxsLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFQ+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxUPiYgaXRlbSkKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8VD4mIGl0ZW0p
CiAgICAgewotICAgICAgICBpdGVtLT5lbmNvZGUoKmVuY29kZXIpOworICAgICAgICBpdGVtLT5l
bmNvZGUoZW5jb2Rlcik7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFQ+JiBpdGVtKQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMs
NyArMzAzLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgQVBJT2JqZWN0OjpU
eXBlU2VyaWFsaXplZFNjcmlwdFZhbHVlOiB7CiAgICAgICAgICAgICBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVZh
cmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQorICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ZGF0YVJlZmVyZW5jZS52ZWN0b3IoKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVEYXRhOiB7CiAgICAgICAgICAgICBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQorICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY29kZXIubV9yb290ID0gV2ViRGF0YTo6
Y3JlYXRlKGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSk7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAK
LXZvaWQgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKIHsKICAg
ICBTaW1wbGVBcmd1bWVudENvZGVyPEFmZmluZVRyYW5zZm9ybT46OmVuY29kZShlbmNvZGVyLCBh
ZmZpbmVUcmFuc2Zvcm0pOwogfQpAQCAtNjcsNyArNjcsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8
QWZmaW5lVHJhbnNmb3JtPjo6ZGVjCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9p
bnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50JiBm
bG9hdFBvaW50KQordm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogewogICAg
IFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBv
aW50KTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+
OjpkZWNvZGUoQQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENv
ZGVyPEZsb2F0UmVjdD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFJlY3QpOwogfQpAQCAtODksNyAr
ODksNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKEFyCiB9CiAKIAot
dm9pZCBBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmxvYXRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEZs
b2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgZmxvYXRTaXplKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZW5j
b2RlKGVuY29kZXIsIGZsb2F0U2l6ZSk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBBcmd1
bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShBcgogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxJbnRQb2ludD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEludFBv
aW50JiBpbnRQb2ludCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEludFBvaW50JiBpbnRQb2ludCkKIHsKICAgICBT
aW1wbGVBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZW5jb2RlKGVuY29kZXIsIGludFBvaW50KTsK
IH0KQEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNv
ZGUoQXJnCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEludFJlY3Q+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBJbnRSZWN0JiBpbnRSZWN0KQordm9pZCBBcmd1bWVu
dENvZGVyPEludFJlY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJ
bnRSZWN0JiBpbnRSZWN0KQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmVu
Y29kZShlbmNvZGVyLCBpbnRSZWN0KTsKIH0KQEAgLTEyMiw3ICsxMjIsNyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8SW50UmVjdD46OmRlY29kZShBcmd1CiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVy
PEludFNpemU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBJbnRTaXpl
JiBpbnRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEludFNpemU+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnRTaXplJiBpbnRTaXplKQogewogICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8SW50U2l6ZT46OmVuY29kZShlbmNvZGVyLCBpbnRTaXplKTsKIH0KQEAgLTEz
Miw3ICsxMzIsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShBcmd1CiAg
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShkZWNvZGVyLCBp
bnRTaXplKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFZpZXdwb3J0QXR0cmlidXRlcz46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYg
dmlld3BvcnRBdHRyaWJ1dGVzKQorCit2b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1
dGVzPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmlld3BvcnRBdHRy
aWJ1dGVzJiB2aWV3cG9ydEF0dHJpYnV0ZXMpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxW
aWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoZW5jb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsK
IH0KQEAgLTE0MiwxMSArMTQzLDEwIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJp
YnV0ZXM+OjoKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0
ZXM+OjpkZWNvZGUoZGVjb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPE1pbWVDbGFzc0luZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBtaW1lQ2xhc3NJbmZvKQorCit2b2lkIEFyZ3VtZW50Q29k
ZXI8TWltZUNsYXNzSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8pCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1p
bWVDbGFzc0luZm8udHlwZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVDbGFzc0luZm8uZGVz
Yyk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucyk7CisgICAg
ZW5jb2RlciA8PCBtaW1lQ2xhc3NJbmZvLnR5cGUgPDwgbWltZUNsYXNzSW5mby5kZXNjIDw8IG1p
bWVDbGFzc0luZm8uZXh0ZW5zaW9uczsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPE1pbWVDbGFz
c0luZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBNaW1lQ2xhc3NJbmZvJiBt
aW1lQ2xhc3NJbmZvKQpAQCAtMTYyLDEyICsxNjIsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8TWlt
ZUNsYXNzSW5mbz46OmRlY29kCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVn
aW5JbmZvKQordm9pZCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvKQogewotICAgIGVu
Y29kZXItPmVuY29kZShwbHVnaW5JbmZvLm5hbWUpOwotICAgIGVuY29kZXItPmVuY29kZShwbHVn
aW5JbmZvLmZpbGUpOwotICAgIGVuY29kZXItPmVuY29kZShwbHVnaW5JbmZvLmRlc2MpOwotICAg
IGVuY29kZXItPmVuY29kZShwbHVnaW5JbmZvLm1pbWVzKTsKKyAgICBlbmNvZGVyIDw8IHBsdWdp
bkluZm8ubmFtZSA8PCBwbHVnaW5JbmZvLm5hbWUgPDwgcGx1Z2luSW5mby5kZXNjIDw8IHBsdWdp
bkluZm8ubWltZXM7CiB9CiAgICAgCiBib29sIEFyZ3VtZW50Q29kZXI8UGx1Z2luSW5mbz46OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFBsdWdpbkluZm8mIHBsdWdpbkluZm8pCkBA
IC0xODUsOSArMTgyLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjpkZWNvZGUo
QQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFwKQordm9p
ZCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHN0YXRpY19jYXN0PGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmcsIENh
c2VGb2xkaW5nSGFzaD4mPihoZWFkZXJNYXApKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4mPiho
ZWFkZXJNYXApOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SFRUUEhlYWRlck1hcD46OmRlY29k
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCkKQEAg
LTE5NiwxMyArMTkzLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNv
ZAogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCit2b2lkIEFyZ3VtZW50Q29kZXI8QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkpOwotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2UucHJvcG9z
ZWRDcmVkZW50aWFsKCkpOwotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2UucHJldmlvdXNG
YWlsdXJlQ291bnQoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVz
cG9uc2UoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGNoYWxsZW5nZS5lcnJvcigpKTsKKyAgICBl
bmNvZGVyIDw8IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSA8PCBjaGFsbGVuZ2UucHJvcG9z
ZWRDcmVkZW50aWFsKCkgPDwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkgPDwgY2hh
bGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpIDw8IGNoYWxsZW5nZS5lcnJvcigpOwogfQogCiBib29s
IEFyZ3VtZW50Q29kZXI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQpAQCAt
MjMyLDEzICsyMjUsMTEgQEAgYm9vbCBBcmd1bWVudENvZGVyPEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bgogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9uU3BhY2U+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHNwYWNlKQordm9p
ZCBBcmd1bWVudENvZGVyPFByb3RlY3Rpb25TcGFjZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgc3BhY2UpCiB7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHNwYWNlLmhvc3QoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHNwYWNlLnBvcnQoKSk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShzcGFjZS5zZXJ2ZXJUeXBlKCkpOwotICAgIGVuY29k
ZXItPmVuY29kZShzcGFjZS5yZWFsbSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHNwYWNl
LmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpOworICAgIGVuY29kZXIgPDwgc3BhY2UuaG9zdCgpIDw8
IHNwYWNlLnBvcnQoKSA8PCBzcGFjZS5yZWFsbSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShz
cGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oc3Bh
Y2Uuc2VydmVyVHlwZSgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFByb3RlY3Rpb25TcGFj
ZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFByb3RlY3Rpb25TcGFjZSYgc3Bh
Y2UpCkBAIC0yNTEsMTAgKzI0Miw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9uU3Bh
Y2U+OjpkZWMKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwb3J0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShzZXJ2ZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgU3RyaW5nIHJlYWxtOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlYWxt
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDE1ICsyNTAsMTggQEAgYm9vbCBBcmd1
bWVudENvZGVyPFByb3RlY3Rpb25TcGFjZT46OmRlYwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
RW51bShhdXRoZW50aWNhdGlvblNjaGVtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZUVudW0oc2VydmVyVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNw
YWNlID0gUHJvdGVjdGlvblNwYWNlKGhvc3QsIHBvcnQsIHNlcnZlclR5cGUsIHJlYWxtLCBhdXRo
ZW50aWNhdGlvblNjaGVtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRD
b2RlcjxDcmVkZW50aWFsPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxDcmVkZW50aWFsPjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY3JlZGVudGlhbC51c2VyKCkpOwotICAgIGVu
Y29kZXItPmVuY29kZShjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwotICAgIGVuY29kZXItPmVuY29k
ZUVudW0oY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKKyAgICBlbmNvZGVyIDw8IGNyZWRlbnRp
YWwudXNlcigpIDw8IGNyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVu
dW0oY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPENy
ZWRlbnRpYWw+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDcmVkZW50aWFsJiBj
cmVkZW50aWFsKQpAQCAtMjkyLDcgKzI4Miw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDcmVkZW50
aWFsPjo6ZGVjb2RlKEEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZW5jb2Rl
SW1hZ2UoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBJbWFnZSogaW1hZ2UpCitzdGF0aWMgdm9p
ZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIEltYWdlKiBpbWFnZSkKIHsK
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEpOwogICAgIGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCktPmRyYXdJbWFnZShpbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CkBAIC0zMDAsNyArMjkwLDcgQEAg
c3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyKgogICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwog
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7CisgICAgZW5jb2RlciA8PCBoYW5kbGU7CiB9
CiAKIHN0YXRpYyBib29sIGRlY29kZUltYWdlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVm
UHRyPEltYWdlPiYgaW1hZ2UpCkBAIC0zMTgsMjEgKzMwOCwyMSBAQCBzdGF0aWMgYm9vbCBkZWNv
ZGVJbWFnZShBcmd1bWVudERlY29kZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxDdXJzb3I+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBDdXJzb3ImIGN1cnNvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxDdXJzb3I+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBlbmNv
ZGVyLT5lbmNvZGVFbnVtKGN1cnNvci50eXBlKCkpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShj
dXJzb3IudHlwZSgpKTsKICAgICAgICAgCiAgICAgaWYgKGN1cnNvci50eXBlKCkgIT0gQ3Vyc29y
OjpDdXN0b20pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjdXJzb3IuaW1hZ2UoKS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsgLy8gVGhlcmUgaXMgbm8g
dmFsaWQgaW1hZ2UgYmVpbmcgZW5jb2RlZC4KKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsgLy8g
VGhlcmUgaXMgbm8gdmFsaWQgaW1hZ2UgYmVpbmcgZW5jb2RlZC4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGVuY29kZXItPmVuY29kZSh0cnVlKTsKKyAgICBlbmNvZGVyIDw8IHRydWU7
CiAgICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgY3Vyc29yLmltYWdlKCkpOwotICAgIGVuY29kZXIt
PmVuY29kZShjdXJzb3IuaG90U3BvdCgpKTsKKyAgICBlbmNvZGVyIDw8IGN1cnNvci5ob3RTcG90
KCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBDdXJzb3ImIGN1cnNvcikKQEAgLTM3OCwyMSArMzY4LDE5IEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoQXJndW0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQor
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewog
ICAgIGlmIChrU2hvdWxkU2VyaWFsaXplV2ViQ29yZURhdGEpIHsKLSAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZShyZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKLQotICAgICAgICBjb25zdCBI
VFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGhlYWRlcnMpOworICAgICAgICBlbmNvZGVyIDw8
IHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpOworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICAgICAgRm9ybURhdGEqIGh0dHBCb2R5ID0g
cmVzb3VyY2VSZXF1ZXN0Lmh0dHBCb2R5KCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0
aWNfY2FzdDxib29sPihodHRwQm9keSkpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGJvb2w+KGh0dHBCb2R5KTsKICAgICAgICAgaWYgKGh0dHBCb2R5KQotICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGh0dHBCb2R5LT5mbGF0dGVuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IGh0dHBCb2R5LT5mbGF0dGVuVG9TdHJpbmcoKTsKIAotICAgICAgICBlbmNvZGVy
LT5lbmNvZGUocmVzb3VyY2VSZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCkp
OworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2ll
cygpLnN0cmluZygpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRmb3JtRGF0YShlbmNvZGVyLCBy
ZXNvdXJjZVJlcXVlc3QpOwpAQCAtNDM5LDI1ICs0MjcsMjMgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFJlc291cmNlUmVxdWVzdD46OmRlYwogICAgIHJldHVybiBkZWNvZGVQbGF0Zm9ybURhdGEoZGVj
b2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVzcG9uc2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVzcG9uc2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQogewogICAgIGlmIChrU2hvdWxkU2VyaWFsaXpl
V2ViQ29yZURhdGEpIHsKICAgICAgICAgYm9vbCByZXNwb25zZUlzTnVsbCA9IHJlc291cmNlUmVz
cG9uc2UuaXNOdWxsKCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNwb25zZUlzTnVsbCk7
CisgICAgICAgIGVuY29kZXIgPDwgcmVzcG9uc2VJc051bGw7CiAgICAgICAgIGlmIChyZXNwb25z
ZUlzTnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
cmVzb3VyY2VSZXNwb25zZS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29k
ZShzdGF0aWNfY2FzdDxpbnQzMl90PihyZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
KTsKLQotICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gcmVzb3VyY2VSZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShoZWFkZXJz
KTsKLQotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VSZXNwb25zZS5taW1lVHlwZSgp
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UudGV4dEVuY29kaW5n
TmFtZSgpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGludDY0X3Q+KHJl
c291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpKTsKLSAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSk7Ci0gICAgICAgIGVu
Y29kZXItPmVuY29kZShyZXNvdXJjZVJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAg
ICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVzcG9uc2UudXJsKCkuc3RyaW5nKCk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzb3VyY2VSZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZHMoKTsKKworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVzcG9uc2UubWltZVR5
cGUoKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlc3BvbnNlLnRleHRFbmNvZGluZ05h
bWUoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXNvdXJjZVJl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVzb3Vy
Y2VSZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRm
b3JtRGF0YShlbmNvZGVyLCByZXNvdXJjZVJlc3BvbnNlKTsKQEAgLTUyMywyMCArNTA5LDIwIEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGUKICAgICByZXR1cm4gZGVj
b2RlUGxhdGZvcm1EYXRhKGRlY29kZXIsIHJlc291cmNlUmVzcG9uc2UpOwogfQogCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29k
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit2b2lkIEFyZ3VtZW50Q29k
ZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCiB7CiAgICAgaWYgKGtTaG91bGRTZXJpYWxp
emVXZWJDb3JlRGF0YSkgewogICAgICAgICBib29sIGVycm9ySXNOdWxsID0gcmVzb3VyY2VFcnJv
ci5pc051bGwoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGVycm9ySXNOdWxsKTsKKyAgICAg
ICAgZW5jb2RlciA8PCBlcnJvcklzTnVsbDsKICAgICAgICAgaWYgKGVycm9ySXNOdWxsKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9y
LmRvbWFpbigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlRXJyb3IuZXJyb3JD
b2RlKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5mYWlsaW5nVVJM
KCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlRXJyb3IuaXNDYW5j
ZWxsYXRpb24oKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9yLmlzVGlt
ZW91dCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZUVycm9yLmRvbWFpbigpOworICAg
ICAgICBlbmNvZGVyIDw8IHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCk7CisgICAgICAgIGVuY29k
ZXIgPDwgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVz
b3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpOworICAgICAgICBlbmNvZGVyIDw8IHJl
c291cmNlRXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZUVycm9yLmlzVGltZW91dCgpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRmb3JtRGF0YShlbmNv
ZGVyLCByZXNvdXJjZUVycm9yKTsKQEAgLTU4NSwyNCArNTcxLDI0IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2QKICAgICByZXR1cm4gZGVjb2RlUGxhdGZvcm1EYXRh
KGRlY29kZXIsIHJlc291cmNlRXJyb3IpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8V2luZG93
RmVhdHVyZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXaW5kb3dG
ZWF0dXJlcyYgd2luZG93RmVhdHVyZXMpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2luZG93RmVhdHVy
ZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXaW5kb3dGZWF0dXJl
cyYgd2luZG93RmVhdHVyZXMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVz
LngpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy55KTsKLSAgICBlbmNvZGVy
LT5lbmNvZGUod2luZG93RmVhdHVyZXMud2lkdGgpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5k
b3dGZWF0dXJlcy5oZWlnaHQpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy54
U2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMueVNldCk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0KTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUod2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93
RmVhdHVyZXMubWVudUJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0
dXJlcy5zdGF0dXNCYXJWaXNpYmxlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVy
ZXMudG9vbEJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5s
b2NhdGlvbkJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5z
Y3JvbGxiYXJzVmlzaWJsZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLnJl
c2l6YWJsZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLmZ1bGxzY3JlZW4p
OwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5kaWFsb2cpOworICAgIGVuY29k
ZXIgPDwgd2luZG93RmVhdHVyZXMueDsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnk7
CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy53aWR0aDsKKyAgICBlbmNvZGVyIDw8IHdp
bmRvd0ZlYXR1cmVzLmhlaWdodDsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnhTZXQ7
CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy55U2V0OworICAgIGVuY29kZXIgPDwgd2lu
ZG93RmVhdHVyZXMud2lkdGhTZXQ7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5oZWln
aHRTZXQ7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5tZW51QmFyVmlzaWJsZTsKKyAg
ICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnN0YXR1c0JhclZpc2libGU7CisgICAgZW5jb2Rl
ciA8PCB3aW5kb3dGZWF0dXJlcy50b29sQmFyVmlzaWJsZTsKKyAgICBlbmNvZGVyIDw8IHdpbmRv
d0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1
cmVzLnNjcm9sbGJhcnNWaXNpYmxlOworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMucmVz
aXphYmxlOworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMuZnVsbHNjcmVlbjsKKyAgICBl
bmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLmRpYWxvZzsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVy
PFdpbmRvd0ZlYXR1cmVzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2luZG93
RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzKQpAQCAtNjQzLDE1ICs2MjksMTUgQEAgYm9vbCBBcmd1
bWVudENvZGVyPFdpbmRvd0ZlYXR1cmVzPjo6ZGVjbwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZmFsc2UpOworICAgICAgICBlbmNvZGVyIDw8
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW5jb2Rlci0+ZW5jb2RlKHRy
dWUpOwotICAgIGVuY29kZXItPmVuY29kZShjb2xvci5yZ2IoKSk7CisgICAgZW5jb2RlciA8PCB0
cnVlOworICAgIGVuY29kZXIgPDwgY29sb3IucmdiKCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIENvbG9yJiBjb2xvcikK
QEAgLTY3NCwxMiArNjYwLDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZShB
cmd1bWUKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q29tcG9zaXRpb25VbmRlcmxpbmU+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGlu
ZSYgdW5kZXJsaW5lKQordm9pZCBBcmd1bWVudENvZGVyPENvbXBvc2l0aW9uVW5kZXJsaW5lPjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxp
bmUmIHVuZGVybGluZSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUodW5kZXJsaW5lLnN0YXJ0T2Zm
c2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUodW5kZXJsaW5lLmVuZE9mZnNldCk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHVuZGVybGluZS50aGljayk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVuZGVy
bGluZS5jb2xvcik7CisgICAgZW5jb2RlciA8PCB1bmRlcmxpbmUuc3RhcnRPZmZzZXQ7CisgICAg
ZW5jb2RlciA8PCB1bmRlcmxpbmUuZW5kT2Zmc2V0OworICAgIGVuY29kZXIgPDwgdW5kZXJsaW5l
LnRoaWNrOworICAgIGVuY29kZXIgPDwgdW5kZXJsaW5lLmNvbG9yOwogfQogCiBib29sIEFyZ3Vt
ZW50Q29kZXI8Q29tcG9zaXRpb25VbmRlcmxpbmU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQpAQCAtNjk3LDEyICs2ODMs
MTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPENvbXBvc2l0aW9uVW5kZXJsaW5lPgogfQogCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLXZvaWQgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURldGFpbHM+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEYXRhYmFzZURldGFpbHMm
IGRldGFpbHMpCit2b2lkIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQog
ewotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWxzLm5hbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKGRldGFpbHMuZGlzcGxheU5hbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRldGFpbHMu
ZXhwZWN0ZWRVc2FnZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGV0YWlscy5jdXJyZW50VXNh
Z2UoKSk7CisgICAgZW5jb2RlciA8PCBkZXRhaWxzLm5hbWUoKTsKKyAgICBlbmNvZGVyIDw8IGRl
dGFpbHMuZGlzcGxheU5hbWUoKTsKKyAgICBlbmNvZGVyIDw8IGRldGFpbHMuZXhwZWN0ZWRVc2Fn
ZSgpOworICAgIGVuY29kZXIgPDwgZGV0YWlscy5jdXJyZW50VXNhZ2UoKTsKIH0KICAgICAKIGJv
b2wgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURldGFpbHM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBEYXRhYmFzZURldGFpbHMmIGRldGFpbHMpCkBAIC03MjgsMTEgKzcxNCwxMSBA
QCBib29sIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZGVjCiB9CiAjZW5kaWYKIAot
dm9pZCBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGRpY3RhdGlvbkFs
dGVybmF0aXZlKQordm9pZCBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUm
IGRpY3RhdGlvbkFsdGVybmF0aXZlKQogewotICAgIGVuY29kZXItPmVuY29kZShkaWN0YXRpb25B
bHRlcm5hdGl2ZS5yYW5nZVN0YXJ0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGljdGF0aW9uQWx0
ZXJuYXRpdmUucmFuZ2VMZW5ndGgpOwotICAgIGVuY29kZXItPmVuY29kZShkaWN0YXRpb25BbHRl
cm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0KTsKKyAgICBlbmNvZGVyIDw8IGRpY3RhdGlvbkFsdGVy
bmF0aXZlLnJhbmdlU3RhcnQ7CisgICAgZW5jb2RlciA8PCBkaWN0YXRpb25BbHRlcm5hdGl2ZS5y
YW5nZUxlbmd0aDsKKyAgICBlbmNvZGVyIDw8IGRpY3RhdGlvbkFsdGVybmF0aXZlLmRpY3RhdGlv
bkNvbnRleHQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERpY3RhdGlvbkFsdGVybmF0aXZlJiBk
aWN0YXRpb25BbHRlcm5hdGl2ZSkKQEAgLTc0NywxNiArNzMzLDE2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4KIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8Rmls
ZUNob29zZXJTZXR0aW5ncz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IEZpbGVDaG9vc2VyU2V0dGluZ3MmIHNldHRpbmdzKQordm9pZCBBcmd1bWVudENvZGVyPEZpbGVD
aG9vc2VyU2V0dGluZ3M+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBG
aWxlQ2hvb3NlclNldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc2V0
dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyk7CisgICAgZW5jb2RlciA8PCBzZXR0aW5ncy5hbGxv
d3NNdWx0aXBsZUZpbGVzOwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotICAgIGVuY29k
ZXItPmVuY29kZShzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxvYWQpOworICAgIGVuY29kZXIg
PDwgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3J5VXBsb2FkOwogI2VuZGlmCi0gICAgZW5jb2Rlci0+
ZW5jb2RlKHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcyk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHNl
dHRpbmdzLnNlbGVjdGVkRmlsZXMpOworICAgIGVuY29kZXIgPDwgc2V0dGluZ3MuYWNjZXB0TUlN
RVR5cGVzOworICAgIGVuY29kZXIgPDwgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlczsKICNpZiBFTkFC
TEUoTUVESUFfQ0FQVFVSRSkKLSAgICBlbmNvZGVyLT5lbmNvZGUoc2V0dGluZ3MuY2FwdHVyZSk7
CisgICAgZW5jb2RlciA8PCBzZXR0aW5ncy5jYXB0dXJlOwogI2VuZGlmCiB9CiAKQEAgLTc4MSwx
MiArNzY3LDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxGaWxlQ2hvb3NlclNldHRpbmdzPjoKIH0K
IAogCi12b2lkIEFyZ3VtZW50Q29kZXI8R3JhbW1hckRldGFpbD46OmVuY29kZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKQogewotICAgIGVuY29kZXItPmVuY29kZShkZXRh
aWwubG9jYXRpb24pOwotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWwubGVuZ3RoKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUoZGV0YWlsLmd1ZXNzZXMpOwotICAgIGVuY29kZXItPmVuY29kZShkZXRh
aWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICBlbmNvZGVyIDw8IGRldGFpbC5sb2NhdGlvbjsKKyAg
ICBlbmNvZGVyIDw8IGRldGFpbC5sZW5ndGg7CisgICAgZW5jb2RlciA8PCBkZXRhaWwuZ3Vlc3Nl
czsKKyAgICBlbmNvZGVyIDw8IGRldGFpbC51c2VyRGVzY3JpcHRpb247CiB9CiAKIGJvb2wgQXJn
dW1lbnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgR3JhbW1hckRldGFpbCYgZGV0YWlsKQpAQCAtODA0LDEzICs3OTAsMTMgQEAgYm9vbCBBcmd1
bWVudENvZGVyPEdyYW1tYXJEZXRhaWw+OjpkZWNvZAogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHJl
c3VsdC50eXBlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzdWx0LmxvY2F0aW9uKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUocmVzdWx0Lmxlbmd0aCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3Vs
dC5kZXRhaWxzKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzdWx0LnJlcGxhY2VtZW50KTsKKyAg
ICBlbmNvZGVyLmVuY29kZUVudW0ocmVzdWx0LnR5cGUpOworICAgIGVuY29kZXIgPDwgcmVzdWx0
LmxvY2F0aW9uOworICAgIGVuY29kZXIgPDwgcmVzdWx0Lmxlbmd0aDsKKyAgICBlbmNvZGVyIDw8
IHJlc3VsdC5kZXRhaWxzOworICAgIGVuY29kZXIgPDwgcmVzdWx0LnJlcGxhY2VtZW50OwogfQog
CiBib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpCkBAIC04MjgsMTEg
KzgxNCwxMSBAQCBib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxEcmFnU2Vzc2lvbj46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IERyYWdTZXNzaW9uJiByZXN1bHQpCit2
b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ1Nlc3Npb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBEcmFnU2Vzc2lvbiYgcmVzdWx0KQogewotICAgIGVuY29kZXItPmVuY29k
ZUVudW0ocmVzdWx0Lm9wZXJhdGlvbik7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3VsdC5tb3Vz
ZUlzT3ZlckZpbGVJbnB1dCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3VsdC5udW1iZXJPZkl0
ZW1zVG9CZUFjY2VwdGVkKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVzdWx0Lm9wZXJhdGlv
bik7CisgICAgZW5jb2RlciA8PCByZXN1bHQubW91c2VJc092ZXJGaWxlSW5wdXQ7CisgICAgZW5j
b2RlciA8PCByZXN1bHQubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZDsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPERyYWdTZXNzaW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
RHJhZ1Nlc3Npb24mIHJlc3VsdCkKQEAgLTg0Niw5ICs4MzIsOSBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8RHJhZ1Nlc3Npb24+OjpkZWNvZGUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxLVVJMPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
S1VSTCYgcmVzdWx0KQordm9pZCBBcmd1bWVudENvZGVyPEtVUkw+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBLVVJMJiByZXN1bHQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKHJlc3VsdC5zdHJpbmcoKSk7CisgICAgZW5jb2RlciA8PCByZXN1bHQuc3RyaW5nKCk7CiB9
CiAgICAgCiBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46OmRlY29kZShBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIEtVUkwmIHJlc3VsdCkKQEAgLTg2MCwxNCArODQ2LDE0IEBAIGJvb2wgQXJndW1l
bnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmIHVzZXJTdHls
ZVNoZWV0KQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hl
ZXQmIHVzZXJTdHlsZVNoZWV0KQogewotICAgIGVuY29kZXItPmVuY29kZSh1c2VyU3R5bGVTaGVl
dC5zb3VyY2UoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTdHlsZVNoZWV0LnVybCgpKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUodXNlclN0eWxlU2hlZXQud2hpdGVsaXN0KCkpOwotICAgIGVu
Y29kZXItPmVuY29kZSh1c2VyU3R5bGVTaGVldC5ibGFja2xpc3QoKSk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlRW51bSh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygpKTsKLSAgICBlbmNvZGVy
LT5lbmNvZGVFbnVtKHVzZXJTdHlsZVNoZWV0LmxldmVsKCkpOworICAgIGVuY29kZXIgPDwgdXNl
clN0eWxlU2hlZXQuc291cmNlKCk7CisgICAgZW5jb2RlciA8PCB1c2VyU3R5bGVTaGVldC51cmwo
KTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0LndoaXRlbGlzdCgpOworICAgIGVuY29k
ZXIgPDwgdXNlclN0eWxlU2hlZXQuYmxhY2tsaXN0KCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KHVzZXJTdHlsZVNoZWV0LmluamVjdGVkRnJhbWVzKCkpOworICAgIGVuY29kZXIuZW5jb2RlRW51
bSh1c2VyU3R5bGVTaGVldC5sZXZlbCgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KQpAQCAtOTAwLDE0ICs4ODYsMTQg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmIHVz
ZXJTY3JpcHQpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD46OmVuY29k
ZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmIHVz
ZXJTY3JpcHQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTY3JpcHQuc291cmNlKCkpOwot
ICAgIGVuY29kZXItPmVuY29kZSh1c2VyU2NyaXB0LnVybCgpKTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUodXNlclNjcmlwdC53aGl0ZWxpc3QoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTY3Jp
cHQuYmxhY2tsaXN0KCkpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odXNlclNjcmlwdC5pbmpl
Y3Rpb25UaW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odXNlclNjcmlwdC5pbmplY3Rl
ZEZyYW1lcygpKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQuc291cmNlKCk7CisgICAgZW5j
b2RlciA8PCB1c2VyU2NyaXB0LnVybCgpOworICAgIGVuY29kZXIgPDwgdXNlclNjcmlwdC53aGl0
ZWxpc3QoKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQuYmxhY2tsaXN0KCk7CisgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKHVzZXJTY3JpcHQuaW5qZWN0aW9uVGltZSgpKTsKKyAgICBlbmNvZGVy
LmVuY29kZUVudW0odXNlclNjcmlwdC5pbmplY3RlZEZyYW1lcygpKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTY3JpcHQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMTMyOTgw
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3NyArNzIsNzcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIENvcmVJUEMgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpGbG9hdFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiB9
OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UmVjdD4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFNpemU+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpGbG9hdFNpemUmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6SW50UG9pbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6SW50UmVjdCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpJbnRTaXplPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpJbnRTaXplJik7CiB9OwogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpN
aW1lQ2xhc3NJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TWltZUNsYXNzSW5mbyYpOwogICAgIHN0
YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpNaW1lQ2xhc3NJbmZv
Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBsdWdp
bkluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6UGx1Z2luSW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpQbHVnaW5JbmZvJik7CiAgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlBsdWdpbkluZm8mKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwog
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2U+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJik7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJD
b3JlOjpQcm90ZWN0aW9uU3BhY2UmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6Q3JlZGVudGlhbD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpD
dXJzb3I+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1
bWVudERlY29kZXIqLCBXZWJDb3JlOjpDdXJzb3ImKTsKIH07CiAKQEAgLTE1Myw5ICsxNTMsOSBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wga1Nob3VsZFNlcmlhbGl6ZVdlYkNvcmVEYXRhID0gdHJ1ZTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZVBsYXRmb3JtRGF0
YShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiB9OwogCkBAIC0xNjYsOSArMTY2LDkgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBjb25zdCBib29sIGtT
aG91bGRTZXJpYWxpemVXZWJDb3JlRGF0YSA9IHRydWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHN0YXRpYyB2b2lk
IGVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3Vt
ZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwogfTsKIApAQCAtMTc5LDc2ICsxNzksNzYgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBjb25zdCBib29sIGtTaG91
bGRTZXJpYWxpemVXZWJDb3JlRGF0YSA9IHRydWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHN0YXRpYyB2b2lkIGVuY29kZVBsYXRm
b3JtRGF0YShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGVQbGF0
Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogfTsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpXaW5kb3dGZWF0dXJl
cz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogfTsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb2xvcj4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBX
ZWJDb3JlOjpDb2xvciYpOwogfTsKIAogI2lmIFBMQVRGT1JNKE1BQykKIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OktleXByZXNzQ29t
bWFuZCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJik7CiB9OwogI2VuZGlmCiAKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmUmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RGF0YWJhc2VEZXRhaWxzPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyYpOworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEYXRhYmFzZURldGFp
bHMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6
RGF0YWJhc2VEZXRhaWxzJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7CiB9OwogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3M+IHsK
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
RmlsZUNob29zZXJTZXR0aW5ncyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJik7CiAgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGlu
Z3MmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBj
b25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYp
OwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwg
Y29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0Jik7CisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCYp
OwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXN1bHQmKTsKIH07CiAgICAgCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkRyYWdTZXNzaW9uPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRyYWdTZXNzaW9uJik7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkRyYWdTZXNzaW9uJik7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkRyYWdT
ZXNzaW9uJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OktVUkw+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OktVUkwmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VXNl
clN0eWxlU2hlZXQmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0Jik7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6VXNl
clNjcmlwdCYpOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkdlb2xvY2F0
aW9uUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJH
ZW9sb2NhdGlvblBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIFdlYkdlb2xvY2F0aW9uUG9zaXRpb246On5XZWJHZW9sb2NhdGlvblAKIAog
dm9pZCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpEYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIENvcmVJUEM6OlNpbXBsZUFyZ3VtZW50
Q29kZXI8V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6RGF0YT46OmVuY29kZSgmZW5jb2RlciwgKnRo
aXMpOworICAgIENvcmVJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViR2VvbG9jYXRpb25Qb3Np
dGlvbjo6RGF0YT46OmVuY29kZShlbmNvZGVyLCAqdGhpcyk7CiB9CiAKIGJvb2wgV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbjo6RGF0YTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgRGF0YSYgZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRy
ZWVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxX
ZWJMYXllckluZm8+OjplbmNvZGUoJmVuY29kZXIsICp0aGlzKTsKKyAgICBTaW1wbGVBcmd1bWVu
dENvZGVyPFdlYkxheWVySW5mbz46OmVuY29kZShlbmNvZGVyLCAqdGhpcyk7CiB9CiAKIGJvb2wg
V2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBX
ZWJMYXllckluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIEFyZ3VtZW50
Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCit2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRQ
b2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRQb2lu
dDNEJiBmbG9hdFBvaW50M0QpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
M0Q+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KQEAgLTgzLDcgKzgzLDcgQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZQogICAgIHJldHVybiBTaW1w
bGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50
M0QpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgTGVuZ3RoJiBsZW5ndGgpCit2b2lkIEFyZ3VtZW50Q29kZXI8
TGVuZ3RoPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgTGVuZ3RoJiBs
ZW5ndGgpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rl
ciwgbGVuZ3RoKTsKIH0KQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPExlbmd0
aD46OmRlY29kZShBcmd1bQogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46
OmRlY29kZShkZWNvZGVyLCBsZW5ndGgpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCit2b2lkIEFyZ3VtZW50
Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCiB7
CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShl
bmNvZGVyLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCk7CiB9CkBAIC0xMDQsMjUgKzEwNCwyNSBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+CiB9CiAKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHN0
YXRpY19jYXN0PHVpbnQzMl90PihmaWx0ZXJzLnNpemUoKSkpOworICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGZpbHRlcnMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0
aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgICAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKHR5cGUpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0odHlw
ZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFtb3VudCgpKSk7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFt
b3VudCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKICAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29k
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5zdGRE
ZXZpYXRpb24oKSk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZpbHRlck9wZXJhdAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKICAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIHNoYWRv
dyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIp
OwogICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBz
aGFkb3ctPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19j
YXN0PGludDMyX3Q+KHNoYWRvdy0+c3RkRGV2aWF0aW9uKCkpKTsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LT5zdGREZXZpYXRpb24oKSk7CiAgICAg
ICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy0+Y29s
b3IoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTQxLDM0ICsxNDEsMzQg
QEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdAogICAgICAgICAgICAg
QVNTRVJUKGN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbSgpKTsKICAgICAgICAgICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtKCk7
CiAgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+aXNMb2FkZWQoKSk7Ci0gICAgICAgICAgICBl
bmNvZGVyLT5lbmNvZGUocHJvZ3JhbS0+dmVydGV4U2hhZGVyU3RyaW5nKCkpOwotICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3RyaW5nKCkpOwotICAg
ICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShwcm9ncmFtLT5wcm9ncmFtVHlwZSgpKTsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyU3RyaW5nKCk7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7CisgICAg
ICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJvZ3JhbS0+cHJvZ3JhbVR5cGUoKSk7CiAgICAg
ICAgICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3MgPSBwcm9n
cmFtLT5taXhTZXR0aW5ncygpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtaXhT
ZXR0aW5ncy5ibGVuZE1vZGUpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtaXhT
ZXR0aW5ncy5jb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHByb2dyYW0tPm1lc2hUeXBlKCkpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KG1peFNldHRpbmdzLmJsZW5kTW9kZSk7CisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0o
bWl4U2V0dGluZ3MuY29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKHByb2dyYW0tPm1lc2hUeXBlKCkpOwogCiAgICAgICAgICAgICBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSBjdXN0b21PcGVyYXRpb24tPnBhcmFtZXRlcnMoKTsK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4ocGFyYW1l
dGVycy5zaXplKCkpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHBhcmFtZXRlcnMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV07Ci0gICAgICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhcmFtZXRlci0+bmFtZSgpKTsKLSAgICAgICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBlbmNvZGVyIDw8IHBhcmFtZXRlci0+bmFtZSgpOworICAgICAgICAgICAgICAg
IGVuY29kZXIuZW5jb2RlRW51bShwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSk7CiAKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOiB7CiAgICAgICAgICAg
ICAgICAgICAgIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKiBhcnJheVBhcmFtZXRlciA9IHN0
YXRpY19jYXN0PEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKj4ocGFyYW1ldGVyLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90
PihhcnJheVBhcmFtZXRlci0+c2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFycmF5UGFyYW1ldGVyLT5zaXplKCkpOwogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFycmF5UGFyYW1ldGVyLT5zaXpl
KCk7ICsraikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShhcnJheVBh
cmFtZXRlci0+dmFsdWVBdChqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8
IGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGopOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI6Ok5VTUJFUjogewogICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJOdW1iZXJQ
YXJhbWV0ZXIqIG51Ym1lclBhcmFtZXRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck51bWJl
clBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVibWVyUGFyYW1ldGVyLT5zaXplKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bnVibWVyUGFyYW1ldGVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IG51Ym1lclBhcmFtZXRlci0+c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAg
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUobnVibWVyUGFyYW1ldGVyLT52YWx1ZUF0KGopKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgbnVibWVyUGFyYW1ldGVyLT52YWx1
ZUF0KGopOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlRSQU5TRk9STTogewpA
QCAtMTc5LDkgKzE3OSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVy
YXQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCkpOwotICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGN1c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSk7Ci0gICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSk7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGN1c3RvbU9wZXJhdGlvbi0+bWVzaFJvd3MoKTsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgY3VzdG9tT3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpOworICAgICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zNDcsMTIgKzM0Nywx
MiBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0CiB9CiAjZW5kaWYK
IAotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1P
cGVyYXRpb25zKQordm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNv
ZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0
cmFuc2Zvcm1PcGVyYXRpb25zKQogewotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uID0gdHJhbnNmb3JtT3Bl
cmF0aW9ucy5hdChpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShvcGVyYXRpb24tPmdl
dE9wZXJhdGlvblR5cGUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSk7CiAKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSkgewogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
WDoKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0
aW9ucz46CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKICAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CiAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNf
Y2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPngoKSk7Ci0g
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT55KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eigpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCk7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eSgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKQEAgLTM3NywxNiArMzc3LDE2IEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjoKICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1k6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eCgpKTsKLSAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT55KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0
PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKSk7Ci0gICAg
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGUoKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbikt
PngoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpOworICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24p
LT56KCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVc6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29u
c3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlWCgpKTsKLSAgICAg
ICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGVZKCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5n
bGVYKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5hbmdsZVkoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOgogICAgICAgICAgICAg
QXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBzdGF0
aWNfY2FzdDxjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5tYXRy
aXgoKSk7CkBAIC01MDcsMzAgKzUwNywzMCBAQCBib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3Jt
T3BlcmF0aW9ucz46CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGVuY29kZVRp
bWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgVGltaW5nRnVuY3Rp
b24qIHRpbWluZ0Z1bmN0aW9uKQorc3RhdGljIHZvaWQgZW5jb2RlVGltaW5nRnVuY3Rpb24oQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rp
b24pCiB7CiAgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikgewotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEpKTsKKyAgICAgICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdG
dW5jdGlvblR5cGUgdHlwZSA9IHRpbWluZ0Z1bmN0aW9uID8gdGltaW5nRnVuY3Rpb24tPnR5cGUo
KSA6IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHR5cGUpOworICAgIGVuY29kZXIuZW5jb2RlRW51bSh0eXBlKTsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogewog
ICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpYyA9IHN0YXRpY19j
YXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0g
ICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eDEoKSk7Ci0gICAgICAgIGVuY29kZXItPmVu
Y29kZShjdWJpYy0+eTEoKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eDIoKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eTIoKSk7CisgICAgICAgIGVuY29kZXIg
PDwgY3ViaWMtPngxKCk7CisgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPnkxKCk7CisgICAgICAg
IGVuY29kZXIgPDwgY3ViaWMtPngyKCk7CisgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPnkyKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1
bmN0aW9uOiB7CiAgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGVwcy0+bnVtYmVy
T2ZTdGVwcygpKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGVwcy0+c3RlcEF0U3RhcnQo
KSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0ZXBzLT5udW1i
ZXJPZlN0ZXBzKCkpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZXBzLT5zdGVwQXRTdGFydCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtNTc5LDM1ICs1NzksMzUgQEAgYm9vbCBk
ZWNvZGVUaW1pbmdGdW5jdGlvbihBcmd1bWVudERlY29kZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmlt
YXRpb24pCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmVuY29k
ZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24m
IGFuaW1hdGlvbikKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLm5hbWUoKSk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5ib3hTaXplKCkpOworICAgIGVuY29kZXIgPDwg
YW5pbWF0aW9uLm5hbWUoKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5ib3hTaXplKCk7CiAg
ICAgZW5jb2Rlci0+ZW5jb2RlRW51bShhbmltYXRpb24uc3RhdGUoKSk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKGFuaW1hdGlvbi5zdGFydFRpbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1h
dGlvbi5wYXVzZVRpbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5saXN0c01h
dGNoKCkpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnN0YXJ0VGltZSgpOworICAgIGVuY29k
ZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmxp
c3RzTWF0Y2goKTsKIAogICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9iamVjdCA9IGFu
aW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGFuaW1hdGlvbk9i
amVjdC0+ZGlyZWN0aW9uKCkpOwotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgpKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KGFuaW1hdGlvbk9iamVjdC0+ZHVyYXRpb24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1h
dGlvbk9iamVjdC0+aXRlcmF0aW9uQ291bnQoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGFu
aW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+ZmlsbE1vZGUoKSk7CisgICAgZW5jb2RlciA8PCBh
bmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb25PYmpl
Y3QtPml0ZXJhdGlvbkNvdW50KCk7CiAgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2Rlciwg
YW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlvbigpLmdldCgpKTsKIAogICAgIGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb24ua2V5ZnJhbWVzKCk7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlRW51bShrZXlmcmFtZXMucHJvcGVydHkoKSk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6ZSgpKSk7CisgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBBbmltYXRp
b25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMuYXQoaSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29k
ZSh2YWx1ZS0+a2V5VGltZSgpKTsKKyAgICAgICAgZW5jb2RlciA8PCB2YWx1ZS0+a2V5VGltZSgp
OwogICAgICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCB2YWx1ZS0+dGltaW5nRnVu
Y3Rpb24oKSk7CiAgICAgICAgIHN3aXRjaCAoa2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKICAgICAg
ICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZShzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1
ZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmlt
YXRpb25WYWx1ZSo+KHZhbHVlKS0+dmFsdWUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgICAgICBlbmNv
ZGVyLT5lbmNvZGUoKnN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4o
dmFsdWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19jYXN0PGNv
bnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTcwMyw5
ICs3MDMsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0
aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbnMuYW5p
bWF0aW9ucygpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlv
bnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKQEAgLTcxNCwxOCArNzE0LDE2IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxHcmFwaGljc0xheWVyQW5pbWF0aW8KIH0KIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
dm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPjo6ZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
VG9rZW4mIHRva2VuKQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVRva2VuPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQogewogI2lmIE9TKERBUldJTikKLSAgICBlbmNv
ZGVyLT5lbmNvZGUoQXR0YWNobWVudCh0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSwgTUFDSF9NU0df
VFlQRV9NT1ZFX1NFTkQpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoQXR0YWNobWVudCh0b2tlbi5i
YWNrQnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpOworICAgIGVuY29kZXIg
PDwgQXR0YWNobWVudCh0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSwgTUFDSF9NU0dfVFlQRV9NT1ZF
X1NFTkQpOworICAgIGVuY29kZXIgPDwgQXR0YWNobWVudCh0b2tlbi5iYWNrQnVmZmVySGFuZGxl
LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIHVpbnQ2
NF90IGZyb250QnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRva2VuLmZyb250
QnVmZmVySGFuZGxlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZnJvbnRCdWZmZXIpOwotICAgIHVp
bnQ2NF90IGJhY2tCdWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odG9rZW4uYmFj
a0J1ZmZlckhhbmRsZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGJhY2tCdWZmZXIpOworICAgIGVu
Y29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4odG9rZW4uZnJvbnRCdWZmZXJIYW5k
bGUpOworICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4odG9rZW4uYmFj
a0J1ZmZlckhhbmRsZSk7CiAjZWxpZiBPUyhMSU5VWCkKLSAgICBlbmNvZGVyLT5lbmNvZGUodG9r
ZW4uZnJvbnRCdWZmZXJIYW5kbGUpOworICAgIGVuY29kZXIgPDwgdG9rZW4uZnJvbnRCdWZmZXJI
YW5kbGU7CiAjZW5kaWYKIH0KIApAQCAtNzU3LDQgKzc1NSw1IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpHcmFwaGljc1N1cmYKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBD
CisKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24g
MTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDUw
ICs1MSw1MSBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlVG9rZW47CiBuYW1lc3BhY2UgQ29yZUlQ
QyB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2lu
dDNEPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQzRCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CiB9OwogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgm
KTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6TGVuZ3RoJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdl
YkNvcmU6Okxlbmd0aCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXIqLCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogfTsKIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyYpOwogfTsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9u
cyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlv
bnM+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9uJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOwog
fTsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VU
b2tlbiYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShB
cmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwogfTsKICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAKICNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVy
c0d0ay5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
QXJndW1lbnRDb2RlcnNHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotc3RhdGljIHZv
aWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHZGtQaXhidWYq
IHBpeGJ1ZikKK3N0YXRpYyB2b2lkIGVuY29kZUltYWdlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgR2RrUGl4YnVmKiBwaXhidWYpCiB7CiAgICAgSW50U2l6ZSBpbWFnZVNpemUoZ2Rr
X3BpeGJ1Zl9nZXRfd2lkdGgocGl4YnVmKSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KHBpeGJ1Zikp
OwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
KTsKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNv
ZGVyKgogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBiaXRtYXAtPmNy
ZWF0ZUhhbmRsZShoYW5kbGUpOwogCi0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7CisgICAg
ZW5jb2RlciA8PCBoYW5kbGU7CiB9CiAKIHN0YXRpYyBib29sIGRlY29kZUltYWdlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgR1JlZlB0cjxHZGtQaXhidWY+JiBwaXhidWYpCkBAIC04NSwzMCAr
ODUsMzAgQEAgc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3N0YXRpYyB2
b2lkIGVuY29kZURhdGFPYmplY3QoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0KQogewogICAgIGJvb2wgaGFzVGV4dCA9IGRhdGFPYmplY3Qt
Pmhhc1RleHQoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVGV4dCk7CisgICAgZW5jb2RlciA8
PCBoYXNUZXh0OwogICAgIGlmIChoYXNUZXh0KQotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZGF0
YU9iamVjdC0+dGV4dCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT50ZXh0KCk7
CiAKICAgICBib29sIGhhc01hcmt1cCA9IGRhdGFPYmplY3QtPmhhc01hcmt1cCgpOwotICAgIGVu
Y29kZXItPmVuY29kZShoYXNNYXJrdXApOworICAgIGVuY29kZXIgPDwgaGFzTWFya3VwOwogICAg
IGlmIChoYXNNYXJrdXApCi0gICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT5tYXJr
dXAoKSk7CisgICAgICAgIGVuY29kZXIgPDwgZGF0YU9iamVjdC0+bWFya3VwKCk7CiAKICAgICBi
b29sIGhhc1VSTCA9IGRhdGFPYmplY3QtPmhhc1VSTCgpOwotICAgIGVuY29kZXItPmVuY29kZSho
YXNVUkwpOworICAgIGVuY29kZXIgPDwgaGFzVVJMOwogICAgIGlmIChoYXNVUkwpCi0gICAgICAg
IGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGVu
Y29kZXIgPDwgZGF0YU9iamVjdC0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBib29sIGhhc1VSSUxp
c3QgPSBkYXRhT2JqZWN0LT5oYXNVUklMaXN0KCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1VS
SUxpc3QpOworICAgIGVuY29kZXIgPDwgaGFzVVJJTGlzdDsKICAgICBpZiAoaGFzVVJJTGlzdCkK
LSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPnVyaUxpc3QoKSk7CisgICAgICAg
IGVuY29kZXIgPDwgZGF0YU9iamVjdC0+dXJpTGlzdCgpOwogCiAgICAgYm9vbCBoYXNJbWFnZSA9
IGRhdGFPYmplY3QtPmhhc0ltYWdlKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsK
KyAgICBlbmNvZGVyIDw8IGhhc0ltYWdlOwogICAgIGlmIChoYXNJbWFnZSkKICAgICAgICAgZW5j
b2RlSW1hZ2UoZW5jb2RlciwgZGF0YU9iamVjdC0+aW1hZ2UoKSk7CiB9CkBAIC0xNzIsMTUgKzE3
MiwxNSBAQCBzdGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29kZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEu
Y2xpZW50UG9zaXRpb24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmdsb2JhbFBv
c2l0aW9uKCkpOwotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oZHJh
Z0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpKTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmZsYWdzKCkpKTsKKyAgICBlbmNvZGVy
IDw8IGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCk7CisgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5n
bG9iYWxQb3NpdGlvbigpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRy
YWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihkcmFnRGF0YS5mbGFncygpKTsKIAogICAgIERhdGFPYmplY3RH
dGsqIHBsYXRmb3JtRGF0YSA9IGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpOwotICAgIGVuY29kZXIt
PmVuY29kZShzdGF0aWNfY2FzdDxib29sPihwbGF0Zm9ybURhdGEpKTsKKyAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGJvb2w+KHBsYXRmb3JtRGF0YSk7CiAgICAgaWYgKHBsYXRmb3JtRGF0YSkK
ICAgICAgICAgZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOwogfQpAQCAt
MjE5LDEyICsyMTksMTEgQEAgYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKEFy
ZwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBlbmNvZGVHS2V5RmlsZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIEdLZXlGaWxlKiBrZXlGaWxlKQorc3RhdGljIHZvaWQgZW5j
b2RlR0tleUZpbGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBHS2V5RmlsZSoga2V5RmlsZSkK
IHsKICAgICBnc2l6ZSBkYXRhU2l6ZTsKICAgICBHT3duUHRyPGNoYXI+IGRhdGEoZ19rZXlfZmls
ZV90b19kYXRhKGtleUZpbGUsICZkYXRhU2l6ZSwgMCkpOwotICAgIERhdGFSZWZlcmVuY2UgZGF0
YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmdldCgpKSwgZGF0YVNp
emUpOwotICAgIGVuY29kZXItPmVuY29kZShkYXRhUmVmZXJlbmNlKTsKKyAgICBlbmNvZGVyIDw8
IERhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YS5nZXQoKSksIGRh
dGFTaXplKTsKIH0KIAogc3RhdGljIGJvb2wgZGVjb2RlR0tleUZpbGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBHT3duUHRyPEdLZXlGaWxlPiYga2V5RmlsZSkKQEAgLTI0NSw3ICsyNDQsNyBA
QCBzdGF0aWMgYm9vbCBkZWNvZGVHS2V5RmlsZShBcmd1bWVudERlY29kCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgR3RrUHJpbnRT
ZXR0aW5ncyogcHJpbnRTZXR0aW5ncykKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5j
b2RlciwgR3RrUHJpbnRTZXR0aW5ncyogcHJpbnRTZXR0aW5ncykKIHsKICAgICBHT3duUHRyPEdL
ZXlGaWxlPiBrZXlGaWxlKGdfa2V5X2ZpbGVfbmV3KCkpOwogICAgIGd0a19wcmludF9zZXR0aW5n
c190b19rZXlfZmlsZShwcmludFNldHRpbmdzLCBrZXlGaWxlLmdldCgpLCAiUHJpbnQgU2V0dGlu
Z3MiKTsKQEAgLTI2OCw3ICsyNjcsNyBAQCBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRl
Y29kZXIsIEdSCiAgICAgcmV0dXJuIHByaW50U2V0dGluZ3M7CiB9CiAKLXZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciogZW5jb2RlciwgR3RrUGFnZVNldHVwKiBwYWdlU2V0dXApCit2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIEd0a1BhZ2VTZXR1cCogcGFnZVNldHVwKQog
ewogICAgIEdPd25QdHI8R0tleUZpbGU+IGtleUZpbGUoZ19rZXlfZmlsZV9uZXcoKSk7CiAgICAg
Z3RrX3BhZ2Vfc2V0dXBfdG9fa2V5X2ZpbGUocGFnZVNldHVwLCBrZXlGaWxlLmdldCgpLCAiUGFn
ZSBTZXR1cCIpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVy
c0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRD
b2RlcnNHdGsuaAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9Bcmd1bWVudENvZGVyc0d0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTQgQEAg
Y2xhc3MgRHJhZ0RhdGE7CiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RHJh
Z0RhdGEmKTsKIH07CiAKLXZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIEd0a1ByaW50U2V0
dGluZ3MqKTsKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIEd0a1ByaW50U2V0dGluZ3Mq
KTsKIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5n
cz4mKTsKIAotdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgR3RrUGFnZVNldHVwKik7Cit2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBHdGtQYWdlU2V0dXAqKTsKIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciosIEdSZWZQdHI8R3RrUGFnZVNldHVwPiYpOwogCiB9IC8vIG5hbWVz
cGFjZSBDb3JlSVBDCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDE2ICszOCwxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1l
c3BhY2UgQ29yZUlQQyB7CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+Ojpl
bmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJl
cXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBib29sIHJlcXVlc3RJ
c1ByZXNlbnQgPSByZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KCk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHJlcXVlc3RJc1ByZXNlbnQpOworICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2Vu
dDsKIAogICAgIGlmICghcmVxdWVzdElzUHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdGlvbmFyeShBZG9wdENGLCBXS05TVVJMUmVx
dWVzdENyZWF0ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlc291cmNlUmVxdWVzdC5uc1VS
TFJlcXVlc3QoKSwgQ29yZUlQQzo6dG9rZW5OdWxsVHlwZVJlZigpKSk7Ci0gICAgQ29yZUlQQzo6
ZW5jb2RlKCplbmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNvZGUo
ZW5jb2RlciwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKQEAgLTczLDE2ICs3MywxNiBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZv
cm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzb3VyY2VSZXNwb25zZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6
ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKIHsKICAgICBib29sIHJlc3BvbnNlSXNQcmVz
ZW50ID0gcmVzb3VyY2VSZXNwb25zZS5uc1VSTFJlc3BvbnNlKCk7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKHJlc3BvbnNlSXNQcmVzZW50KTsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNlSXNQcmVzZW50
OwogCiAgICAgaWYgKCFyZXNwb25zZUlzUHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGljdGlvbmFyeShBZG9wdENGLCBXS05TVVJMUmVz
cG9uc2VDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXNvdXJjZVJlc3BvbnNlLm5z
VVJMUmVzcG9uc2UoKSwgQ29yZUlQQzo6dG9rZW5OdWxsVHlwZVJlZigpKSk7Ci0gICAgQ29yZUlQ
Qzo6ZW5jb2RlKCplbmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNv
ZGUoZW5jb2RlciwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKQEAgLTExMywxMCArMTEz
LDEwIEBAIHN0YXRpYyBOU1N0cmluZyogbnNTdHJpbmcoY29uc3QgU3RyaW5nJiAKICAgICByZXR1
cm4gc3RyaW5nLmltcGwoKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpyZWludGVy
cHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihzdHJpbmcuY2hhcmFjdGVycygpKSBsZW5ndGg6c3Ry
aW5nLmxlbmd0aCgpXSA6IEAiIjsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJy
b3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
RXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQogewogICAgIGJvb2wgZXJyb3JJc051bGwg
PSByZXNvdXJjZUVycm9yLmlzTnVsbCgpOwotICAgIGVuY29kZXItPmVuY29kZShlcnJvcklzTnVs
bCk7CisgICAgZW5jb2RlciA8PCBlcnJvcklzTnVsbDsKIAogICAgIGlmIChlcnJvcklzTnVsbCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI0LDEwICsxMjQsMTAgQEAgdm9pZCBBcmd1bWVudENvZGVy
PFJlc291cmNlRXJyb3I+OjplbmNvZAogICAgIE5TRXJyb3IgKm5zRXJyb3IgPSByZXNvdXJjZUVy
cm9yLm5zRXJyb3IoKTsKIAogICAgIFN0cmluZyBkb21haW4gPSBbbnNFcnJvciBkb21haW5dOwot
ICAgIGVuY29kZXItPmVuY29kZShkb21haW4pOwotICAgIAorICAgIGVuY29kZXIgPDwgZG9tYWlu
OworCiAgICAgaW50NjRfdCBjb2RlID0gW25zRXJyb3IgY29kZV07Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKGNvZGUpOworICAgIGVuY29kZXIgPDwgY29kZTsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHN0cmluZ1VzZXJJbmZvTWFwOwogCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCB2b2lkIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kCiAgICAgICAgIHN0cmluZ1VzZXJJbmZv
TWFwLnNldChrZXksIChOU1N0cmluZyAqKXZhbHVlKTsKICAgICAgICAgY29udGludWU7CiAgICAg
fQotICAgIGVuY29kZXItPmVuY29kZShzdHJpbmdVc2VySW5mb01hcCk7CisgICAgZW5jb2RlciA8
PCBzdHJpbmdVc2VySW5mb01hcDsKIAogICAgIGlkIHBlZXJDZXJ0aWZpY2F0ZUNoYWluID0gW3Vz
ZXJJbmZvIG9iamVjdEZvcktleTpAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSJdOwog
ICAgIEFTU0VSVCghcGVlckNlcnRpZmljYXRlQ2hhaW4gfHwgW3BlZXJDZXJ0aWZpY2F0ZUNoYWlu
IGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKFBs
YXRmb3JtQ2VydGlmaWNhdGVJbmZvKChDRkFycmF5UmVmKXBlZXJDZXJ0aWZpY2F0ZUNoYWluKSk7
CisgICAgZW5jb2RlciA8PCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygoQ0ZBcnJheVJlZilwZWVy
Q2VydGlmaWNhdGVDaGFpbik7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9y
Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VF
cnJvciYgcmVzb3VyY2VFcnJvcikKQEAgLTE5NCwxMCArMTk0LDkgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFJlc291cmNlRXJyb3I+OjpkZWNvZAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFy
Z3VtZW50Q29kZXI8S2V5cHJlc3NDb21tYW5kPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgS2V5cHJlc3NDb21tYW5kJiBrZXlwcmVzc0NvbW1hbmQpCit2b2lkIEFyZ3Vt
ZW50Q29kZXI8S2V5cHJlc3NDb21tYW5kPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgS2V5cHJlc3NDb21tYW5kJiBrZXlwcmVzc0NvbW1hbmQpCiB7Ci0gICAgZW5jb2Rl
ci0+ZW5jb2RlKGtleXByZXNzQ29tbWFuZC5jb21tYW5kTmFtZSk7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKGtleXByZXNzQ29tbWFuZC50ZXh0KTsKKyAgICBlbmNvZGVyIDw8IGtleXByZXNzQ29tbWFu
ZC5jb21tYW5kTmFtZSA8PCBrZXlwcmVzc0NvbW1hbmQudGV4dDsKIH0KICAgICAKIGJvb2wgQXJn
dW1lbnRDb2RlcjxLZXlwcmVzc0NvbW1hbmQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBLZXlwcmVzc0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAJKHJldmlzaW9uIDEzMjk4MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDE1IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZyAsIFZlY3Rvcjx1aW50OF90PiA+IE1JTUVEYXRhSGFzaE1hcDsKIAot
dm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQordm9pZCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0
YS5jbGllbnRQb3NpdGlvbigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuZ2xvYmFs
UG9zaXRpb24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKCh1aW50NjRfdClkcmFnRGF0YS5kcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKCh1aW50NjRf
dClkcmFnRGF0YS5mbGFncygpKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmNsaWVudFBvc2l0
aW9uKCk7CisgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpOworICAgIGVu
Y29kZXIgPDwgKHVpbnQ2NF90KWRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygp
OworICAgIGVuY29kZXIgPDwgKHVpbnQ2NF90KWRyYWdEYXRhLmZsYWdzKCk7CiAKICAgICBib29s
IGhhc1BsYXRmb3JtRGF0YSA9IGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpOwotICAgIGVuY29kZXIt
PmVuY29kZShoYXNQbGF0Zm9ybURhdGEpOworICAgIGVuY29kZXIgPDwgaGFzUGxhdGZvcm1EYXRh
OwogICAgIGlmICghaGFzUGxhdGZvcm1EYXRhKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0LDcg
KzU0LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZQogICAgICAg
ICB2ZGF0YS5hcHBlbmQoKHVpbnQ4X3QqKShieXRlcy5kYXRhKCkpLCBieXRlcy5zaXplKCkpOwog
ICAgICAgICBtYXAuYWRkKFN0cmluZyhmb3JtYXRzW2ldKSwgdmRhdGEpOwogICAgIH0KLSAgICBl
bmNvZGVyLT5lbmNvZGUobWFwKTsKKyAgICBlbmNvZGVyIDw8IG1hcDsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgRHJhZ0RhdGEmIGRyYWdEYXRhKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0FyZ3VtZW50Q29kZXJzUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvQXJndW1lbnRDb2RlcnNRdC5oCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSAr
MjYsMTEgQEAKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXIqLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYpOwordm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OkRyYWdEYXRhJik7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RHJhZ0RhdGEm
KTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRD
b2RlcnNRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1dlYkNv
cmVBcmd1bWVudENvZGVyc1F0LmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAKIG5hbWVzcGFjZSBD
b3JlSVBDIHsKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBs
YXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0KQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46
OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogfQogCkBAIC00NCw3ICs0NCw3IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjpkZWMKIH0KIAogCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2Up
Cit2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmVuY29kZVBsYXRmb3JtRGF0
YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCiB7CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFJlc291cmNlUmVzcG9uc2U+OjpkZQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJj
ZUVycm9yPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZUVycm9yPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
U291cC5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3Vw
L1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICsz
Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAK
LXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNl
UmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0
Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHJlc291cmNlUmVxdWVzdC5zb3VwTWVzc2FnZUZsYWdzKCkpKTsKKyAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXNvdXJjZVJlcXVlc3Quc291cE1lc3NhZ2VGbGFn
cygpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVBs
YXRmb3JtRGF0YShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0KQpAQCAtNTEsOSArNTEsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3Vy
Y2VSZXF1ZXN0Pjo6ZGVjCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9u
c2U+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJl
c291cmNlUmVzcG9uc2U+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQogewotICAgIGVu
Y29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzb3VyY2VSZXNwb25zZS5zb3Vw
TWVzc2FnZUZsYWdzKCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihy
ZXNvdXJjZVJlc3BvbnNlLnNvdXBNZXNzYWdlRmxhZ3MoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKQEAgLTY2LDcg
KzY2LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjpkZQogfQogCiAK
LXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFy
Z3VtZW50RW5jb2RlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBBcmd1bWVudENvZGVy
PFJlc291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93
aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHJldmlzaW9uIDEz
Mjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJz
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDE3IEBAIG5hbWVzcGFjZSBDb3Jl
SVBDIHsKIAogLy8gRklYTUU6IFRoZXNlIGNvZGVycyBzaG91bGQgcmVhbGx5IGdvIGluIGEgV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzQ0ZOZXR3b3JrIGZpbGUuCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsK
ICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlc291cmNl
UmVxdWVzdC5jZlVSTFJlcXVlc3QoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVxdWVzdElzUHJl
c2VudCk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVzZW50OwogCiAgICAgaWYgKCFyZXF1
ZXN0SXNQcmVzZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBkaWN0aW9uYXJ5KEFkb3B0Q0YsIHdrQ0ZVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXph
YmxlUmVwcmVzZW50YXRpb24ocmVzb3VyY2VSZXF1ZXN0LmNmVVJMUmVxdWVzdCgpLCBDb3JlSVBD
Ojp0b2tlbk51bGxUeXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoKmVuY29kZXIsIGRp
Y3Rpb25hcnkuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBkaWN0aW9uYXJ5
LmdldCgpKTsKICNlbmRpZgogfQogCkBAIC05NSwxNyArOTUsMTcgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFJlc291cmNlUmVxdWVzdD46OmRlYwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkK
IHsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIGJvb2wgcmVzcG9uc2VJc1ByZXNlbnQgPSByZXNv
dXJjZVJlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzcG9u
c2VJc1ByZXNlbnQpOworICAgIGVuY29kZXIgPDwgcmVzcG9uc2VJc1ByZXNlbnQ7CiAKICAgICBp
ZiAoIXJlc3BvbnNlSXNQcmVzZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5KEFkb3B0Q0YsIHdrQ0ZVUkxSZXNwb25zZUNyZWF0
ZVNlcmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlc291cmNlUmVzcG9uc2UuY2ZVUkxSZXNwb25z
ZSgpLCBDb3JlSVBDOjp0b2tlbk51bGxUeXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUo
KmVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVy
LCBkaWN0aW9uYXJ5LmdldCgpKTsKICNlbmRpZgogfQogCkBAIC0xMzcsMTAgKzEzNywxMCBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlCiB9CiAKIAotdm9pZCBBcmd1
bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQordm9pZCBB
cmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQogewog
I2lmIFVTRShDRk5FVFdPUkspCi0gICAgZW5jb2Rlci0+ZW5jb2RlKFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvKHJlc291cmNlRXJyb3IuY2VydGlmaWNhdGUoKSkpOworICAgIGVuY29kZXIgPDwgUGxh
dGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRGVjb2RlckFk
YXB0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EZWNvZGVyQWRhcHRlci5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgRGVjb2RlckFkYXB0ZXI6OkRlY29kZXJBZGFwdGVyKGNvbnN0IHVpbgog
Ym9vbCBEZWNvZGVyQWRhcHRlcjo6ZGVjb2RlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcykK
IHsKICAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgaWYgKCFt
X2RlY29kZXItPmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQor
ICAgIGlmICghbV9kZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJ5dGVzID0gZGF0YVJlZmVyZW5jZS52ZWN0b3IoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFwdGVy
LmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0VuY29kZXJBZGFwdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlIEVuY29kZXJBZGFwdGVyOjpkCiAKIHZvaWQgRW5jb2RlckFk
YXB0ZXI6OmVuY29kZUJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKIHsK
LSAgICBtX2VuY29kZXItPmVuY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UoYnl0ZXMsIHNpemUpKTsKKyAgICBtX2VuY29kZXItPmVuY29kZShDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlKGJ5dGVzLCBzaXplKSk7CiB9CiAKIHZvaWQgRW5jb2RlckFkYXB0ZXI6
OmVuY29kZUJvb2woYm9vbCB2YWx1ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171700</attachid>
            <date>2012-10-31 12:12:18 -0700</date>
            <delta_ts>2012-10-31 13:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100821-20121031121041.patch</filename>
            <type>text/plain</type>
            <size>81749</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEwLTMxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCB0aGUgcmVzdCBvZiB0aGUg
ZW5jb2RlcnMgdG8gdGFrZSB0aGUgZW5jb2RlciBhcyBhIHJlZmVyZW5jZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwODIxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChDb3JlSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpl
bmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
Lmg6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAg
ICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdlYktpdDo6VXNl
ck1lc3NhZ2VEZWNvZGVyOjpiYXNlRGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBv
c2l0aW9uOjpEYXRhOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAoQ29yZUlQQzo6ZW5j
b2RlSW1hZ2UpOgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlRGF0YU9iamVjdCk6CisgICAgICAg
IChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVHS2V5RmlsZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2Rl
cnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICogU2hhcmVk
L3F0L0FyZ3VtZW50Q29kZXJzUXQuaDoKKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAqIFNo
YXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6
OmVuY29kZVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwOgor
ICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRlY29k
ZXJBZGFwdGVyOjpkZWNvZGVCeXRlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Vu
Y29kZXJBZGFwdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RW5jb2RlckFkYXB0ZXI6OmVuY29k
ZUJ5dGVzKToKKwogMjAxMi0xMC0zMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIE1ha2UgV2ViS2l0MiBCdWlsZCB3aXRoIE5FVFdPUktfUFJP
Q0VTUyBkaXNhYmxlZApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5
ICszOCw5IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogLy8gQW4gYXJndW1lbnQgY29kZXIgd29y
a3Mgb24gUE9EIHR5cGVzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxlQXJndW1l
bnRDb2RlciB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgVCYgdCkKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBUJiB0KQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQp
LCBfX2FsaWdub2YoVCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgX19hbGlnbm9m
KFQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBUJiB0KQpAQCAtNTAsMTAgKzUwLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IFNpbXBsZUFyZ3VtZQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpwYWlyPFQsIFU+ID4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYg
cGFpcikKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUocGFpci5maXJzdCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnNlY29uZCk7Cisg
ICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKICAgICB9CiAKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBzdGQ6OnBhaXI8
VCwgVT4mIHBhaXIpCkBAIC03MywxMCArNzIsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBzdHJ1Y3QgCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFt
ZSBWYWx1ZVR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5
cGUsIFZhbHVlVHlwZT4gPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYg
cGFpcikKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsK
LSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIua2V5KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKHBhaXIudmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFs
dWU7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKQEAgLTk4
LDExICs5NiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1CiB0
ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBUPiBzdHJ1Y3QgVmVjdG9y
QXJndW1lbnRDb2RlcjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3Vt
ZW50Q29kZXI8ZmFsc2UsIFQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikK
ICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVj
dG9yLnNpemUoKSkpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
ZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUodmVjdG9yW2ldKTsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFZlY3RvcjxUPiYgdmVjdG9yKQpAQCAtMTI3
LDEwICsxMjUsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3VtZQog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3VtZW50Q29kZXI8dHJ1
ZSwgVD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQogICAgIHsKLSAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihU
KSwgX19hbGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFQpLCBfX2FsaWdub2YoVCkpOwogICAgIH0KICAgICAKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBWZWN0b3I8VD4mIHZlY3Rv
cikKQEAgLTE2MiwxMSArMTYwLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1
bWVudENvZGUKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+ID4gewogICAgIHR5cGVkZWYg
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+IEhhc2hNYXBUeXBlOwogCi0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUm
IGhhc2hNYXApCiAgICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKICAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZSgqaXQp
OworICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDggQEAgdm9pZCBQcmludEluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudAogICAg
IGVuY29kZXIgPDwgYXZhaWxhYmxlUGFwZXJIZWlnaHQ7CiAKICNpZiBQTEFURk9STShHVEspCi0g
ICAgQ29yZUlQQzo6ZW5jb2RlKCZlbmNvZGVyLCBwcmludFNldHRpbmdzLmdldCgpKTsKLSAgICBD
b3JlSVBDOjplbmNvZGUoJmVuY29kZXIsIHBhZ2VTZXR1cC5nZXQoKSk7CisgICAgQ29yZUlQQzo6
ZW5jb2RlKGVuY29kZXIsIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29k
ZShlbmNvZGVyLCBwYWdlU2V0dXAuZ2V0KCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSAr
MzAsOSBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdoZW4g
d2UgZW5jb2RlIGEgUmVmUHRyIHdlIHdhbnQgdG8gZW5jb2RlIHRoZSBvYmplY3QgaXQgcG9pbnRz
IHRvIGFuZCBpdCBpcyBuZXZlciBudWxsLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFQ+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxUPiYgaXRlbSkKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8VD4mIGl0ZW0p
CiAgICAgewotICAgICAgICBpdGVtLT5lbmNvZGUoKmVuY29kZXIpOworICAgICAgICBpdGVtLT5l
bmNvZGUoZW5jb2Rlcik7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFQ+JiBpdGVtKQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMs
NyArMzAzLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgQVBJT2JqZWN0OjpU
eXBlU2VyaWFsaXplZFNjcmlwdFZhbHVlOiB7CiAgICAgICAgICAgICBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVZh
cmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQorICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ZGF0YVJlZmVyZW5jZS52ZWN0b3IoKTsKQEAgLTQ3NSw3ICs0NzUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVEYXRhOiB7CiAgICAgICAgICAgICBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQorICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY29kZXIubV9yb290ID0gV2ViRGF0YTo6
Y3JlYXRlKGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSk7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAK
LXZvaWQgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSkKIHsKICAg
ICBTaW1wbGVBcmd1bWVudENvZGVyPEFmZmluZVRyYW5zZm9ybT46OmVuY29kZShlbmNvZGVyLCBh
ZmZpbmVUcmFuc2Zvcm0pOwogfQpAQCAtNjcsNyArNjcsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8
QWZmaW5lVHJhbnNmb3JtPjo6ZGVjCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9p
bnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50JiBm
bG9hdFBvaW50KQordm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogewogICAg
IFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBv
aW50KTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+
OjpkZWNvZGUoQQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBGbG9hdFJlY3QmIGZsb2F0UmVjdCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENv
ZGVyPEZsb2F0UmVjdD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFJlY3QpOwogfQpAQCAtODksNyAr
ODksNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKEFyCiB9CiAKIAot
dm9pZCBBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmxvYXRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEZs
b2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgZmxvYXRTaXplKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZW5j
b2RlKGVuY29kZXIsIGZsb2F0U2l6ZSk7CiB9CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBBcmd1
bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShBcgogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxJbnRQb2ludD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEludFBv
aW50JiBpbnRQb2ludCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEludFBvaW50JiBpbnRQb2ludCkKIHsKICAgICBT
aW1wbGVBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZW5jb2RlKGVuY29kZXIsIGludFBvaW50KTsK
IH0KQEAgLTExMSw3ICsxMTEsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNv
ZGUoQXJnCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEludFJlY3Q+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBJbnRSZWN0JiBpbnRSZWN0KQordm9pZCBBcmd1bWVu
dENvZGVyPEludFJlY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJ
bnRSZWN0JiBpbnRSZWN0KQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50UmVjdD46OmVu
Y29kZShlbmNvZGVyLCBpbnRSZWN0KTsKIH0KQEAgLTEyMiw3ICsxMjIsNyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8SW50UmVjdD46OmRlY29kZShBcmd1CiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVy
PEludFNpemU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBJbnRTaXpl
JiBpbnRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEludFNpemU+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnRTaXplJiBpbnRTaXplKQogewogICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8SW50U2l6ZT46OmVuY29kZShlbmNvZGVyLCBpbnRTaXplKTsKIH0KQEAgLTEz
Miw3ICsxMzIsOCBAQCBib29sIEFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShBcmd1CiAg
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8SW50U2l6ZT46OmRlY29kZShkZWNvZGVyLCBp
bnRTaXplKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFZpZXdwb3J0QXR0cmlidXRlcz46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYg
dmlld3BvcnRBdHRyaWJ1dGVzKQorCit2b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1
dGVzPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmlld3BvcnRBdHRy
aWJ1dGVzJiB2aWV3cG9ydEF0dHJpYnV0ZXMpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxW
aWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoZW5jb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsK
IH0KQEAgLTE0MiwxMSArMTQzLDEwIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJp
YnV0ZXM+OjoKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0
ZXM+OjpkZWNvZGUoZGVjb2Rlciwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPE1pbWVDbGFzc0luZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBtaW1lQ2xhc3NJbmZvKQorCit2b2lkIEFyZ3VtZW50Q29k
ZXI8TWltZUNsYXNzSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IE1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8pCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1p
bWVDbGFzc0luZm8udHlwZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVDbGFzc0luZm8uZGVz
Yyk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucyk7CisgICAg
ZW5jb2RlciA8PCBtaW1lQ2xhc3NJbmZvLnR5cGUgPDwgbWltZUNsYXNzSW5mby5kZXNjIDw8IG1p
bWVDbGFzc0luZm8uZXh0ZW5zaW9uczsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPE1pbWVDbGFz
c0luZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBNaW1lQ2xhc3NJbmZvJiBt
aW1lQ2xhc3NJbmZvKQpAQCAtMTYyLDEyICsxNjIsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8TWlt
ZUNsYXNzSW5mbz46OmRlY29kCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVn
aW5JbmZvKQordm9pZCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvKQogewotICAgIGVu
Y29kZXItPmVuY29kZShwbHVnaW5JbmZvLm5hbWUpOwotICAgIGVuY29kZXItPmVuY29kZShwbHVn
aW5JbmZvLmZpbGUpOwotICAgIGVuY29kZXItPmVuY29kZShwbHVnaW5JbmZvLmRlc2MpOwotICAg
IGVuY29kZXItPmVuY29kZShwbHVnaW5JbmZvLm1pbWVzKTsKKyAgICBlbmNvZGVyIDw8IHBsdWdp
bkluZm8ubmFtZSA8PCBwbHVnaW5JbmZvLm5hbWUgPDwgcGx1Z2luSW5mby5kZXNjIDw8IHBsdWdp
bkluZm8ubWltZXM7CiB9CiAgICAgCiBib29sIEFyZ3VtZW50Q29kZXI8UGx1Z2luSW5mbz46OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFBsdWdpbkluZm8mIHBsdWdpbkluZm8pCkBA
IC0xODUsOSArMTgyLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjpkZWNvZGUo
QQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVyTWFwKQordm9p
ZCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCiB7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHN0YXRpY19jYXN0PGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmcsIENh
c2VGb2xkaW5nSGFzaD4mPihoZWFkZXJNYXApKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4mPiho
ZWFkZXJNYXApOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SFRUUEhlYWRlck1hcD46OmRlY29k
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCkKQEAg
LTE5NiwxMyArMTkzLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNv
ZAogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCit2b2lkIEFyZ3VtZW50Q29kZXI8QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlKQogewotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkpOwotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2UucHJvcG9z
ZWRDcmVkZW50aWFsKCkpOwotICAgIGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2UucHJldmlvdXNG
YWlsdXJlQ291bnQoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVz
cG9uc2UoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGNoYWxsZW5nZS5lcnJvcigpKTsKKyAgICBl
bmNvZGVyIDw8IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSA8PCBjaGFsbGVuZ2UucHJvcG9z
ZWRDcmVkZW50aWFsKCkgPDwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkgPDwgY2hh
bGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpIDw8IGNoYWxsZW5nZS5lcnJvcigpOwogfQogCiBib29s
IEFyZ3VtZW50Q29kZXI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQpAQCAt
MjMyLDEzICsyMjUsMTEgQEAgYm9vbCBBcmd1bWVudENvZGVyPEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bgogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9uU3BhY2U+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHNwYWNlKQordm9p
ZCBBcmd1bWVudENvZGVyPFByb3RlY3Rpb25TcGFjZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgc3BhY2UpCiB7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHNwYWNlLmhvc3QoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHNwYWNlLnBvcnQoKSk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShzcGFjZS5zZXJ2ZXJUeXBlKCkpOwotICAgIGVuY29k
ZXItPmVuY29kZShzcGFjZS5yZWFsbSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHNwYWNl
LmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkpOworICAgIGVuY29kZXIgPDwgc3BhY2UuaG9zdCgpIDw8
IHNwYWNlLnBvcnQoKSA8PCBzcGFjZS5yZWFsbSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShz
cGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oc3Bh
Y2Uuc2VydmVyVHlwZSgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFByb3RlY3Rpb25TcGFj
ZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFByb3RlY3Rpb25TcGFjZSYgc3Bh
Y2UpCkBAIC0yNTEsMTAgKzI0Miw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9uU3Bh
Y2U+OjpkZWMKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwb3J0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlOwotICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShzZXJ2ZXJUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgU3RyaW5nIHJlYWxtOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlYWxt
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDE1ICsyNTAsMTggQEAgYm9vbCBBcmd1
bWVudENvZGVyPFByb3RlY3Rpb25TcGFjZT46OmRlYwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
RW51bShhdXRoZW50aWNhdGlvblNjaGVtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZUVudW0oc2VydmVyVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHNw
YWNlID0gUHJvdGVjdGlvblNwYWNlKGhvc3QsIHBvcnQsIHNlcnZlclR5cGUsIHJlYWxtLCBhdXRo
ZW50aWNhdGlvblNjaGVtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRD
b2RlcjxDcmVkZW50aWFsPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxDcmVkZW50aWFsPjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVu
dGlhbCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY3JlZGVudGlhbC51c2VyKCkpOwotICAgIGVu
Y29kZXItPmVuY29kZShjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwotICAgIGVuY29kZXItPmVuY29k
ZUVudW0oY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKKyAgICBlbmNvZGVyIDw8IGNyZWRlbnRp
YWwudXNlcigpIDw8IGNyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAgICBlbmNvZGVyLmVuY29kZUVu
dW0oY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPENy
ZWRlbnRpYWw+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDcmVkZW50aWFsJiBj
cmVkZW50aWFsKQpAQCAtMjkyLDcgKzI4Miw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDcmVkZW50
aWFsPjo6ZGVjb2RlKEEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZW5jb2Rl
SW1hZ2UoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBJbWFnZSogaW1hZ2UpCitzdGF0aWMgdm9p
ZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIEltYWdlKiBpbWFnZSkKIHsK
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEpOwogICAgIGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCktPmRyYXdJbWFnZShpbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoKSk7CkBAIC0zMDAsNyArMjkwLDcgQEAg
c3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyKgogICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwog
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7CisgICAgZW5jb2RlciA8PCBoYW5kbGU7CiB9
CiAKIHN0YXRpYyBib29sIGRlY29kZUltYWdlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVm
UHRyPEltYWdlPiYgaW1hZ2UpCkBAIC0zMTgsMjEgKzMwOCwyMSBAQCBzdGF0aWMgYm9vbCBkZWNv
ZGVJbWFnZShBcmd1bWVudERlY29kZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxDdXJzb3I+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBDdXJzb3ImIGN1cnNvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxDdXJzb3I+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBlbmNv
ZGVyLT5lbmNvZGVFbnVtKGN1cnNvci50eXBlKCkpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShj
dXJzb3IudHlwZSgpKTsKICAgICAgICAgCiAgICAgaWYgKGN1cnNvci50eXBlKCkgIT0gQ3Vyc29y
OjpDdXN0b20pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjdXJzb3IuaW1hZ2UoKS0+aXNO
dWxsKCkpIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGZhbHNlKTsgLy8gVGhlcmUgaXMgbm8g
dmFsaWQgaW1hZ2UgYmVpbmcgZW5jb2RlZC4KKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsgLy8g
VGhlcmUgaXMgbm8gdmFsaWQgaW1hZ2UgYmVpbmcgZW5jb2RlZC4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGVuY29kZXItPmVuY29kZSh0cnVlKTsKKyAgICBlbmNvZGVyIDw8IHRydWU7
CiAgICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgY3Vyc29yLmltYWdlKCkpOwotICAgIGVuY29kZXIt
PmVuY29kZShjdXJzb3IuaG90U3BvdCgpKTsKKyAgICBlbmNvZGVyIDw8IGN1cnNvci5ob3RTcG90
KCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBDdXJzb3ImIGN1cnNvcikKQEAgLTM3OCwyMSArMzY4LDE5IEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxDdXJzb3I+OjpkZWNvZGUoQXJndW0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQor
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewog
ICAgIGlmIChrU2hvdWxkU2VyaWFsaXplV2ViQ29yZURhdGEpIHsKLSAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZShyZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKLQotICAgICAgICBjb25zdCBI
VFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGhlYWRlcnMpOworICAgICAgICBlbmNvZGVyIDw8
IHJlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpOworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAKICAgICAgICAgRm9ybURhdGEqIGh0dHBCb2R5ID0g
cmVzb3VyY2VSZXF1ZXN0Lmh0dHBCb2R5KCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0
aWNfY2FzdDxib29sPihodHRwQm9keSkpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGJvb2w+KGh0dHBCb2R5KTsKICAgICAgICAgaWYgKGh0dHBCb2R5KQotICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGh0dHBCb2R5LT5mbGF0dGVuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IGh0dHBCb2R5LT5mbGF0dGVuVG9TdHJpbmcoKTsKIAotICAgICAgICBlbmNvZGVy
LT5lbmNvZGUocmVzb3VyY2VSZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCkp
OworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2ll
cygpLnN0cmluZygpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRmb3JtRGF0YShlbmNvZGVyLCBy
ZXNvdXJjZVJlcXVlc3QpOwpAQCAtNDM5LDI1ICs0MjcsMjMgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFJlc291cmNlUmVxdWVzdD46OmRlYwogICAgIHJldHVybiBkZWNvZGVQbGF0Zm9ybURhdGEoZGVj
b2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVzcG9uc2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVzcG9uc2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQogewogICAgIGlmIChrU2hvdWxkU2VyaWFsaXpl
V2ViQ29yZURhdGEpIHsKICAgICAgICAgYm9vbCByZXNwb25zZUlzTnVsbCA9IHJlc291cmNlUmVz
cG9uc2UuaXNOdWxsKCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNwb25zZUlzTnVsbCk7
CisgICAgICAgIGVuY29kZXIgPDwgcmVzcG9uc2VJc051bGw7CiAgICAgICAgIGlmIChyZXNwb25z
ZUlzTnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
cmVzb3VyY2VSZXNwb25zZS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29k
ZShzdGF0aWNfY2FzdDxpbnQzMl90PihyZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkp
KTsKLQotICAgICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gcmVzb3VyY2VSZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShoZWFkZXJz
KTsKLQotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VSZXNwb25zZS5taW1lVHlwZSgp
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UudGV4dEVuY29kaW5n
TmFtZSgpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGludDY0X3Q+KHJl
c291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpKTsKLSAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSk7Ci0gICAgICAgIGVu
Y29kZXItPmVuY29kZShyZXNvdXJjZVJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAg
ICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVzcG9uc2UudXJsKCkuc3RyaW5nKCk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzb3VyY2VSZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZHMoKTsKKworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVzcG9uc2UubWltZVR5
cGUoKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlc3BvbnNlLnRleHRFbmNvZGluZ05h
bWUoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXNvdXJjZVJl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVzb3Vy
Y2VSZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRm
b3JtRGF0YShlbmNvZGVyLCByZXNvdXJjZVJlc3BvbnNlKTsKQEAgLTUyMywyMCArNTA5LDIwIEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGUKICAgICByZXR1cm4gZGVj
b2RlUGxhdGZvcm1EYXRhKGRlY29kZXIsIHJlc291cmNlUmVzcG9uc2UpOwogfQogCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29k
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit2b2lkIEFyZ3VtZW50Q29k
ZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCiB7CiAgICAgaWYgKGtTaG91bGRTZXJpYWxp
emVXZWJDb3JlRGF0YSkgewogICAgICAgICBib29sIGVycm9ySXNOdWxsID0gcmVzb3VyY2VFcnJv
ci5pc051bGwoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGVycm9ySXNOdWxsKTsKKyAgICAg
ICAgZW5jb2RlciA8PCBlcnJvcklzTnVsbDsKICAgICAgICAgaWYgKGVycm9ySXNOdWxsKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9y
LmRvbWFpbigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlRXJyb3IuZXJyb3JD
b2RlKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5mYWlsaW5nVVJM
KCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlRXJyb3IuaXNDYW5j
ZWxsYXRpb24oKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9yLmlzVGlt
ZW91dCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZUVycm9yLmRvbWFpbigpOworICAg
ICAgICBlbmNvZGVyIDw8IHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCk7CisgICAgICAgIGVuY29k
ZXIgPDwgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVz
b3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpOworICAgICAgICBlbmNvZGVyIDw8IHJl
c291cmNlRXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZUVycm9yLmlzVGltZW91dCgpOwogICAgIH0KIAogICAgIGVuY29kZVBsYXRmb3JtRGF0YShlbmNv
ZGVyLCByZXNvdXJjZUVycm9yKTsKQEAgLTU4NSwyNCArNTcxLDI0IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2QKICAgICByZXR1cm4gZGVjb2RlUGxhdGZvcm1EYXRh
KGRlY29kZXIsIHJlc291cmNlRXJyb3IpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8V2luZG93
RmVhdHVyZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXaW5kb3dG
ZWF0dXJlcyYgd2luZG93RmVhdHVyZXMpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2luZG93RmVhdHVy
ZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXaW5kb3dGZWF0dXJl
cyYgd2luZG93RmVhdHVyZXMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVz
LngpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy55KTsKLSAgICBlbmNvZGVy
LT5lbmNvZGUod2luZG93RmVhdHVyZXMud2lkdGgpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5k
b3dGZWF0dXJlcy5oZWlnaHQpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy54
U2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMueVNldCk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0KTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUod2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93
RmVhdHVyZXMubWVudUJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0
dXJlcy5zdGF0dXNCYXJWaXNpYmxlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVy
ZXMudG9vbEJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5s
b2NhdGlvbkJhclZpc2libGUpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5z
Y3JvbGxiYXJzVmlzaWJsZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLnJl
c2l6YWJsZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLmZ1bGxzY3JlZW4p
OwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5kaWFsb2cpOworICAgIGVuY29k
ZXIgPDwgd2luZG93RmVhdHVyZXMueDsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnk7
CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy53aWR0aDsKKyAgICBlbmNvZGVyIDw8IHdp
bmRvd0ZlYXR1cmVzLmhlaWdodDsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnhTZXQ7
CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy55U2V0OworICAgIGVuY29kZXIgPDwgd2lu
ZG93RmVhdHVyZXMud2lkdGhTZXQ7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5oZWln
aHRTZXQ7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5tZW51QmFyVmlzaWJsZTsKKyAg
ICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnN0YXR1c0JhclZpc2libGU7CisgICAgZW5jb2Rl
ciA8PCB3aW5kb3dGZWF0dXJlcy50b29sQmFyVmlzaWJsZTsKKyAgICBlbmNvZGVyIDw8IHdpbmRv
d0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1
cmVzLnNjcm9sbGJhcnNWaXNpYmxlOworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMucmVz
aXphYmxlOworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMuZnVsbHNjcmVlbjsKKyAgICBl
bmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLmRpYWxvZzsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVy
PFdpbmRvd0ZlYXR1cmVzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2luZG93
RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzKQpAQCAtNjQzLDE1ICs2MjksMTUgQEAgYm9vbCBBcmd1
bWVudENvZGVyPFdpbmRvd0ZlYXR1cmVzPjo6ZGVjbwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxDb2xvcj46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZmFsc2UpOworICAgICAgICBlbmNvZGVyIDw8
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW5jb2Rlci0+ZW5jb2RlKHRy
dWUpOwotICAgIGVuY29kZXItPmVuY29kZShjb2xvci5yZ2IoKSk7CisgICAgZW5jb2RlciA8PCB0
cnVlOworICAgIGVuY29kZXIgPDwgY29sb3IucmdiKCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIENvbG9yJiBjb2xvcikK
QEAgLTY3NCwxMiArNjYwLDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZShB
cmd1bWUKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q29tcG9zaXRpb25VbmRlcmxpbmU+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGlu
ZSYgdW5kZXJsaW5lKQordm9pZCBBcmd1bWVudENvZGVyPENvbXBvc2l0aW9uVW5kZXJsaW5lPjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxp
bmUmIHVuZGVybGluZSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUodW5kZXJsaW5lLnN0YXJ0T2Zm
c2V0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUodW5kZXJsaW5lLmVuZE9mZnNldCk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHVuZGVybGluZS50aGljayk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVuZGVy
bGluZS5jb2xvcik7CisgICAgZW5jb2RlciA8PCB1bmRlcmxpbmUuc3RhcnRPZmZzZXQ7CisgICAg
ZW5jb2RlciA8PCB1bmRlcmxpbmUuZW5kT2Zmc2V0OworICAgIGVuY29kZXIgPDwgdW5kZXJsaW5l
LnRoaWNrOworICAgIGVuY29kZXIgPDwgdW5kZXJsaW5lLmNvbG9yOwogfQogCiBib29sIEFyZ3Vt
ZW50Q29kZXI8Q29tcG9zaXRpb25VbmRlcmxpbmU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQpAQCAtNjk3LDEyICs2ODMs
MTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPENvbXBvc2l0aW9uVW5kZXJsaW5lPgogfQogCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLXZvaWQgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURldGFpbHM+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEYXRhYmFzZURldGFpbHMm
IGRldGFpbHMpCit2b2lkIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQog
ewotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWxzLm5hbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKGRldGFpbHMuZGlzcGxheU5hbWUoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRldGFpbHMu
ZXhwZWN0ZWRVc2FnZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGV0YWlscy5jdXJyZW50VXNh
Z2UoKSk7CisgICAgZW5jb2RlciA8PCBkZXRhaWxzLm5hbWUoKTsKKyAgICBlbmNvZGVyIDw8IGRl
dGFpbHMuZGlzcGxheU5hbWUoKTsKKyAgICBlbmNvZGVyIDw8IGRldGFpbHMuZXhwZWN0ZWRVc2Fn
ZSgpOworICAgIGVuY29kZXIgPDwgZGV0YWlscy5jdXJyZW50VXNhZ2UoKTsKIH0KICAgICAKIGJv
b2wgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURldGFpbHM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBEYXRhYmFzZURldGFpbHMmIGRldGFpbHMpCkBAIC03MjgsMTEgKzcxNCwxMSBA
QCBib29sIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZGVjCiB9CiAjZW5kaWYKIAot
dm9pZCBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUmIGRpY3RhdGlvbkFs
dGVybmF0aXZlKQordm9pZCBBcmd1bWVudENvZGVyPERpY3RhdGlvbkFsdGVybmF0aXZlPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGljdGF0aW9uQWx0ZXJuYXRpdmUm
IGRpY3RhdGlvbkFsdGVybmF0aXZlKQogewotICAgIGVuY29kZXItPmVuY29kZShkaWN0YXRpb25B
bHRlcm5hdGl2ZS5yYW5nZVN0YXJ0KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGljdGF0aW9uQWx0
ZXJuYXRpdmUucmFuZ2VMZW5ndGgpOwotICAgIGVuY29kZXItPmVuY29kZShkaWN0YXRpb25BbHRl
cm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0KTsKKyAgICBlbmNvZGVyIDw8IGRpY3RhdGlvbkFsdGVy
bmF0aXZlLnJhbmdlU3RhcnQ7CisgICAgZW5jb2RlciA8PCBkaWN0YXRpb25BbHRlcm5hdGl2ZS5y
YW5nZUxlbmd0aDsKKyAgICBlbmNvZGVyIDw8IGRpY3RhdGlvbkFsdGVybmF0aXZlLmRpY3RhdGlv
bkNvbnRleHQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERpY3RhdGlvbkFsdGVybmF0aXZlJiBk
aWN0YXRpb25BbHRlcm5hdGl2ZSkKQEAgLTc0NywxNiArNzMzLDE2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4KIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8Rmls
ZUNob29zZXJTZXR0aW5ncz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IEZpbGVDaG9vc2VyU2V0dGluZ3MmIHNldHRpbmdzKQordm9pZCBBcmd1bWVudENvZGVyPEZpbGVD
aG9vc2VyU2V0dGluZ3M+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBG
aWxlQ2hvb3NlclNldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc2V0
dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyk7CisgICAgZW5jb2RlciA8PCBzZXR0aW5ncy5hbGxv
d3NNdWx0aXBsZUZpbGVzOwogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotICAgIGVuY29k
ZXItPmVuY29kZShzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcnlVcGxvYWQpOworICAgIGVuY29kZXIg
PDwgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3J5VXBsb2FkOwogI2VuZGlmCi0gICAgZW5jb2Rlci0+
ZW5jb2RlKHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcyk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHNl
dHRpbmdzLnNlbGVjdGVkRmlsZXMpOworICAgIGVuY29kZXIgPDwgc2V0dGluZ3MuYWNjZXB0TUlN
RVR5cGVzOworICAgIGVuY29kZXIgPDwgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlczsKICNpZiBFTkFC
TEUoTUVESUFfQ0FQVFVSRSkKLSAgICBlbmNvZGVyLT5lbmNvZGUoc2V0dGluZ3MuY2FwdHVyZSk7
CisgICAgZW5jb2RlciA8PCBzZXR0aW5ncy5jYXB0dXJlOwogI2VuZGlmCiB9CiAKQEAgLTc4MSwx
MiArNzY3LDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxGaWxlQ2hvb3NlclNldHRpbmdzPjoKIH0K
IAogCi12b2lkIEFyZ3VtZW50Q29kZXI8R3JhbW1hckRldGFpbD46OmVuY29kZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgR3JhbW1hckRldGFpbCYgZGV0YWlsKQogewotICAgIGVuY29kZXItPmVuY29kZShkZXRh
aWwubG9jYXRpb24pOwotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWwubGVuZ3RoKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUoZGV0YWlsLmd1ZXNzZXMpOwotICAgIGVuY29kZXItPmVuY29kZShkZXRh
aWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICBlbmNvZGVyIDw8IGRldGFpbC5sb2NhdGlvbjsKKyAg
ICBlbmNvZGVyIDw8IGRldGFpbC5sZW5ndGg7CisgICAgZW5jb2RlciA8PCBkZXRhaWwuZ3Vlc3Nl
czsKKyAgICBlbmNvZGVyIDw8IGRldGFpbC51c2VyRGVzY3JpcHRpb247CiB9CiAKIGJvb2wgQXJn
dW1lbnRDb2RlcjxHcmFtbWFyRGV0YWlsPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgR3JhbW1hckRldGFpbCYgZGV0YWlsKQpAQCAtODA0LDEzICs3OTAsMTMgQEAgYm9vbCBBcmd1
bWVudENvZGVyPEdyYW1tYXJEZXRhaWw+OjpkZWNvZAogfQogCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHJl
c3VsdC50eXBlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzdWx0LmxvY2F0aW9uKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUocmVzdWx0Lmxlbmd0aCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3Vs
dC5kZXRhaWxzKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzdWx0LnJlcGxhY2VtZW50KTsKKyAg
ICBlbmNvZGVyLmVuY29kZUVudW0ocmVzdWx0LnR5cGUpOworICAgIGVuY29kZXIgPDwgcmVzdWx0
LmxvY2F0aW9uOworICAgIGVuY29kZXIgPDwgcmVzdWx0Lmxlbmd0aDsKKyAgICBlbmNvZGVyIDw8
IHJlc3VsdC5kZXRhaWxzOworICAgIGVuY29kZXIgPDwgcmVzdWx0LnJlcGxhY2VtZW50OwogfQog
CiBib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpCkBAIC04MjgsMTEg
KzgxNCwxMSBAQCBib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxEcmFnU2Vzc2lvbj46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IERyYWdTZXNzaW9uJiByZXN1bHQpCit2
b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ1Nlc3Npb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBEcmFnU2Vzc2lvbiYgcmVzdWx0KQogewotICAgIGVuY29kZXItPmVuY29k
ZUVudW0ocmVzdWx0Lm9wZXJhdGlvbik7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3VsdC5tb3Vz
ZUlzT3ZlckZpbGVJbnB1dCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3VsdC5udW1iZXJPZkl0
ZW1zVG9CZUFjY2VwdGVkKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocmVzdWx0Lm9wZXJhdGlv
bik7CisgICAgZW5jb2RlciA8PCByZXN1bHQubW91c2VJc092ZXJGaWxlSW5wdXQ7CisgICAgZW5j
b2RlciA8PCByZXN1bHQubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZDsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPERyYWdTZXNzaW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
RHJhZ1Nlc3Npb24mIHJlc3VsdCkKQEAgLTg0Niw5ICs4MzIsOSBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8RHJhZ1Nlc3Npb24+OjpkZWNvZGUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxLVVJMPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
S1VSTCYgcmVzdWx0KQordm9pZCBBcmd1bWVudENvZGVyPEtVUkw+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBLVVJMJiByZXN1bHQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlKHJlc3VsdC5zdHJpbmcoKSk7CisgICAgZW5jb2RlciA8PCByZXN1bHQuc3RyaW5nKCk7CiB9
CiAgICAgCiBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46OmRlY29kZShBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIEtVUkwmIHJlc3VsdCkKQEAgLTg2MCwxNCArODQ2LDE0IEBAIGJvb2wgQXJndW1l
bnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmIHVzZXJTdHls
ZVNoZWV0KQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hl
ZXQmIHVzZXJTdHlsZVNoZWV0KQogewotICAgIGVuY29kZXItPmVuY29kZSh1c2VyU3R5bGVTaGVl
dC5zb3VyY2UoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTdHlsZVNoZWV0LnVybCgpKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUodXNlclN0eWxlU2hlZXQud2hpdGVsaXN0KCkpOwotICAgIGVu
Y29kZXItPmVuY29kZSh1c2VyU3R5bGVTaGVldC5ibGFja2xpc3QoKSk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlRW51bSh1c2VyU3R5bGVTaGVldC5pbmplY3RlZEZyYW1lcygpKTsKLSAgICBlbmNvZGVy
LT5lbmNvZGVFbnVtKHVzZXJTdHlsZVNoZWV0LmxldmVsKCkpOworICAgIGVuY29kZXIgPDwgdXNl
clN0eWxlU2hlZXQuc291cmNlKCk7CisgICAgZW5jb2RlciA8PCB1c2VyU3R5bGVTaGVldC51cmwo
KTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0LndoaXRlbGlzdCgpOworICAgIGVuY29k
ZXIgPDwgdXNlclN0eWxlU2hlZXQuYmxhY2tsaXN0KCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KHVzZXJTdHlsZVNoZWV0LmluamVjdGVkRnJhbWVzKCkpOworICAgIGVuY29kZXIuZW5jb2RlRW51
bSh1c2VyU3R5bGVTaGVldC5sZXZlbCgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlVzZXJTdHlsZVNoZWV0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2Vi
Q29yZTo6VXNlclN0eWxlU2hlZXQmIHVzZXJTdHlsZVNoZWV0KQpAQCAtOTAwLDE0ICs4ODYsMTQg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTdHlsZVNoZQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmIHVz
ZXJTY3JpcHQpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD46OmVuY29k
ZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQmIHVz
ZXJTY3JpcHQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTY3JpcHQuc291cmNlKCkpOwot
ICAgIGVuY29kZXItPmVuY29kZSh1c2VyU2NyaXB0LnVybCgpKTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUodXNlclNjcmlwdC53aGl0ZWxpc3QoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTY3Jp
cHQuYmxhY2tsaXN0KCkpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odXNlclNjcmlwdC5pbmpl
Y3Rpb25UaW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odXNlclNjcmlwdC5pbmplY3Rl
ZEZyYW1lcygpKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQuc291cmNlKCk7CisgICAgZW5j
b2RlciA8PCB1c2VyU2NyaXB0LnVybCgpOworICAgIGVuY29kZXIgPDwgdXNlclNjcmlwdC53aGl0
ZWxpc3QoKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQuYmxhY2tsaXN0KCk7CisgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKHVzZXJTY3JpcHQuaW5qZWN0aW9uVGltZSgpKTsKKyAgICBlbmNvZGVy
LmVuY29kZUVudW0odXNlclNjcmlwdC5pbmplY3RlZEZyYW1lcygpKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTY3JpcHQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMTMyOTgw
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3NyArNzIsNzcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIENvcmVJUEMgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpGbG9hdFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiB9
OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UmVjdD4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFNpemU+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpGbG9hdFNpemUmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6SW50UG9pbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6SW50UmVjdCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpJbnRTaXplPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpJbnRTaXplJik7CiB9OwogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpN
aW1lQ2xhc3NJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TWltZUNsYXNzSW5mbyYpOwogICAgIHN0
YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpNaW1lQ2xhc3NJbmZv
Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBsdWdp
bkluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6UGx1Z2luSW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpQbHVnaW5JbmZvJik7CiAgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlBsdWdpbkluZm8mKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwog
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2U+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJik7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJD
b3JlOjpQcm90ZWN0aW9uU3BhY2UmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6Q3JlZGVudGlhbD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q3JlZGVu
dGlhbCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpD
dXJzb3I+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1
bWVudERlY29kZXIqLCBXZWJDb3JlOjpDdXJzb3ImKTsKIH07CiAKQEAgLTE1Myw5ICsxNTMsOSBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wga1Nob3VsZFNlcmlhbGl6ZVdlYkNvcmVEYXRhID0gdHJ1ZTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZVBsYXRmb3JtRGF0
YShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiB9OwogCkBAIC0xNjYsOSArMTY2LDkgQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBjb25zdCBib29sIGtT
aG91bGRTZXJpYWxpemVXZWJDb3JlRGF0YSA9IHRydWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHN0YXRpYyB2b2lk
IGVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3Vt
ZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwogfTsKIApAQCAtMTc5LDc2ICsxNzksNzYgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBjb25zdCBib29sIGtTaG91
bGRTZXJpYWxpemVXZWJDb3JlRGF0YSA9IHRydWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHN0YXRpYyB2b2lkIGVuY29kZVBsYXRm
b3JtRGF0YShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGVQbGF0
Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogfTsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpXaW5kb3dGZWF0dXJl
cz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogfTsK
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb2xvcj4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBX
ZWJDb3JlOjpDb2xvciYpOwogfTsKIAogI2lmIFBMQVRGT1JNKE1BQykKIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OktleXByZXNzQ29t
bWFuZCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJik7CiB9OwogI2VuZGlmCiAKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q29tcG9zaXRp
b25VbmRlcmxpbmUmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RGF0YWJhc2VEZXRhaWxzPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyYpOworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEYXRhYmFzZURldGFp
bHMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6
RGF0YWJhc2VEZXRhaWxzJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlJik7CiB9OwogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3M+IHsK
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
RmlsZUNob29zZXJTZXR0aW5ncyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJik7CiAgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGlu
Z3MmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBj
b25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYp
OwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwg
Y29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0Jik7CisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCYp
OwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdSZXN1bHQmKTsKIH07CiAgICAgCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkRyYWdTZXNzaW9uPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkRyYWdTZXNzaW9uJik7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkRyYWdTZXNzaW9uJik7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkRyYWdT
ZXNzaW9uJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OktVUkw+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OktVUkwmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VXNl
clN0eWxlU2hlZXQmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6VXNlclNjcmlwdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0Jik7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTY3JpcHQm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6VXNl
clNjcmlwdCYpOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkdlb2xvY2F0
aW9uUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJH
ZW9sb2NhdGlvblBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIFdlYkdlb2xvY2F0aW9uUG9zaXRpb246On5XZWJHZW9sb2NhdGlvblAKIAog
dm9pZCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpEYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIENvcmVJUEM6OlNpbXBsZUFyZ3VtZW50
Q29kZXI8V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6RGF0YT46OmVuY29kZSgmZW5jb2RlciwgKnRo
aXMpOworICAgIENvcmVJUEM6OlNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViR2VvbG9jYXRpb25Qb3Np
dGlvbjo6RGF0YT46OmVuY29kZShlbmNvZGVyLCAqdGhpcyk7CiB9CiAKIGJvb2wgV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbjo6RGF0YTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgRGF0YSYgZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRy
ZWVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxX
ZWJMYXllckluZm8+OjplbmNvZGUoJmVuY29kZXIsICp0aGlzKTsKKyAgICBTaW1wbGVBcmd1bWVu
dENvZGVyPFdlYkxheWVySW5mbz46OmVuY29kZShlbmNvZGVyLCAqdGhpcyk7CiB9CiAKIGJvb2wg
V2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBX
ZWJMYXllckluZm8mIGluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIEFyZ3VtZW50
Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCit2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRQ
b2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRQb2lu
dDNEJiBmbG9hdFBvaW50M0QpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
M0Q+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KQEAgLTgzLDcgKzgzLDcgQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZQogICAgIHJldHVybiBTaW1w
bGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50
M0QpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgTGVuZ3RoJiBsZW5ndGgpCit2b2lkIEFyZ3VtZW50Q29kZXI8
TGVuZ3RoPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgTGVuZ3RoJiBs
ZW5ndGgpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rl
ciwgbGVuZ3RoKTsKIH0KQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPExlbmd0
aD46OmRlY29kZShBcmd1bQogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46
OmRlY29kZShkZWNvZGVyLCBsZW5ndGgpOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCit2b2lkIEFyZ3VtZW50
Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCiB7
CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShl
bmNvZGVyLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCk7CiB9CkBAIC0xMDQsMjUgKzEwNCwyNSBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+CiB9CiAKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cz46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHN0
YXRpY19jYXN0PHVpbnQzMl90PihmaWx0ZXJzLnNpemUoKSkpOworICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGZpbHRlcnMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0
aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgICAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKHR5cGUpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0odHlw
ZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFtb3VudCgpKSk7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFt
b3VudCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKICAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29k
ZXIsIHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5zdGRE
ZXZpYXRpb24oKSk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZpbHRlck9wZXJhdAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKICAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIHNoYWRv
dyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIp
OwogICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBz
aGFkb3ctPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19j
YXN0PGludDMyX3Q+KHNoYWRvdy0+c3RkRGV2aWF0aW9uKCkpKTsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LT5zdGREZXZpYXRpb24oKSk7CiAgICAg
ICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy0+Y29s
b3IoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTQxLDM0ICsxNDEsMzQg
QEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdAogICAgICAgICAgICAg
QVNTRVJUKGN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbSgpKTsKICAgICAgICAgICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtKCk7
CiAgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+aXNMb2FkZWQoKSk7Ci0gICAgICAgICAgICBl
bmNvZGVyLT5lbmNvZGUocHJvZ3JhbS0+dmVydGV4U2hhZGVyU3RyaW5nKCkpOwotICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3RyaW5nKCkpOwotICAg
ICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShwcm9ncmFtLT5wcm9ncmFtVHlwZSgpKTsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyU3RyaW5nKCk7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7CisgICAg
ICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJvZ3JhbS0+cHJvZ3JhbVR5cGUoKSk7CiAgICAg
ICAgICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3MgPSBwcm9n
cmFtLT5taXhTZXR0aW5ncygpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtaXhT
ZXR0aW5ncy5ibGVuZE1vZGUpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtaXhT
ZXR0aW5ncy5jb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHByb2dyYW0tPm1lc2hUeXBlKCkpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KG1peFNldHRpbmdzLmJsZW5kTW9kZSk7CisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0o
bWl4U2V0dGluZ3MuY29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKHByb2dyYW0tPm1lc2hUeXBlKCkpOwogCiAgICAgICAgICAgICBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSBjdXN0b21PcGVyYXRpb24tPnBhcmFtZXRlcnMoKTsK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4ocGFyYW1l
dGVycy5zaXplKCkpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHBhcmFtZXRlcnMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV07Ci0gICAgICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhcmFtZXRlci0+bmFtZSgpKTsKLSAgICAgICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBlbmNvZGVyIDw8IHBhcmFtZXRlci0+bmFtZSgpOworICAgICAgICAgICAgICAg
IGVuY29kZXIuZW5jb2RlRW51bShwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSk7CiAKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOiB7CiAgICAgICAgICAg
ICAgICAgICAgIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKiBhcnJheVBhcmFtZXRlciA9IHN0
YXRpY19jYXN0PEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKj4ocGFyYW1ldGVyLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90
PihhcnJheVBhcmFtZXRlci0+c2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFycmF5UGFyYW1ldGVyLT5zaXplKCkpOwogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFycmF5UGFyYW1ldGVyLT5zaXpl
KCk7ICsraikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShhcnJheVBh
cmFtZXRlci0+dmFsdWVBdChqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8
IGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGopOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI6Ok5VTUJFUjogewogICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJOdW1iZXJQ
YXJhbWV0ZXIqIG51Ym1lclBhcmFtZXRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck51bWJl
clBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVibWVyUGFyYW1ldGVyLT5zaXplKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bnVibWVyUGFyYW1ldGVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IG51Ym1lclBhcmFtZXRlci0+c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAg
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUobnVibWVyUGFyYW1ldGVyLT52YWx1ZUF0KGopKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgbnVibWVyUGFyYW1ldGVyLT52YWx1
ZUF0KGopOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlRSQU5TRk9STTogewpA
QCAtMTc5LDkgKzE3OSw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVy
YXQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCkpOwotICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGN1c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSk7Ci0gICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSk7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGN1c3RvbU9wZXJhdGlvbi0+bWVzaFJvd3MoKTsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgY3VzdG9tT3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpOworICAgICAg
ICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zNDcsMTIgKzM0Nywx
MiBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0CiB9CiAjZW5kaWYK
IAotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1P
cGVyYXRpb25zKQordm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNv
ZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0
cmFuc2Zvcm1PcGVyYXRpb25zKQogewotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uID0gdHJhbnNmb3JtT3Bl
cmF0aW9ucy5hdChpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShvcGVyYXRpb24tPmdl
dE9wZXJhdGlvblR5cGUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSk7CiAKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSkgewogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
WDoKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0
aW9ucz46CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKICAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CiAgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNf
Y2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPngoKSk7Ci0g
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT55KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eigpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCk7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eSgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CiAgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKQEAgLTM3NywxNiArMzc3LDE2IEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjoKICAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1k6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eCgpKTsKLSAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT55KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0
PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKSk7Ci0gICAg
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGUoKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbikt
PngoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpOworICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24p
LT56KCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKICAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVc6Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29u
c3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlWCgpKTsKLSAgICAg
ICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGVZKCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5n
bGVYKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5hbmdsZVkoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOgogICAgICAgICAgICAg
QXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBzdGF0
aWNfY2FzdDxjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5tYXRy
aXgoKSk7CkBAIC01MDcsMzAgKzUwNywzMCBAQCBib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3Jt
T3BlcmF0aW9ucz46CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGVuY29kZVRp
bWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgVGltaW5nRnVuY3Rp
b24qIHRpbWluZ0Z1bmN0aW9uKQorc3RhdGljIHZvaWQgZW5jb2RlVGltaW5nRnVuY3Rpb24oQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rp
b24pCiB7CiAgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikgewotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEpKTsKKyAgICAgICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdG
dW5jdGlvblR5cGUgdHlwZSA9IHRpbWluZ0Z1bmN0aW9uID8gdGltaW5nRnVuY3Rpb24tPnR5cGUo
KSA6IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHR5cGUpOworICAgIGVuY29kZXIuZW5jb2RlRW51bSh0eXBlKTsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogewog
ICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpYyA9IHN0YXRpY19j
YXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0g
ICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eDEoKSk7Ci0gICAgICAgIGVuY29kZXItPmVu
Y29kZShjdWJpYy0+eTEoKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eDIoKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShjdWJpYy0+eTIoKSk7CisgICAgICAgIGVuY29kZXIg
PDwgY3ViaWMtPngxKCk7CisgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPnkxKCk7CisgICAgICAg
IGVuY29kZXIgPDwgY3ViaWMtPngyKCk7CisgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPnkyKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1
bmN0aW9uOiB7CiAgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGVwcy0+bnVtYmVy
T2ZTdGVwcygpKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGVwcy0+c3RlcEF0U3RhcnQo
KSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0ZXBzLT5udW1i
ZXJPZlN0ZXBzKCkpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZXBzLT5zdGVwQXRTdGFydCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtNTc5LDM1ICs1NzksMzUgQEAgYm9vbCBk
ZWNvZGVUaW1pbmdGdW5jdGlvbihBcmd1bWVudERlY29kZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmlt
YXRpb24pCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmVuY29k
ZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24m
IGFuaW1hdGlvbikKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLm5hbWUoKSk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5ib3hTaXplKCkpOwotICAgIGVuY29kZXItPmVu
Y29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOwotICAgIGVuY29kZXItPmVuY29kZShhbmltYXRp
b24uc3RhcnRUaW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZShhbmltYXRpb24ucGF1c2VUaW1l
KCkpOwotICAgIGVuY29kZXItPmVuY29kZShhbmltYXRpb24ubGlzdHNNYXRjaCgpKTsKKyAgICBl
bmNvZGVyIDw8IGFuaW1hdGlvbi5uYW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24uYm94
U2l6ZSgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb24uc3RhdGUoKSk7CisgICAg
ZW5jb2RlciA8PCBhbmltYXRpb24uc3RhcnRUaW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRp
b24ucGF1c2VUaW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24ubGlzdHNNYXRjaCgpOwog
CiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uT2JqZWN0ID0gYW5pbWF0aW9uLmFuaW1h
dGlvbigpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0LT5kaXJlY3Rp
b24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihhbmltYXRp
b25PYmplY3QtPmZpbGxNb2RlKCkpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uT2Jq
ZWN0LT5kdXJhdGlvbigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uT2JqZWN0LT5p
dGVyYXRpb25Db3VudCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0
LT5kaXJlY3Rpb24oKSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5p
bWF0aW9uT2JqZWN0LT5maWxsTW9kZSgpKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVj
dC0+ZHVyYXRpb24oKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0aW9u
Q291bnQoKTsKICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCBhbmltYXRpb25PYmpl
Y3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOwogCiAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMoKTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGtleWZyYW1lcy5zaXplKCkpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVu
dW0oa2V5ZnJhbWVzLnByb3BlcnR5KCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGtleWZyYW1lcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB2YWx1
ZSA9IGtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHZhbHVlLT5rZXlU
aW1lKCkpOworICAgICAgICBlbmNvZGVyIDw8IHZhbHVlLT5rZXlUaW1lKCk7CiAgICAgICAgIGVu
Y29kZVRpbWluZ0Z1bmN0aW9uKGVuY29kZXIsIHZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKICAg
ICAgICAgc3dpdGNoIChrZXlmcmFtZXMucHJvcGVydHkoKSkgewogICAgICAgICBjYXNlIEFuaW1h
dGVkUHJvcGVydHlPcGFjaXR5OgotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19j
YXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCkpOworICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4o
dmFsdWUpLT52YWx1ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZSgq
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVl
KCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCAqc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzAzLDkgKzcwMyw5IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW8KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zPjo6ZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
IGFuaW1hdGlvbnMpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYgYW5pbWF0aW9ucykKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9ucy5h
bmltYXRpb25zKCkpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9ucy5hbmltYXRpb25zKCk7CiB9
CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9ucz46OmRlY29kZShB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRp
b25zKQpAQCAtNzE0LDE4ICs3MTQsMTYgQEAgYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5
ZXJBbmltYXRpbwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4p
Cit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+OjplbmNv
ZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2VUb2tlbiYgdG9rZW4pCiB7CiAjaWYgT1MoREFSV0lOKQotICAgIGVuY29kZXItPmVuY29kZShB
dHRhY2htZW50KHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VO
RCkpOwotICAgIGVuY29kZXItPmVuY29kZShBdHRhY2htZW50KHRva2VuLmJhY2tCdWZmZXJIYW5k
bGUsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSk7CisgICAgZW5jb2RlciA8PCBBdHRhY2htZW50
KHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7CisgICAg
ZW5jb2RlciA8PCBBdHRhY2htZW50KHRva2VuLmJhY2tCdWZmZXJIYW5kbGUsIE1BQ0hfTVNHX1RZ
UEVfTU9WRV9TRU5EKTsKICNlbGlmIE9TKFdJTkRPV1MpCi0gICAgdWludDY0X3QgZnJvbnRCdWZm
ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUp
OwotICAgIGVuY29kZXItPmVuY29kZShmcm9udEJ1ZmZlcik7Ci0gICAgdWludDY0X3QgYmFja0J1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0b2tlbi5iYWNrQnVmZmVySGFuZGxl
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYmFja0J1ZmZlcik7CisgICAgZW5jb2RlciA8PCByZWlu
dGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSk7CisgICAgZW5j
b2RlciA8PCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5iYWNrQnVmZmVySGFuZGxl
KTsKICNlbGlmIE9TKExJTlVYKQotICAgIGVuY29kZXItPmVuY29kZSh0b2tlbi5mcm9udEJ1ZmZl
ckhhbmRsZSk7CisgICAgZW5jb2RlciA8PCB0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZTsKICNlbmRp
ZgogfQogCkBAIC03NTcsNCArNzU1LDUgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okdy
YXBoaWNzU3VyZgogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKKwogI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAxMzI5ODApCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNTAgKzUxLDUxIEBAIHN0
cnVjdCBHcmFwaGljc1N1cmZhY2VUb2tlbjsKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludDNEJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqLCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6Okxlbmd0aCYpOworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6TGVuZ3Ro
Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiB9OwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7CiB9OwogI2VuZGlmCiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6VHJhbnNmb3JtT3BlcmF0aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJik7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9y
bU9wZXJhdGlvbnMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucz4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQW5pbWF0aW9uPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb24mKTsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbiYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uJik7CiB9OwogCiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVRva2VuJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7CiB9OwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIENvcmVJUEMKKwogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IAogI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVyc19oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAkocmV2
aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVy
c0d0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi1zdGF0aWMgdm9pZCBlbmNvZGVJbWFn
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQorc3Rh
dGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBHZGtQ
aXhidWYqIHBpeGJ1ZikKIHsKICAgICBJbnRTaXplIGltYWdlU2l6ZShnZGtfcGl4YnVmX2dldF93
aWR0aChwaXhidWYpLCBnZGtfcGl4YnVmX2dldF9oZWlnaHQocGl4YnVmKSk7CiAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFi
bGUoaW1hZ2VTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwpAQCAtNTQsNyAr
NTQsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXIqCiAgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSk7CiAKLSAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKKyAgICBlbmNvZGVyIDw8IGhh
bmRsZTsKIH0KIAogc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBHUmVmUHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKQEAgLTg1LDMwICs4NSwzMCBAQCBzdGF0
aWMgYm9vbCBkZWNvZGVJbWFnZShBcmd1bWVudERlY29kZXIqCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyB2b2lkIGVuY29kZURhdGFPYmplY3QoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQorc3RhdGljIHZvaWQgZW5jb2RlRGF0
YU9iamVjdChBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERhdGFPYmplY3RHdGsqIGRh
dGFPYmplY3QpCiB7CiAgICAgYm9vbCBoYXNUZXh0ID0gZGF0YU9iamVjdC0+aGFzVGV4dCgpOwot
ICAgIGVuY29kZXItPmVuY29kZShoYXNUZXh0KTsKKyAgICBlbmNvZGVyIDw8IGhhc1RleHQ7CiAg
ICAgaWYgKGhhc1RleHQpCi0gICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT50ZXh0
KCkpOworICAgICAgICBlbmNvZGVyIDw8IGRhdGFPYmplY3QtPnRleHQoKTsKIAogICAgIGJvb2wg
aGFzTWFya3VwID0gZGF0YU9iamVjdC0+aGFzTWFya3VwKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KGhhc01hcmt1cCk7CisgICAgZW5jb2RlciA8PCBoYXNNYXJrdXA7CiAgICAgaWYgKGhhc01hcmt1
cCkKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgpKTsKKyAgICAg
ICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT5tYXJrdXAoKTsKIAogICAgIGJvb2wgaGFzVVJMID0g
ZGF0YU9iamVjdC0+aGFzVVJMKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1VSTCk7CisgICAg
ZW5jb2RlciA8PCBoYXNVUkw7CiAgICAgaWYgKGhhc1VSTCkKLSAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgZW5jb2RlciA8PCBkYXRh
T2JqZWN0LT51cmwoKS5zdHJpbmcoKTsKIAogICAgIGJvb2wgaGFzVVJJTGlzdCA9IGRhdGFPYmpl
Y3QtPmhhc1VSSUxpc3QoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlzdCk7CisgICAg
ZW5jb2RlciA8PCBoYXNVUklMaXN0OwogICAgIGlmIChoYXNVUklMaXN0KQotICAgICAgICBlbmNv
ZGVyLT5lbmNvZGUoZGF0YU9iamVjdC0+dXJpTGlzdCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCBk
YXRhT2JqZWN0LT51cmlMaXN0KCk7CiAKICAgICBib29sIGhhc0ltYWdlID0gZGF0YU9iamVjdC0+
aGFzSW1hZ2UoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoaGFzSW1hZ2UpOworICAgIGVuY29kZXIg
PDwgaGFzSW1hZ2U7CiAgICAgaWYgKGhhc0ltYWdlKQogICAgICAgICBlbmNvZGVJbWFnZShlbmNv
ZGVyLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKIH0KQEAgLTE3MiwxNSArMTcyLDE1IEBAIHN0YXRp
YyBib29sIGRlY29kZURhdGFPYmplY3QoQXJndW1lbnREZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQordm9pZCBBcmd1bWVudENvZGVyPERy
YWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQogewotICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5jbGllbnRQb3NpdGlv
bigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihkcmFnRGF0YS5kcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpOwotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oZHJhZ0RhdGEuZmxhZ3MoKSkpOworICAgIGVuY29kZXIgPDwgZHJhZ0RhdGEu
Y2xpZW50UG9zaXRpb24oKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9u
KCk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZHJhZ0RhdGEuZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGRyYWdEYXRhLmZsYWdzKCkpOwogCiAgICAgRGF0YU9iamVjdEd0ayogcGxhdGZvcm1E
YXRhID0gZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRp
Y19jYXN0PGJvb2w+KHBsYXRmb3JtRGF0YSkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Ym9vbD4ocGxhdGZvcm1EYXRhKTsKICAgICBpZiAocGxhdGZvcm1EYXRhKQogICAgICAgICBlbmNv
ZGVEYXRhT2JqZWN0KGVuY29kZXIsIHBsYXRmb3JtRGF0YSk7CiB9CkBAIC0yMTksMTIgKzIxOSwx
MSBAQCBib29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJnCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGVuY29kZUdLZXlGaWxlKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgR0tleUZpbGUqIGtleUZpbGUpCitzdGF0aWMgdm9pZCBlbmNvZGVHS2V5RmlsZShB
cmd1bWVudEVuY29kZXImIGVuY29kZXIsIEdLZXlGaWxlKiBrZXlGaWxlKQogewogICAgIGdzaXpl
IGRhdGFTaXplOwogICAgIEdPd25QdHI8Y2hhcj4gZGF0YShnX2tleV9maWxlX3RvX2RhdGEoa2V5
RmlsZSwgJmRhdGFTaXplLCAwKSk7Ci0gICAgRGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEuZ2V0KCkpLCBkYXRhU2l6ZSk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKGRhdGFSZWZlcmVuY2UpOworICAgIGVuY29kZXIgPDwgRGF0YVJlZmVyZW5j
ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmdldCgpKSwgZGF0YVNpemUpOwogfQog
CiBzdGF0aWMgYm9vbCBkZWNvZGVHS2V5RmlsZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdP
d25QdHI8R0tleUZpbGU+JiBrZXlGaWxlKQpAQCAtMjQ1LDcgKzI0NCw3IEBAIHN0YXRpYyBib29s
IGRlY29kZUdLZXlGaWxlKEFyZ3VtZW50RGVjb2QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBHdGtQcmludFNldHRpbmdzKiBwcmlu
dFNldHRpbmdzKQordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBHdGtQcmlu
dFNldHRpbmdzKiBwcmludFNldHRpbmdzKQogewogICAgIEdPd25QdHI8R0tleUZpbGU+IGtleUZp
bGUoZ19rZXlfZmlsZV9uZXcoKSk7CiAgICAgZ3RrX3ByaW50X3NldHRpbmdzX3RvX2tleV9maWxl
KHByaW50U2V0dGluZ3MsIGtleUZpbGUuZ2V0KCksICJQcmludCBTZXR0aW5ncyIpOwpAQCAtMjY4
LDcgKzI2Nyw3IEBAIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgR1IKICAg
ICByZXR1cm4gcHJpbnRTZXR0aW5nczsKIH0KIAotdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyLCBHdGtQYWdlU2V0dXAqIHBhZ2VTZXR1cCkKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlciwgR3RrUGFnZVNldHVwKiBwYWdlU2V0dXApCiB7CiAgICAgR093blB0
cjxHS2V5RmlsZT4ga2V5RmlsZShnX2tleV9maWxlX25ldygpKTsKICAgICBndGtfcGFnZV9zZXR1
cF90b19rZXlfZmlsZShwYWdlU2V0dXAsIGtleUZpbGUuZ2V0KCksICJQYWdlIFNldHVwIik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oCShy
ZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29k
ZXJzR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCwxNCBAQCBjbGFzcyBEcmFnRGF0
YTsKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpEcmFnRGF0YT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXIqLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogfTsK
IAotdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgR3RrUHJpbnRTZXR0aW5ncyopOwordm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgR3RrUHJpbnRTZXR0aW5ncyopOwogYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiYpOwogCi12b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBHdGtQYWdlU2V0dXAqKTsKK3ZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYsIEd0a1BhZ2VTZXR1cCopOwogYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgR1JlZlB0cjxHdGtQYWdlU2V0dXA+Jik7CiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTYgKzM4LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBDb3JlSVBD
IHsKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3Jt
RGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0KQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29k
ZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJl
c291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVxdWVz
dElzUHJlc2VudCk7CisgICAgZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVzZW50OwogCiAgICAgaWYg
KCFyZXF1ZXN0SXNQcmVzZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5KEFkb3B0Q0YsIFdLTlNVUkxSZXF1ZXN0Q3JlYXRlU2Vy
aWFsaXphYmxlUmVwcmVzZW50YXRpb24ocmVzb3VyY2VSZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpLCBD
b3JlSVBDOjp0b2tlbk51bGxUeXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoKmVuY29k
ZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBkaWN0
aW9uYXJ5LmdldCgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46
OmRlY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQpAQCAtNzMsMTYgKzczLDE2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjpkZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBB
cmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3Bv
bnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjplbmNvZGVQbGF0Zm9y
bURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNvdXJjZVJlc3BvbnNlKQogewogICAgIGJvb2wgcmVzcG9uc2VJc1ByZXNlbnQgPSByZXNvdXJj
ZVJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzcG9uc2VJ
c1ByZXNlbnQpOworICAgIGVuY29kZXIgPDwgcmVzcG9uc2VJc1ByZXNlbnQ7CiAKICAgICBpZiAo
IXJlc3BvbnNlSXNQcmVzZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBkaWN0aW9uYXJ5KEFkb3B0Q0YsIFdLTlNVUkxSZXNwb25zZUNyZWF0ZVNl
cmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlc291cmNlUmVzcG9uc2UubnNVUkxSZXNwb25zZSgp
LCBDb3JlSVBDOjp0b2tlbk51bGxUeXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoKmVu
Y29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBk
aWN0aW9uYXJ5LmdldCgpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9u
c2U+OjpkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQpAQCAtMTEzLDEwICsxMTMsMTAgQEAgc3RhdGlj
IE5TU3RyaW5nKiBuc1N0cmluZyhjb25zdCBTdHJpbmcmIAogICAgIHJldHVybiBzdHJpbmcuaW1w
bCgpID8gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVW5pQ2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkpIGxlbmd0aDpzdHJpbmcubGVuZ3RoKCld
IDogQCIiOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZVBs
YXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlRXJyb3Im
IHJlc291cmNlRXJyb3IpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29k
ZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlRXJy
b3ImIHJlc291cmNlRXJyb3IpCiB7CiAgICAgYm9vbCBlcnJvcklzTnVsbCA9IHJlc291cmNlRXJy
b3IuaXNOdWxsKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGVycm9ySXNOdWxsKTsKKyAgICBlbmNv
ZGVyIDw8IGVycm9ySXNOdWxsOwogCiAgICAgaWYgKGVycm9ySXNOdWxsKQogICAgICAgICByZXR1
cm47CkBAIC0xMjQsMTAgKzEyNCwxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJv
cj46OmVuY29kCiAgICAgTlNFcnJvciAqbnNFcnJvciA9IHJlc291cmNlRXJyb3IubnNFcnJvcigp
OwogCiAgICAgU3RyaW5nIGRvbWFpbiA9IFtuc0Vycm9yIGRvbWFpbl07Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKGRvbWFpbik7Ci0gICAgCisgICAgZW5jb2RlciA8PCBkb21haW47CisKICAgICBpbnQ2
NF90IGNvZGUgPSBbbnNFcnJvciBjb2RlXTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY29kZSk7Cisg
ICAgZW5jb2RlciA8PCBjb2RlOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gc3RyaW5n
VXNlckluZm9NYXA7CiAKQEAgLTE0MCwxMSArMTQwLDExIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZUVycm9yPjo6ZW5jb2QKICAgICAgICAgc3RyaW5nVXNlckluZm9NYXAuc2V0KGtleSwg
KE5TU3RyaW5nICopdmFsdWUpOwogICAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgZW5jb2Rl
ci0+ZW5jb2RlKHN0cmluZ1VzZXJJbmZvTWFwKTsKKyAgICBlbmNvZGVyIDw8IHN0cmluZ1VzZXJJ
bmZvTWFwOwogCiAgICAgaWQgcGVlckNlcnRpZmljYXRlQ2hhaW4gPSBbdXNlckluZm8gb2JqZWN0
Rm9yS2V5OkAiTlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNoYWluS2V5Il07CiAgICAgQVNTRVJUKCFw
ZWVyQ2VydGlmaWNhdGVDaGFpbiB8fCBbcGVlckNlcnRpZmljYXRlQ2hhaW4gaXNLaW5kT2ZDbGFz
czpbTlNBcnJheSBjbGFzc11dKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8oKENGQXJyYXlSZWYpcGVlckNlcnRpZmljYXRlQ2hhaW4pKTsKKyAgICBlbmNvZGVy
IDw8IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKChDRkFycmF5UmVmKXBlZXJDZXJ0aWZpY2F0ZUNo
YWluKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjpkZWNvZGVQbGF0
Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZUVycm9yJiByZXNvdXJj
ZUVycm9yKQpAQCAtMTk0LDEwICsxOTQsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VF
cnJvcj46OmRlY29kCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxL
ZXlwcmVzc0NvbW1hbmQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBL
ZXlwcmVzc0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxLZXlw
cmVzc0NvbW1hbmQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBLZXlw
cmVzc0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoa2V5
cHJlc3NDb21tYW5kLmNvbW1hbmROYW1lKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoa2V5cHJlc3ND
b21tYW5kLnRleHQpOworICAgIGVuY29kZXIgPDwga2V5cHJlc3NDb21tYW5kLmNvbW1hbmROYW1l
IDw8IGtleXByZXNzQ29tbWFuZC50ZXh0OwogfQogICAgIAogYm9vbCBBcmd1bWVudENvZGVyPEtl
eXByZXNzQ29tbWFuZD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEtleXByZXNz
Q29tbWFuZCYga2V5cHJlc3NDb21tYW5kKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L0FyZ3VtZW50Q29kZXJzUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxNSArMzMsMTUgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogCiB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nICwgVmVjdG9yPHVpbnQ4X3Q+ID4gTUlNRURhdGFIYXNoTWFwOwogCi12b2lkIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RHJhZ0RhdGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVudFBvc2l0
aW9uKCkpOwotICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUoKHVpbnQ2NF90KWRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoKHVpbnQ2NF90KWRyYWdEYXRhLmZs
YWdzKCkpOworICAgIGVuY29kZXIgPDwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKTsKKyAgICBl
bmNvZGVyIDw8IGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9uKCk7CisgICAgZW5jb2RlciA8PCAodWlu
dDY0X3QpZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCk7CisgICAgZW5jb2Rl
ciA8PCAodWludDY0X3QpZHJhZ0RhdGEuZmxhZ3MoKTsKIAogICAgIGJvb2wgaGFzUGxhdGZvcm1E
YXRhID0gZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1Bs
YXRmb3JtRGF0YSk7CisgICAgZW5jb2RlciA8PCBoYXNQbGF0Zm9ybURhdGE7CiAgICAgaWYgKCFo
YXNQbGF0Zm9ybURhdGEpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTQsNyArNTQsNyBAQCB2b2lk
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+OjplCiAgICAgICAgIHZkYXRhLmFwcGVu
ZCgodWludDhfdCopKGJ5dGVzLmRhdGEoKSksIGJ5dGVzLnNpemUoKSk7CiAgICAgICAgIG1hcC5h
ZGQoU3RyaW5nKGZvcm1hdHNbaV0pLCB2ZGF0YSk7CiAgICAgfQotICAgIGVuY29kZXItPmVuY29k
ZShtYXApOworICAgIGVuY29kZXIgPDwgbWFwOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRDb2Rl
cnNRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENv
ZGVyc1F0LmgJKHJldmlzaW9uIDEzMjk4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9B
cmd1bWVudENvZGVyc1F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogCiBu
YW1lc3BhY2UgQ29yZUlQQyB7CiAKLXZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0
IFdlYkNvcmU6OkRyYWdEYXRhJik7Cit2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
Q29yZTo6RHJhZ0RhdGEmKTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpEcmFnRGF0YT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIq
LCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogfTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzUXQuY3BwCShyZXZpc2lvbiAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12
b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFy
Z3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlUGxhdGZv
cm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXNvdXJjZVJlcXVlc3QpCiB7CiB9CiAKQEAgLTQ0LDcgKzQ0LDcgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFJlc291cmNlUmVxdWVzdD46OmRlYwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkK
IHsKIH0KIApAQCAtNTQsNyArNTQsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNw
b25zZT46OmRlCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNv
ZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiByZXNvdXJjZUVycm9yKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+Ojpl
bmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJj
ZUVycm9yJiByZXNvdXJjZUVycm9yKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvc291cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAkocmV2
aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotdm9pZCBBcmd1bWVu
dENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQordm9p
ZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0KQogewotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzb3Vy
Y2VSZXF1ZXN0LnNvdXBNZXNzYWdlRmxhZ3MoKSkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHJlc291cmNlUmVxdWVzdC5zb3VwTWVzc2FnZUZsYWdzKCkpOwogfQogCiBi
b29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3Qp
CkBAIC01MSw5ICs1MSw5IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+Ojpk
ZWMKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmVuY29kZVBs
YXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc291cmNlUmVzcG9uc2UpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25z
ZT46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2UpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXNvdXJjZVJlc3BvbnNlLnNvdXBNZXNzYWdlRmxhZ3Mo
KSkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc291cmNlUmVzcG9u
c2Uuc291cE1lc3NhZ2VGbGFncygpKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVzcG9uc2U+OjpkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQpAQCAtNjYsNyArNjYsNyBAQCBib29s
IEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlCiB9CiAKIAotdm9pZCBBcmd1bWVu
dENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJv
cj46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImLCBjb25zdCBSZXNvdXJjZUVy
cm9yJikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJDb3JlQXJn
dW1lbnRDb2RlcnNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93
aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxNyArNDksMTcgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogCiAvLyBG
SVhNRTogVGhlc2UgY29kZXJzIHNob3VsZCByZWFsbHkgZ28gaW4gYSBXZWJDb3JlQXJndW1lbnRD
b2RlcnNDRk5ldHdvcmsgZmlsZS4KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVz
dD46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQordm9pZCBBcmd1bWVudENvZGVyPFJlc291
cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogI2lmIFVTRShDRk5F
VFdPUkspCiAgICAgYm9vbCByZXF1ZXN0SXNQcmVzZW50ID0gcmVzb3VyY2VSZXF1ZXN0LmNmVVJM
UmVxdWVzdCgpOwotICAgIGVuY29kZXItPmVuY29kZShyZXF1ZXN0SXNQcmVzZW50KTsKKyAgICBl
bmNvZGVyIDw8IHJlcXVlc3RJc1ByZXNlbnQ7CiAKICAgICBpZiAoIXJlcXVlc3RJc1ByZXNlbnQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rp
b25hcnkoQWRvcHRDRiwgd2tDRlVSTFJlcXVlc3RDcmVhdGVTZXJpYWxpemFibGVSZXByZXNlbnRh
dGlvbihyZXNvdXJjZVJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCksIENvcmVJUEM6OnRva2VuTnVsbFR5
cGVSZWYoKSkpOwotICAgIENvcmVJUEM6OmVuY29kZSgqZW5jb2RlciwgZGljdGlvbmFyeS5nZXQo
KSk7CisgICAgQ29yZUlQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0KCkpOwogI2Vu
ZGlmCiB9CiAKQEAgLTk1LDE3ICs5NSwxNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VS
ZXF1ZXN0Pjo6ZGVjCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+
OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291
cmNlUmVzcG9uc2U+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQogewogI2lmIFVTRShD
Rk5FVFdPUkspCiAgICAgYm9vbCByZXNwb25zZUlzUHJlc2VudCA9IHJlc291cmNlUmVzcG9uc2Uu
Y2ZVUkxSZXNwb25zZSgpOwotICAgIGVuY29kZXItPmVuY29kZShyZXNwb25zZUlzUHJlc2VudCk7
CisgICAgZW5jb2RlciA8PCByZXNwb25zZUlzUHJlc2VudDsKIAogICAgIGlmICghcmVzcG9uc2VJ
c1ByZXNlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGRpY3Rpb25hcnkoQWRvcHRDRiwgd2tDRlVSTFJlc3BvbnNlQ3JlYXRlU2VyaWFsaXphYmxl
UmVwcmVzZW50YXRpb24ocmVzb3VyY2VSZXNwb25zZS5jZlVSTFJlc3BvbnNlKCksIENvcmVJUEM6
OnRva2VuTnVsbFR5cGVSZWYoKSkpOwotICAgIENvcmVJUEM6OmVuY29kZSgqZW5jb2RlciwgZGlj
dGlvbmFyeS5nZXQoKSk7CisgICAgQ29yZUlQQzo6ZW5jb2RlKGVuY29kZXIsIGRpY3Rpb25hcnku
Z2V0KCkpOwogI2VuZGlmCiB9CiAKQEAgLTEzNywxMCArMTM3LDEwIEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGUKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VFcnJvcj46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit2b2lkIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VFcnJvcj46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCiB7CiAjaWYgVVNFKENGTkVU
V09SSykKLSAgICBlbmNvZGVyLT5lbmNvZGUoUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzb3Vy
Y2VFcnJvci5jZXJ0aWZpY2F0ZSgpKSk7CisgICAgZW5jb2RlciA8PCBQbGF0Zm9ybUNlcnRpZmlj
YXRlSW5mbyhyZXNvdXJjZUVycm9yLmNlcnRpZmljYXRlKCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RlY29kZXJBZGFw
dGVyLmNwcAkocmV2aXNpb24gMTMyOTgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RlY29kZXJBZGFwdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBEZWNvZGVyQWRhcHRlcjo6RGVjb2RlckFkYXB0ZXIoY29uc3QgdWluCiBib29sIERlY29kZXJB
ZGFwdGVyOjpkZWNvZGVCeXRlcyhWZWN0b3I8dWludDhfdD4mIGJ5dGVzKQogewogICAgIENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKLSAgICBpZiAoIW1fZGVjb2Rlci0+ZGVj
b2RlVmFyaWFibGVMZW5ndGhCeXRlQXJyYXkoZGF0YVJlZmVyZW5jZSkpCisgICAgaWYgKCFtX2Rl
Y29kZXItPmRlY29kZShkYXRhUmVmZXJlbmNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYnl0ZXMgPSBkYXRhUmVmZXJlbmNlLnZlY3RvcigpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRW5jb2RlckFkYXB0ZXIuY3BwCShyZXZpc2lv
biAxMzI5ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRW5jb2RlckFk
YXB0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UgRW5jb2RlckFkYXB0ZXI6OmQKIAogdm9pZCBFbmNvZGVyQWRhcHRlcjo6ZW5jb2Rl
Qnl0ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQogewotICAgIG1fZW5jb2Rl
ci0+ZW5jb2RlVmFyaWFibGVMZW5ndGhCeXRlQXJyYXkoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZShi
eXRlcywgc2l6ZSkpOworICAgIG1fZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UoYnl0ZXMsIHNpemUpKTsKIH0KIAogdm9pZCBFbmNvZGVyQWRhcHRlcjo6ZW5jb2RlQm9vbChi
b29sIHZhbHVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171714</attachid>
            <date>2012-10-31 13:57:47 -0700</date>
            <delta_ts>2012-10-31 14:19:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100821-20121031135610.patch</filename>
            <type>text/plain</type>
            <size>81978</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEwLTMxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCB0aGUgcmVzdCBvZiB0aGUg
ZW5jb2RlcnMgdG8gdGFrZSB0aGUgZW5jb2RlciBhcyBhIHJlZmVyZW5jZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwODIxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChDb3JlSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyOjpl
bmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
Lmg6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAg
ICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdlYktpdDo6VXNl
ck1lc3NhZ2VEZWNvZGVyOjpiYXNlRGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBv
c2l0aW9uOjpEYXRhOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjplbmNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAoQ29yZUlQQzo6ZW5j
b2RlSW1hZ2UpOgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlRGF0YU9iamVjdCk6CisgICAgICAg
IChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDOjplbmNvZGVHS2V5RmlsZSk6
CisgICAgICAgIChDb3JlSVBDOjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlUGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvQXJndW1lbnRDb2Rl
cnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICogU2hhcmVk
L3F0L0FyZ3VtZW50Q29kZXJzUXQuaDoKKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAqIFNo
YXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6
OmVuY29kZVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzU291cC5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZVBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogU2hhcmVkL3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwOgor
ICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRlY29k
ZXJBZGFwdGVyOjpkZWNvZGVCeXRlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Vu
Y29kZXJBZGFwdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RW5jb2RlckFkYXB0ZXI6OmVuY29k
ZUJ5dGVzKToKKwogMjAxMi0xMC0zMSAgSmVzc2UgdmFuIGRlbiBLaWVib29tICA8amVzc2V2ZGtA
Z25vbWUub3JnPgogCiAgICAgICAgIEVuYWJsZSB3ZWJraXQyIGludHJvc3BlY3Rpb24KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQCBuYW1lc3BhY2Ug
Q29yZUlQQyB7CiAKIC8vIEFuIGFyZ3VtZW50IGNvZGVyIHdvcmtzIG9uIFBPRCB0eXBlcwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBsZUFyZ3VtZW50Q29kZXIgewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFQmIHQpCisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdCkK
ICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSwgX19hbGlnbm9mKFQpKTsKKyAg
ICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oJnQpLCBzaXplb2YoVCksIF9fYWxpZ25vZihUKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVCYgdCkKQEAgLTUw
LDEwICs1MCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaW1wbGVBcmd1bWUKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBBcmd1bWVudENvZGVy
PHN0ZDo6cGFpcjxULCBVPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpwYWlyPFQsIFU+
JiBwYWlyKQogICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhaXIuZmlyc3QpOwotICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUocGFpci5zZWNvbmQpOworICAgICAgICBlbmNvZGVyIDw8IHBh
aXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQpAQCAtNzMs
MTAgKzcyLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IAogfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+ID4gewot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdU
Rjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBh
aXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVu
Y29kZShwYWlyLmtleSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShwYWlyLnZhbHVlKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBwYWlyLmtleSA8PCBwYWlyLnZhbHVlOwogICAgIH0KIAogICAgIHN0
YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdURjo6S2V5VmFsdWVQ
YWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCkBAIC05OCwxMSArOTYsMTEgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdQogdGVtcGxhdGU8Ym9vbCBmaXhlZFNp
emVFbGVtZW50cywgdHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckFyZ3VtZW50Q29kZXI7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0b3JBcmd1bWVudENvZGVyPGZhbHNlLCBUPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
VmVjdG9yPFQ+JiB2ZWN0b3IpCisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCiAgICAgewotICAgICAgICBlbmNv
ZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpKTsKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHZlY3RvcltpXSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHZl
Y3RvcltpXTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBWZWN0b3I8VD4mIHZlY3RvcikKQEAgLTEyNywxMCArMTI1LDEwIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0b3JBcmd1bWUKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBWZWN0b3JBcmd1bWVudENvZGVyPHRydWUsIFQ+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VD4mIHZl
Y3RvcikKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBWZWN0b3I8VD4mIHZlY3RvcikKICAgICB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShz
dGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSkpOwotICAgICAgICBlbmNvZGVyLT5l
bmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVj
dG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCksIF9fYWxpZ25vZihUKSk7Cisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwg
X19hbGlnbm9mKFQpKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgVmVjdG9yPFQ+JiB2ZWN0b3IpCkBAIC0xNjIsMTEgKzE2MCwx
MSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0cnVjdCBBcmd1
bWVudENvZGVyPEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPiA+IHsKICAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlw
ZTsKIAotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNv
bnN0IEhhc2hNYXBUeXBlJiBoYXNoTWFwKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBlJiBoYXNoTWFwKQogICAgIHsKLSAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoTWFwLnNpemUo
KSkpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoTWFwLnNp
emUoKSk7CiAgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaGFzaE1hcC5iZWdpbigpLCBlbmQgPSBoYXNoTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoKml0KTsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgKml0OwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIEhhc2hNYXBUeXBlJiBoYXNoTWFwKQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1ByaW50SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1ByaW50SW5mby5jcHAJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9QcmludEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHZvaWQgUHJp
bnRJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnQKICAgICBlbmNvZGVyIDw8IGF2YWlsYWJs
ZVBhcGVySGVpZ2h0OwogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIENvcmVJUEM6OmVuY29kZSgm
ZW5jb2RlciwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgQ29yZUlQQzo6ZW5jb2RlKCZlbmNv
ZGVyLCBwYWdlU2V0dXAuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBwcmlu
dFNldHRpbmdzLmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgcGFnZVNldHVw
LmdldCgpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lv
blN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0
YXRlLmNwcAkocmV2aXNpb24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Np
b25TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAgbmFtZXNwYWNlIENv
cmVJUEMgewogCiAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3aGVuIHdlIGVuY29kZSBhIFJlZlB0ciB3
ZSB3YW50IHRvIGVuY29kZSB0aGUgb2JqZWN0IGl0IHBvaW50cyB0byBhbmQgaXQgaXMgbmV2ZXIg
bnVsbC4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxU
PiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBSZWZQdHI8VD4mIGl0ZW0pCisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPFQ+JiBpdGVtKQogICAgIHsKLSAgICAgICAgaXRl
bS0+ZW5jb2RlKCplbmNvZGVyKTsKKyAgICAgICAgaXRlbS0+ZW5jb2RlKGVuY29kZXIpOwogICAg
IH0KIAogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJl
ZlB0cjxUPiYgaXRlbSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNv
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyTWVzc2FnZUNv
ZGVycy5oCShyZXZpc2lvbiAxMzMwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlck1l
c3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTogewogICAgICAgICAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNl
OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVWYXJpYWJsZUxlbmd0aEJ5dGVBcnJh
eShkYXRhUmVmZXJlbmNlKSkKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRhdGFS
ZWZlcmVuY2UpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IGRhdGFSZWZlcmVuY2UudmVjdG9y
KCk7CkBAIC00NzUsNyArNDc1LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
QVBJT2JqZWN0OjpUeXBlRGF0YTogewogICAgICAgICAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSBkYXRhUmVmZXJlbmNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVWYXJpYWJs
ZUxlbmd0aEJ5dGVBcnJheShkYXRhUmVmZXJlbmNlKSkKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFdlYkRhdGE6OmNyZWF0ZShkYXRhUmVmZXJlbmNl
LmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
cmV2aXNpb24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIEFyZ3VtZW50Q29kZXI8
QWZmaW5lVHJhbnNmb3JtPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0pCit2b2lkIEFyZ3VtZW50Q29kZXI8QWZm
aW5lVHJhbnNmb3JtPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0pCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2Rl
cjxBZmZpbmVUcmFuc2Zvcm0+OjplbmNvZGUoZW5jb2RlciwgYWZmaW5lVHJhbnNmb3JtKTsKIH0K
QEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEFmZmluZVRyYW5zZm9ybT46OmRl
YwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVy
PEZsb2F0UG9pbnQ+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludCk7CiB9CkBAIC03OCw3ICs3
OCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2RlKEEKIH0KIAogCi12
b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8Rmxv
YXRSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRSZWN0
JiBmbG9hdFJlY3QpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNv
ZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKIH0KQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBBcmd1bWVu
dENvZGVyPEZsb2F0UmVjdD46OmRlY29kZShBcgogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxG
bG9hdFNpemU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFNp
emUmIGZsb2F0U2l6ZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGbG9hdFNpemUmIGZsb2F0U2l6ZSkKIHsKICAg
ICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShlbmNvZGVyLCBmbG9hdFNp
emUpOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+
OjpkZWNvZGUoQXIKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBJbnRQb2ludCYgaW50UG9pbnQpCit2b2lk
IEFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBJbnRQb2ludCYgaW50UG9pbnQpCiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxJ
bnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBpbnRQb2ludCk7CiB9CkBAIC0xMTEsNyArMTExLDcg
QEAgYm9vbCBBcmd1bWVudENvZGVyPEludFBvaW50Pjo6ZGVjb2RlKEFyZwogfQogCiAKLXZvaWQg
QXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
Y29uc3QgSW50UmVjdCYgaW50UmVjdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxJbnRSZWN0Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgSW50UmVjdCYgaW50UmVjdCkKIHsK
ICAgICBTaW1wbGVBcmd1bWVudENvZGVyPEludFJlY3Q+OjplbmNvZGUoZW5jb2RlciwgaW50UmVj
dCk7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEludFJlY3Q+Ojpk
ZWNvZGUoQXJndQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxJbnRTaXplPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgSW50U2l6ZSYgaW50U2l6ZSkKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxJbnRTaXplPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgSW50U2l6ZSYgaW50U2l6ZSkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPEludFNpemU+
OjplbmNvZGUoZW5jb2RlciwgaW50U2l6ZSk7CiB9CkBAIC0xMzIsNyArMTMyLDggQEAgYm9vbCBB
cmd1bWVudENvZGVyPEludFNpemU+OjpkZWNvZGUoQXJndQogICAgIHJldHVybiBTaW1wbGVBcmd1
bWVudENvZGVyPEludFNpemU+OjpkZWNvZGUoZGVjb2RlciwgaW50U2l6ZSk7CiB9CiAKLXZvaWQg
QXJndW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyLCBjb25zdCBWaWV3cG9ydEF0dHJpYnV0ZXMmIHZpZXdwb3J0QXR0cmlidXRlcykK
Kwordm9pZCBBcmd1bWVudENvZGVyPFZpZXdwb3J0QXR0cmlidXRlcz46OmVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRy
aWJ1dGVzKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6
ZW5jb2RlKGVuY29kZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CiB9CkBAIC0xNDIsMTEgKzE0Mywx
MCBAQCBib29sIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6CiAgICAgcmV0dXJu
IFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZGVjb2RlKGRlY29kZXIs
IHZpZXdwb3J0QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxNaW1lQ2xhc3NJ
bmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgTWltZUNsYXNzSW5m
byYgbWltZUNsYXNzSW5mbykKKwordm9pZCBBcmd1bWVudENvZGVyPE1pbWVDbGFzc0luZm8+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNaW1lQ2xhc3NJbmZvJiBtaW1l
Q2xhc3NJbmZvKQogewotICAgIGVuY29kZXItPmVuY29kZShtaW1lQ2xhc3NJbmZvLnR5cGUpOwot
ICAgIGVuY29kZXItPmVuY29kZShtaW1lQ2xhc3NJbmZvLmRlc2MpOwotICAgIGVuY29kZXItPmVu
Y29kZShtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMpOworICAgIGVuY29kZXIgPDwgbWltZUNsYXNz
SW5mby50eXBlIDw8IG1pbWVDbGFzc0luZm8uZGVzYyA8PCBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lv
bnM7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxNaW1lQ2xhc3NJbmZvPjo6ZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgTWltZUNsYXNzSW5mbyYgbWltZUNsYXNzSW5mbykKQEAgLTE2
MiwxMiArMTYyLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPE1pbWVDbGFzc0luZm8+OjpkZWNvZAog
fQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxQbHVnaW5JbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgUGx1Z2luSW5mbyYgcGx1Z2luSW5mbykKK3ZvaWQgQXJndW1l
bnRDb2RlcjxQbHVnaW5JbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUGx1Z2luSW5mbyYgcGx1Z2luSW5mbykKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUocGx1Z2lu
SW5mby5uYW1lKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocGx1Z2luSW5mby5maWxlKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUocGx1Z2luSW5mby5kZXNjKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocGx1
Z2luSW5mby5taW1lcyk7CisgICAgZW5jb2RlciA8PCBwbHVnaW5JbmZvLm5hbWUgPDwgcGx1Z2lu
SW5mby5uYW1lIDw8IHBsdWdpbkluZm8uZGVzYyA8PCBwbHVnaW5JbmZvLm1pbWVzOwogfQogICAg
IAogYm9vbCBBcmd1bWVudENvZGVyPFBsdWdpbkluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBQbHVnaW5JbmZvJiBwbHVnaW5JbmZvKQpAQCAtMTg1LDkgKzE4Miw5IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxQbHVnaW5JbmZvPjo6ZGVjb2RlKEEKIH0KIAogCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8SFRUUEhlYWRlck1hcD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxIVFRQ
SGVhZGVyTWFwPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgSFRUUEhl
YWRlck1hcCYgaGVhZGVyTWFwKQogewotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxj
b25zdCBIYXNoTWFwPEF0b21pY1N0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+Jj4oaGVh
ZGVyTWFwKSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBIYXNoTWFwPEF0b21p
Y1N0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+Jj4oaGVhZGVyTWFwKTsKIH0KIAogYm9v
bCBBcmd1bWVudENvZGVyPEhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJNYXApCkBAIC0xOTYsMTMgKzE5Myw5IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxIVFRQSGVhZGVyTWFwPjo6ZGVjb2QKIH0KIAogCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQordm9p
ZCBBcmd1bWVudENvZGVyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUoY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpKTsKLSAg
ICBlbmNvZGVyLT5lbmNvZGUoY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkpOwotICAg
IGVuY29kZXItPmVuY29kZShjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkpOwotICAgIGVuY29k
ZXItPmVuY29kZShjaGFsbGVuZ2UuZXJyb3IoKSk7CisgICAgZW5jb2RlciA8PCBjaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkgPDwgY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpIDw8IGNo
YWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpIDw8IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKSA8PCBjaGFsbGVuZ2UuZXJyb3IoKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKQEAgLTIzMiwxMyArMjI1LDExIEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxBdXRoZW50aWNhdGlvbkNoYWxsZW4KIH0KIAogCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8UHJvdGVjdGlvblNwYWNlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBzcGFjZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxQcm90
ZWN0aW9uU3BhY2U+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBQcm90
ZWN0aW9uU3BhY2UmIHNwYWNlKQogewotICAgIGVuY29kZXItPmVuY29kZShzcGFjZS5ob3N0KCkp
OwotICAgIGVuY29kZXItPmVuY29kZShzcGFjZS5wb3J0KCkpOwotICAgIGVuY29kZXItPmVuY29k
ZUVudW0oc3BhY2Uuc2VydmVyVHlwZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3BhY2UucmVh
bG0oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShzcGFjZS5hdXRoZW50aWNhdGlvblNjaGVt
ZSgpKTsKKyAgICBlbmNvZGVyIDw8IHNwYWNlLmhvc3QoKSA8PCBzcGFjZS5wb3J0KCkgPDwgc3Bh
Y2UucmVhbG0oKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oc3BhY2UuYXV0aGVudGljYXRpb25T
Y2hlbWUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHNwYWNlLnNlcnZlclR5cGUoKSk7CiB9
CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9uU3BhY2U+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBQcm90ZWN0aW9uU3BhY2UmIHNwYWNlKQpAQCAtMjUxLDEwICsyNDIs
NiBAQCBib29sIEFyZ3VtZW50Q29kZXI8UHJvdGVjdGlvblNwYWNlPjo6ZGVjCiAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocG9ydCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFByb3Rl
Y3Rpb25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29k
ZUVudW0oc2VydmVyVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFN0cmluZyBy
ZWFsbTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZWFsbSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI2MywxNSArMjUwLDE4IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxQcm90ZWN0aW9u
U3BhY2U+OjpkZWMKICAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0oYXV0aGVudGljYXRpb25T
Y2hlbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2
ZXJUeXBlIHNlcnZlclR5cGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHNlcnZlclR5
cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzcGFjZSA9IFByb3RlY3Rpb25TcGFj
ZShob3N0LCBwb3J0LCBzZXJ2ZXJUeXBlLCByZWFsbSwgYXV0aGVudGljYXRpb25TY2hlbWUpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q3JlZGVudGlhbD46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRp
YWwpCit2b2lkIEFyZ3VtZW50Q29kZXI8Q3JlZGVudGlhbD46OmVuY29kZShBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgZW5jb2Rl
ci0+ZW5jb2RlKGNyZWRlbnRpYWwudXNlcigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY3JlZGVu
dGlhbC5wYXNzd29yZCgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGNyZWRlbnRpYWwucGVy
c2lzdGVuY2UoKSk7CisgICAgZW5jb2RlciA8PCBjcmVkZW50aWFsLnVzZXIoKSA8PCBjcmVkZW50
aWFsLnBhc3N3b3JkKCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNyZWRlbnRpYWwucGVyc2lz
dGVuY2UoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxDcmVkZW50aWFsPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKQEAgLTI5Miw3
ICsyODIsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q3JlZGVudGlhbD46OmRlY29kZShBCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGVuY29kZUltYWdlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgSW1hZ2UqIGltYWdlKQorc3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyLCBJbWFnZSogaW1hZ2UpCiB7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2Ut
PnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKICAgICBiaXRtYXAtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIEludFBvaW50KCkpOwpAQCAtMzAwLDcgKzI5MCw3IEBAIHN0YXRpYyB2b2lkIGVuY29kZUlt
YWdlKEFyZ3VtZW50RW5jb2RlcioKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7
CiAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKIAotICAgIGVuY29kZXItPmVuY29k
ZShoYW5kbGUpOworICAgIGVuY29kZXIgPDwgaGFuZGxlOwogfQogCiBzdGF0aWMgYm9vbCBkZWNv
ZGVJbWFnZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxJbWFnZT4mIGltYWdlKQpA
QCAtMzE4LDIxICszMDgsMjEgQEAgc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNv
ZGVyKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q3Vyc29yPjo6
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit2
b2lkIEFyZ3VtZW50Q29kZXI8Q3Vyc29yPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShjdXJz
b3IudHlwZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0oY3Vyc29yLnR5cGUoKSk7CiAgICAg
ICAgIAogICAgIGlmIChjdXJzb3IudHlwZSgpICE9IEN1cnNvcjo6Q3VzdG9tKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoY3Vyc29yLmltYWdlKCktPmlzTnVsbCgpKSB7Ci0gICAgICAgIGVu
Y29kZXItPmVuY29kZShmYWxzZSk7IC8vIFRoZXJlIGlzIG5vIHZhbGlkIGltYWdlIGJlaW5nIGVu
Y29kZWQuCisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7IC8vIFRoZXJlIGlzIG5vIHZhbGlkIGlt
YWdlIGJlaW5nIGVuY29kZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbmNvZGVy
LT5lbmNvZGUodHJ1ZSk7CisgICAgZW5jb2RlciA8PCB0cnVlOwogICAgIGVuY29kZUltYWdlKGVu
Y29kZXIsIGN1cnNvci5pbWFnZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoY3Vyc29yLmhvdFNw
b3QoKSk7CisgICAgZW5jb2RlciA8PCBjdXJzb3IuaG90U3BvdCgpOwogfQogCiBib29sIEFyZ3Vt
ZW50Q29kZXI8Q3Vyc29yPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQ3Vyc29y
JiBjdXJzb3IpCkBAIC0zNzgsMjEgKzM2OCwxOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q3Vyc29y
Pjo6ZGVjb2RlKEFyZ3VtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAoa1Nob3VsZFNlcmlh
bGl6ZVdlYkNvcmVEYXRhKSB7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZVJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VSZXF1
ZXN0Lmh0dHBNZXRob2QoKSk7Ci0KLSAgICAgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVy
cyA9IHJlc291cmNlUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZShoZWFkZXJzKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QudXJs
KCkuc3RyaW5nKCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRo
b2QoKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3QuaHR0cEhlYWRlckZpZWxk
cygpOwogCiAgICAgICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IHJlc291cmNlUmVxdWVzdC5odHRw
Qm9keSgpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Ym9vbD4oaHR0cEJv
ZHkpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihodHRwQm9keSk7CiAg
ICAgICAgIGlmIChodHRwQm9keSkKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShodHRwQm9k
eS0+ZmxhdHRlblRvU3RyaW5nKCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCBodHRwQm9keS0+
ZmxhdHRlblRvU3RyaW5nKCk7CiAKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlUmVx
dWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpKTsKKyAgICAgICAgZW5jb2RlciA8
PCByZXNvdXJjZVJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKICAgICB9
CiAKICAgICBlbmNvZGVQbGF0Zm9ybURhdGEoZW5jb2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKQEAg
LTQzOSwyNSArNDI3LDIzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+Ojpk
ZWMKICAgICByZXR1cm4gZGVjb2RlUGxhdGZvcm1EYXRhKGRlY29kZXIsIHJlc291cmNlUmVxdWVz
dCk7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VS
ZXNwb25zZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VS
ZXNwb25zZSkKIHsKICAgICBpZiAoa1Nob3VsZFNlcmlhbGl6ZVdlYkNvcmVEYXRhKSB7CiAgICAg
ICAgIGJvb2wgcmVzcG9uc2VJc051bGwgPSByZXNvdXJjZVJlc3BvbnNlLmlzTnVsbCgpOwotICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUocmVzcG9uc2VJc051bGwpOworICAgICAgICBlbmNvZGVyIDw8
IHJlc3BvbnNlSXNOdWxsOwogICAgICAgICBpZiAocmVzcG9uc2VJc051bGwpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UudXJs
KCkuc3RyaW5nKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ocmVzb3VyY2VSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSk7Ci0KLSAgICAgICAgY29uc3Qg
SFRUUEhlYWRlck1hcCYgaGVhZGVycyA9IHJlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoaGVhZGVycyk7Ci0KLSAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHJlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKSk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZShyZXNvdXJjZVJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSk7Ci0gICAgICAgIGVu
Y29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXNvdXJjZVJlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCgpKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXNvdXJjZVJl
c3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3Vy
Y2VSZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZVJlc3BvbnNlLnVybCgpLnN0cmluZygpOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGludDMyX3Q+KHJlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgICAg
IGVuY29kZXIgPDwgcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCk7CisKKyAgICAg
ICAgZW5jb2RlciA8PCByZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCk7CisgICAgICAgIGVuY29k
ZXIgPDwgcmVzb3VyY2VSZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKSk7CisgICAgICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXNwb25zZS5odHRwU3Rh
dHVzVGV4dCgpOworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlUmVzcG9uc2Uuc3VnZ2VzdGVk
RmlsZW5hbWUoKTsKICAgICB9CiAKICAgICBlbmNvZGVQbGF0Zm9ybURhdGEoZW5jb2RlciwgcmVz
b3VyY2VSZXNwb25zZSk7CkBAIC01MjMsMjAgKzUwOSwyMCBAQCBib29sIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VSZXNwb25zZT46OmRlCiAgICAgcmV0dXJuIGRlY29kZVBsYXRmb3JtRGF0YShkZWNv
ZGVyLCByZXNvdXJjZVJlc3BvbnNlKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
RXJyb3I+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiByZXNvdXJjZUVycm9yKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNv
dXJjZUVycm9yKQogewogICAgIGlmIChrU2hvdWxkU2VyaWFsaXplV2ViQ29yZURhdGEpIHsKICAg
ICAgICAgYm9vbCBlcnJvcklzTnVsbCA9IHJlc291cmNlRXJyb3IuaXNOdWxsKCk7Ci0gICAgICAg
IGVuY29kZXItPmVuY29kZShlcnJvcklzTnVsbCk7CisgICAgICAgIGVuY29kZXIgPDwgZXJyb3JJ
c051bGw7CiAgICAgICAgIGlmIChlcnJvcklzTnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5kb21haW4oKSk7Ci0gICAgICAg
IGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9yLmVycm9yQ29kZSgpKTsKLSAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKHJlc291cmNlRXJyb3IuZmFpbGluZ1VSTCgpKTsKLSAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Ci0gICAgICAg
IGVuY29kZXItPmVuY29kZShyZXNvdXJjZUVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpOwotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUocmVzb3VyY2VFcnJvci5pc1RpbWVvdXQoKSk7CisgICAgICAgIGVu
Y29kZXIgPDwgcmVzb3VyY2VFcnJvci5kb21haW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNv
dXJjZUVycm9yLmVycm9yQ29kZSgpOworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlRXJyb3Iu
ZmFpbGluZ1VSTCgpOworICAgICAgICBlbmNvZGVyIDw8IHJlc291cmNlRXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZUVycm9yLmlzQ2FuY2Vs
bGF0aW9uKCk7CisgICAgICAgIGVuY29kZXIgPDwgcmVzb3VyY2VFcnJvci5pc1RpbWVvdXQoKTsK
ICAgICB9CiAKICAgICBlbmNvZGVQbGF0Zm9ybURhdGEoZW5jb2RlciwgcmVzb3VyY2VFcnJvcik7
CkBAIC01ODUsMjQgKzU3MSwyNCBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VFcnJvcj46
OmRlY29kCiAgICAgcmV0dXJuIGRlY29kZVBsYXRmb3JtRGF0YShkZWNvZGVyLCByZXNvdXJjZUVy
cm9yKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFdpbmRvd0ZlYXR1cmVzPjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1
cmVzKQordm9pZCBBcmd1bWVudENvZGVyPFdpbmRvd0ZlYXR1cmVzPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzKQog
ewotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy54KTsKLSAgICBlbmNvZGVyLT5l
bmNvZGUod2luZG93RmVhdHVyZXMueSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1
cmVzLndpZHRoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMuaGVpZ2h0KTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMueFNldCk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLnlTZXQpOwotICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dG
ZWF0dXJlcy53aWR0aFNldCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLmhl
aWdodFNldCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLm1lbnVCYXJWaXNp
YmxlKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMuc3RhdHVzQmFyVmlzaWJs
ZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHdpbmRvd0ZlYXR1cmVzLnRvb2xCYXJWaXNpYmxlKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMubG9jYXRpb25CYXJWaXNpYmxlKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUod2luZG93RmVhdHVyZXMuc2Nyb2xsYmFyc1Zpc2libGUpOwot
ICAgIGVuY29kZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5yZXNpemFibGUpOwotICAgIGVuY29k
ZXItPmVuY29kZSh3aW5kb3dGZWF0dXJlcy5mdWxsc2NyZWVuKTsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUod2luZG93RmVhdHVyZXMuZGlhbG9nKTsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVz
Lng7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy55OworICAgIGVuY29kZXIgPDwgd2lu
ZG93RmVhdHVyZXMud2lkdGg7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5oZWlnaHQ7
CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy54U2V0OworICAgIGVuY29kZXIgPDwgd2lu
ZG93RmVhdHVyZXMueVNldDsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0
OworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0OworICAgIGVuY29kZXIg
PDwgd2luZG93RmVhdHVyZXMubWVudUJhclZpc2libGU7CisgICAgZW5jb2RlciA8PCB3aW5kb3dG
ZWF0dXJlcy5zdGF0dXNCYXJWaXNpYmxlOworICAgIGVuY29kZXIgPDwgd2luZG93RmVhdHVyZXMu
dG9vbEJhclZpc2libGU7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5sb2NhdGlvbkJh
clZpc2libGU7CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0dXJlcy5zY3JvbGxiYXJzVmlzaWJs
ZTsKKyAgICBlbmNvZGVyIDw8IHdpbmRvd0ZlYXR1cmVzLnJlc2l6YWJsZTsKKyAgICBlbmNvZGVy
IDw8IHdpbmRvd0ZlYXR1cmVzLmZ1bGxzY3JlZW47CisgICAgZW5jb2RlciA8PCB3aW5kb3dGZWF0
dXJlcy5kaWFsb2c7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxXaW5kb3dGZWF0dXJlcz46OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0
dXJlcykKQEAgLTY0MywxNSArNjI5LDE1IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXaW5kb3dGZWF0
dXJlcz46OmRlY28KIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEFyZ3VtZW50
Q29kZXI8Q29sb3I+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7CiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKGZhbHNlKTsKKyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGVuY29kZXItPmVuY29kZSh0cnVlKTsKLSAgICBlbmNvZGVyLT5l
bmNvZGUoY29sb3IucmdiKCkpOworICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICBlbmNvZGVyIDw8
IGNvbG9yLnJnYigpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDb2xvciYgY29sb3IpCkBAIC02NzQsMTIgKzY2MCwxMiBA
QCBib29sIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUoQXJndW1lCiB9CiAKIAotdm9pZCBB
cmd1bWVudENvZGVyPENvbXBvc2l0aW9uVW5kZXJsaW5lPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKK3ZvaWQg
QXJndW1lbnRDb2RlcjxDb21wb3NpdGlvblVuZGVybGluZT46OmVuY29kZShBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpCiB7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKHVuZGVybGluZS5zdGFydE9mZnNldCk7Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlKHVuZGVybGluZS5lbmRPZmZzZXQpOwotICAgIGVuY29kZXItPmVuY29kZSh1bmRlcmxp
bmUudGhpY2spOwotICAgIGVuY29kZXItPmVuY29kZSh1bmRlcmxpbmUuY29sb3IpOworICAgIGVu
Y29kZXIgPDwgdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0OworICAgIGVuY29kZXIgPDwgdW5kZXJsaW5l
LmVuZE9mZnNldDsKKyAgICBlbmNvZGVyIDw8IHVuZGVybGluZS50aGljazsKKyAgICBlbmNvZGVy
IDw8IHVuZGVybGluZS5jb2xvcjsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPENvbXBvc2l0aW9u
VW5kZXJsaW5lPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQ29tcG9zaXRpb25V
bmRlcmxpbmUmIHVuZGVybGluZSkKQEAgLTY5NywxMiArNjgzLDEyIEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxDb21wb3NpdGlvblVuZGVybGluZT4KIH0KIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Ci12b2lkIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQordm9pZCBBcmd1
bWVudENvZGVyPERhdGFiYXNlRGV0YWlscz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IERhdGFiYXNlRGV0YWlscyYgZGV0YWlscykKIHsKLSAgICBlbmNvZGVyLT5lbmNv
ZGUoZGV0YWlscy5uYW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWxzLmRpc3BsYXlO
YW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZShkZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKSk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKGRldGFpbHMuY3VycmVudFVzYWdlKCkpOworICAgIGVuY29kZXIg
PDwgZGV0YWlscy5uYW1lKCk7CisgICAgZW5jb2RlciA8PCBkZXRhaWxzLmRpc3BsYXlOYW1lKCk7
CisgICAgZW5jb2RlciA8PCBkZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKTsKKyAgICBlbmNvZGVyIDw8
IGRldGFpbHMuY3VycmVudFVzYWdlKCk7CiB9CiAgICAgCiBib29sIEFyZ3VtZW50Q29kZXI8RGF0
YWJhc2VEZXRhaWxzPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRGF0YWJhc2VE
ZXRhaWxzJiBkZXRhaWxzKQpAQCAtNzI4LDExICs3MTQsMTEgQEAgYm9vbCBBcmd1bWVudENvZGVy
PERhdGFiYXNlRGV0YWlscz46OmRlYwogfQogI2VuZGlmCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxE
aWN0YXRpb25BbHRlcm5hdGl2ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNv
bnN0IERpY3RhdGlvbkFsdGVybmF0aXZlJiBkaWN0YXRpb25BbHRlcm5hdGl2ZSkKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IERpY3RhdGlvbkFsdGVybmF0aXZlJiBkaWN0YXRpb25BbHRlcm5hdGl2
ZSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGljdGF0aW9uQWx0ZXJuYXRpdmUucmFuZ2VTdGFy
dCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRpY3RhdGlvbkFsdGVybmF0aXZlLnJhbmdlTGVuZ3Ro
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGljdGF0aW9uQWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29u
dGV4dCk7CisgICAgZW5jb2RlciA8PCBkaWN0YXRpb25BbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0Owor
ICAgIGVuY29kZXIgPDwgZGljdGF0aW9uQWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGg7CisgICAgZW5j
b2RlciA8PCBkaWN0YXRpb25BbHRlcm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0OwogfQogCiBib29s
IEFyZ3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJuYXRpdmU+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBEaWN0YXRpb25BbHRlcm5hdGl2ZSYgZGljdGF0aW9uQWx0ZXJuYXRpdmUp
CkBAIC03NDcsMTYgKzczMywxNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8RGljdGF0aW9uQWx0ZXJu
YXRpdmU+CiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEZpbGVDaG9vc2VyU2V0dGluZ3M+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGaWxlQ2hvb3NlclNldHRpbmdz
JiBzZXR0aW5ncykKK3ZvaWQgQXJndW1lbnRDb2RlcjxGaWxlQ2hvb3NlclNldHRpbmdzPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYg
c2V0dGluZ3MpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHNldHRpbmdzLmFsbG93c011bHRpcGxl
RmlsZXMpOworICAgIGVuY29kZXIgPDwgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlczsKICNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICBlbmNvZGVyLT5lbmNvZGUoc2V0dGluZ3Mu
YWxsb3dzRGlyZWN0b3J5VXBsb2FkKTsKKyAgICBlbmNvZGVyIDw8IHNldHRpbmdzLmFsbG93c0Rp
cmVjdG9yeVVwbG9hZDsKICNlbmRpZgotICAgIGVuY29kZXItPmVuY29kZShzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMpOwotICAgIGVuY29kZXItPmVuY29kZShzZXR0aW5ncy5zZWxlY3RlZEZpbGVz
KTsKKyAgICBlbmNvZGVyIDw8IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlczsKKyAgICBlbmNvZGVy
IDw8IHNldHRpbmdzLnNlbGVjdGVkRmlsZXM7CiAjaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCi0g
ICAgZW5jb2Rlci0+ZW5jb2RlKHNldHRpbmdzLmNhcHR1cmUpOworICAgIGVuY29kZXIgPDwgc2V0
dGluZ3MuY2FwdHVyZTsKICNlbmRpZgogfQogCkBAIC03ODEsMTIgKzc2NywxMiBAQCBib29sIEFy
Z3VtZW50Q29kZXI8RmlsZUNob29zZXJTZXR0aW5ncz46CiB9CiAKIAotdm9pZCBBcmd1bWVudENv
ZGVyPEdyYW1tYXJEZXRhaWw+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhbW1hckRldGFp
bD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYW1tYXJEZXRhaWwm
IGRldGFpbCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGV0YWlsLmxvY2F0aW9uKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUoZGV0YWlsLmxlbmd0aCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRldGFp
bC5ndWVzc2VzKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7
CisgICAgZW5jb2RlciA8PCBkZXRhaWwubG9jYXRpb247CisgICAgZW5jb2RlciA8PCBkZXRhaWwu
bGVuZ3RoOworICAgIGVuY29kZXIgPDwgZGV0YWlsLmd1ZXNzZXM7CisgICAgZW5jb2RlciA8PCBk
ZXRhaWwudXNlckRlc2NyaXB0aW9uOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8R3JhbW1hckRl
dGFpbD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdyYW1tYXJEZXRhaWwmIGRl
dGFpbCkKQEAgLTgwNCwxMyArNzkwLDEzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxHcmFtbWFyRGV0
YWlsPjo6ZGVjb2QKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgVGV4dENoZWNraW5nUmVz
dWx0JiByZXN1bHQpCit2b2lkIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiBy
ZXN1bHQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShyZXN1bHQudHlwZSk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHJlc3VsdC5sb2NhdGlvbik7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3Vs
dC5sZW5ndGgpOwotICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQuZGV0YWlscyk7Ci0gICAgZW5j
b2Rlci0+ZW5jb2RlKHJlc3VsdC5yZXBsYWNlbWVudCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KHJlc3VsdC50eXBlKTsKKyAgICBlbmNvZGVyIDw8IHJlc3VsdC5sb2NhdGlvbjsKKyAgICBlbmNv
ZGVyIDw8IHJlc3VsdC5sZW5ndGg7CisgICAgZW5jb2RlciA8PCByZXN1bHQuZGV0YWlsczsKKyAg
ICBlbmNvZGVyIDw8IHJlc3VsdC5yZXBsYWNlbWVudDsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVy
PFRleHRDaGVja2luZ1Jlc3VsdD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFRl
eHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KQpAQCAtODI4LDExICs4MTQsMTEgQEAgYm9vbCBBcmd1
bWVudENvZGVyPFRleHRDaGVja2luZ1Jlc3VsdD46OgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ1Nlc3Npb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyLCBjb25zdCBEcmFnU2Vzc2lvbiYgcmVzdWx0KQordm9pZCBBcmd1bWVudENvZGVyPERy
YWdTZXNzaW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRHJhZ1Nl
c3Npb24mIHJlc3VsdCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHJlc3VsdC5vcGVyYXRp
b24pOwotICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQubW91c2VJc092ZXJGaWxlSW5wdXQpOwot
ICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVFbnVtKHJlc3VsdC5vcGVyYXRpb24pOworICAgIGVuY29kZXIgPDwg
cmVzdWx0Lm1vdXNlSXNPdmVyRmlsZUlucHV0OworICAgIGVuY29kZXIgPDwgcmVzdWx0Lm51bWJl
ck9mSXRlbXNUb0JlQWNjZXB0ZWQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxEcmFnU2Vzc2lv
bj46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERyYWdTZXNzaW9uJiByZXN1bHQp
CkBAIC04NDYsOSArODMyLDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPERyYWdTZXNzaW9uPjo6ZGVj
b2RlKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8S1VSTD46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEtVUkwmIHJlc3VsdCkKK3ZvaWQg
QXJndW1lbnRDb2RlcjxLVVJMPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgS1VSTCYgcmVzdWx0KQogewotICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQuc3RyaW5nKCkp
OworICAgIGVuY29kZXIgPDwgcmVzdWx0LnN0cmluZygpOwogfQogICAgIAogYm9vbCBBcmd1bWVu
dENvZGVyPEtVUkw+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBLVVJMJiByZXN1
bHQpCkBAIC04NjAsMTQgKzg0NiwxNCBAQCBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46OmRlY29k
ZShBcmd1bWVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpVc2VyU3R5bGVTaGVldD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkKK3ZvaWQgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0JiB1c2VyU3R5bGVTaGVldCkK
IHsKLSAgICBlbmNvZGVyLT5lbmNvZGUodXNlclN0eWxlU2hlZXQuc291cmNlKCkpOwotICAgIGVu
Y29kZXItPmVuY29kZSh1c2VyU3R5bGVTaGVldC51cmwoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KHVzZXJTdHlsZVNoZWV0LndoaXRlbGlzdCgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUodXNlclN0
eWxlU2hlZXQuYmxhY2tsaXN0KCkpOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odXNlclN0eWxl
U2hlZXQuaW5qZWN0ZWRGcmFtZXMoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh1c2VyU3R5
bGVTaGVldC5sZXZlbCgpKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0LnNvdXJjZSgp
OworICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXQudXJsKCk7CisgICAgZW5jb2RlciA8PCB1
c2VyU3R5bGVTaGVldC53aGl0ZWxpc3QoKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTdHlsZVNoZWV0
LmJsYWNrbGlzdCgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bSh1c2VyU3R5bGVTaGVldC5pbmpl
Y3RlZEZyYW1lcygpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0odXNlclN0eWxlU2hlZXQubGV2
ZWwoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpVc2VyU3R5bGVTaGVldD46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0
JiB1c2VyU3R5bGVTaGVldCkKQEAgLTkwMCwxNCArODg2LDE0IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpVc2VyU3R5bGVTaGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTY3JpcHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQordm9pZCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OlVzZXJTY3JpcHQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0JiB1c2VyU2NyaXB0KQogewotICAgIGVu
Y29kZXItPmVuY29kZSh1c2VyU2NyaXB0LnNvdXJjZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUo
dXNlclNjcmlwdC51cmwoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHVzZXJTY3JpcHQud2hpdGVs
aXN0KCkpOwotICAgIGVuY29kZXItPmVuY29kZSh1c2VyU2NyaXB0LmJsYWNrbGlzdCgpKTsKLSAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKHVzZXJTY3JpcHQuaW5qZWN0aW9uVGltZSgpKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKHVzZXJTY3JpcHQuaW5qZWN0ZWRGcmFtZXMoKSk7CisgICAgZW5j
b2RlciA8PCB1c2VyU2NyaXB0LnNvdXJjZSgpOworICAgIGVuY29kZXIgPDwgdXNlclNjcmlwdC51
cmwoKTsKKyAgICBlbmNvZGVyIDw8IHVzZXJTY3JpcHQud2hpdGVsaXN0KCk7CisgICAgZW5jb2Rl
ciA8PCB1c2VyU2NyaXB0LmJsYWNrbGlzdCgpOworICAgIGVuY29kZXIuZW5jb2RlRW51bSh1c2Vy
U2NyaXB0LmluamVjdGlvblRpbWUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHVzZXJTY3Jp
cHQuaW5qZWN0ZWRGcmFtZXMoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpV
c2VyU2NyaXB0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViQ29yZTo6VXNl
clNjcmlwdCYgdXNlclNjcmlwdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNzcg
KzcyLDc3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0+IHsK
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKIH07CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludD4gewot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RmxvYXRTaXplPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRTaXplJik7CiB9Owog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFBvaW50PiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciosIFdlYkNvcmU6OkludFBvaW50Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkludFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkludFJlY3QmKTsK
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50U2l6ZT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiwgV2ViQ29yZTo6SW50U2l6ZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXM+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1
dGVzJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1
bWVudERlY29kZXIqLCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TWltZUNsYXNzSW5mbz4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpNaW1l
Q2xhc3NJbmZvJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6TWltZUNsYXNzSW5mbyYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlBsdWdpbkluZm8m
KTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6UGx1Z2luSW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBXZWJDb3JlOjpQbHVnaW5JbmZvJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNv
cmU6OkhUVFBIZWFkZXJNYXAmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsK
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UHJvdGVjdGlv
blNwYWNlPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0
IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNl
Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNyZWRl
bnRpYWw+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6Q3JlZGVudGlhbCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7CiAgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3Vyc29yPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpD
dXJzb3ImKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6Q3Vyc29yJik7CiB9OwogCkBAIC0xNTMsOSArMTUzLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBjb25zdCBib29sIGtTaG91bGRTZXJp
YWxpemVXZWJDb3JlRGF0YSA9IHRydWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rlcios
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHN0YXRpYyB2b2lkIGVuY29kZVBsYXRm
b3JtRGF0YShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
UGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OwogfTsKIApAQCAtMTY2LDkgKzE2Niw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZToKICAgICBzdGF0aWMgY29uc3QgYm9vbCBrU2hvdWxkU2VyaWFsaXplV2ViQ29y
ZURhdGEgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGVQbGF0Zm9ybURhdGEo
QXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAg
IHN0YXRpYyB2b2lkIGVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlUGxhdGZv
cm1EYXRhKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIH07
CiAKQEAgLTE3OSw3NiArMTc5LDc2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZToKICAgICBzdGF0aWMgY29uc3QgYm9vbCBrU2hvdWxkU2VyaWFsaXplV2ViQ29yZURh
dGEgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNv
ZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVj
b2RlciosIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6V2luZG93RmVhdHVyZXM+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMm
KTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29sb3I+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q29sb3ImKTsKIH07
CiAKICNpZiBQTEFURk9STShNQUMpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OktleXByZXNzQ29tbWFuZD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQmKTsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6
OktleXByZXNzQ29tbWFuZCYpOwogfTsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiB9Owog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRhdGFiYXNlRGV0YWls
cz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpEYXRhYmFzZURldGFpbHMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzJik7CiAgICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyYpOwog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEaWN0YXRpb25B
bHRlcm5hdGl2ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBj
b25zdCBXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZSYpOworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZSYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3Mm
KTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6RmlsZUNob29zZXJTZXR0aW5ncyYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqLCBXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJik7CiB9OwogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhbW1h
ckRldGFpbCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKIH07CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlRleHRD
aGVja2luZ1Jlc3VsdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQmKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0Jik7CiB9
OwogICAgIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnU2Vz
c2lvbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBX
ZWJDb3JlOjpEcmFnU2Vzc2lvbiYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpEcmFnU2Vzc2lvbiYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEcmFnU2Vzc2lvbiYpOwogfTsKIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpLVVJMPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6S1VS
TCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpL
VVJMJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVz
ZXJTdHlsZVNoZWV0PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik7CisgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0Jik7CiAgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlVzZXJTdHlsZVNo
ZWV0Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlVz
ZXJTY3JpcHQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpVc2VyU2NyaXB0Jik7CiAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlVzZXJTY3JpcHQmKTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJHZW9sb2Nh
dGlvblBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBXZWJHZW9s
b2NhdGlvblBvc2l0aW9uOjp+V2ViR2VvbG9jYXRpb25QCiAKIHZvaWQgV2ViR2VvbG9jYXRpb25Q
b3NpdGlvbjo6RGF0YTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIHsKLSAgICBDb3JlSVBDOjpTaW1wbGVBcmd1bWVudENvZGVyPFdlYkdlb2xvY2F0aW9u
UG9zaXRpb246OkRhdGE+OjplbmNvZGUoJmVuY29kZXIsICp0aGlzKTsKKyAgICBDb3JlSVBDOjpT
aW1wbGVBcmd1bWVudENvZGVyPFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OkRhdGE+OjplbmNvZGUo
ZW5jb2RlciwgKnRoaXMpOwogfQogCiBib29sIFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OkRhdGE6
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIERhdGEmIGRhdGEpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lv
biAxMzMwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZv
aWQgV2ViTGF5ZXJJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViTGF5ZXJJbmZvPjo6ZW5jb2Rl
KCZlbmNvZGVyLCAqdGhpcyk7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJMYXllckluZm8+
OjplbmNvZGUoZW5jb2RlciwgKnRoaXMpOwogfQogCiBib29sIFdlYkxheWVySW5mbzo6ZGVjb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJJbmZvJiBpbmZvKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwCShyZXZpc2lvbiAxMzMwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
IG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46
OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxv
YXRQb2ludDNEKQordm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQog
ewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKGVuY29kZXIs
IGZsb2F0UG9pbnQzRCk7CiB9CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxG
bG9hdFBvaW50M0Q+OjpkZWNvZGUKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9h
dFBvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPExlbmd0aD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IExlbmd0aCYgbGVuZ3RoKQordm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IExlbmd0aCYgbGVuZ3RoKQogewogICAgIFNpbXBs
ZUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIGxlbmd0aCk7CiB9CkBAIC05
Myw3ICs5Myw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoQXJndW0KICAg
ICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVu
Z3RoKTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybWF0aW9uTWF0cml4KQordm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9u
TWF0cml4Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0cml4KQogewogICAgIFNpbXBsZUFyZ3VtZW50
Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoZW5jb2RlciwgdHJhbnNmb3JtYXRp
b25NYXRyaXgpOwogfQpAQCAtMTA0LDI1ICsxMDQsMjUgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRy
YW5zZm9ybWF0aW9uTWF0cml4PgogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQogewotICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4o
ZmlsdGVycy5zaXplKCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihm
aWx0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVy
cy5hdChpKTsKICAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBm
aWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh0
eXBlKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwogICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRF
OgotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFt
b3VudCgpKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlcikt
PmFtb3VudCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoK
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0
aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5hbW91bnQoKSkpOworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5hbW91bnQoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CiAgICAgICAgICAg
ICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25z
dCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKS0+c3RkRGV2aWF0aW9uKCkpOwpAQCAtMTMw
LDcgKzEzMCw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXQKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CiAgICAgICAgICAgICBj
b25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKTsKICAgICAgICAgICAgIEFyZ3Vt
ZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5sb2NhdGlvbigpKTsK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxpbnQzMl90PihzaGFkb3ct
PnN0ZERldmlhdGlvbigpKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHNoYWRvdy0+c3RkRGV2aWF0aW9uKCkpOwogICAgICAgICAgICAgQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmVuY29kZShlbmNvZGVyLCBzaGFkb3ctPmNvbG9yKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTE0MSwzNCArMTQxLDM0IEBAIHZvaWQgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXQKICAgICAgICAgICAgIEFTU0VSVChjdXN0b21PcGVyYXRp
b24tPnByb2dyYW0oKSk7CiAgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbSgpOwogICAgICAgICAgICAgQVNTRVJU
KHByb2dyYW0tPmlzTG9hZGVkKCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHByb2dy
YW0tPnZlcnRleFNoYWRlclN0cmluZygpKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlclN0cmluZygpKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZUVudW0ocHJvZ3JhbS0+cHJvZ3JhbVR5cGUoKSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHByb2dyYW0tPnZlcnRleFNoYWRlclN0cmluZygpOworICAgICAgICAgICAgZW5jb2RlciA8PCBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlclN0cmluZygpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKHByb2dyYW0tPnByb2dyYW1UeXBlKCkpOwogICAgICAgICAgICAgQ3VzdG9tRmlsdGVy
UHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzID0gcHJvZ3JhbS0+bWl4U2V0dGluZ3MoKTsK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0obWl4U2V0dGluZ3MuYmxlbmRNb2RlKTsK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0obWl4U2V0dGluZ3MuY29tcG9zaXRlT3Bl
cmF0b3IpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShwcm9ncmFtLT5tZXNoVHlw
ZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShtaXhTZXR0aW5ncy5ibGVuZE1v
ZGUpOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1peFNldHRpbmdzLmNvbXBvc2l0
ZU9wZXJhdG9yKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwcm9ncmFtLT5tZXNo
VHlwZSgpKTsKIAogICAgICAgICAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0
ZXJzID0gY3VzdG9tT3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICBlbmNvZGVy
LT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBhcmFtZXRlcnMuc2l6ZSgpKSk7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYXJhbWV0ZXJzLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBw
YXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29k
ZShwYXJhbWV0ZXItPm5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51
bShwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSk7CisgICAgICAgICAgICAgICAgZW5jb2RlciA8
PCBwYXJhbWV0ZXItPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0o
cGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpOwogCiAgICAgICAgICAgICAgICAgc3dpdGNoIChw
YXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyOjpBUlJBWTogewogICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0
ZXJBcnJheVBhcmFtZXRlciogYXJyYXlQYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0
ZXJBcnJheVBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJyYXlQYXJhbWV0ZXItPnNp
emUoKSkpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcnJheVBhcmFtZXRlci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBhcnJheVBhcmFtZXRlci0+c2l6ZSgpOyArK2opCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoYXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaikp
OworICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheVBhcmFtZXRlci0+dmFs
dWVBdChqKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6IHsKICAg
ICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKiBudWJtZXJQYXJh
bWV0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0
ZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG51Ym1lclBhcmFtZXRlci0+c2l6ZSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51Ym1lclBhcmFtZXRlci0+c2l6
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBudWJtZXJQ
YXJhbWV0ZXItPnNpemUoKTsgKytqKQotICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKG51Ym1lclBhcmFtZXRlci0+dmFsdWVBdChqKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbmNvZGVyIDw8IG51Ym1lclBhcmFtZXRlci0+dmFsdWVBdChqKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2Ug
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpUUkFOU0ZPUk06IHsKQEAgLTE3OSw5ICsxNzksOSBAQCB2
b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoY3VzdG9tT3Bl
cmF0aW9uLT5tZXNoUm93cygpKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShjdXN0b21P
cGVyYXRpb24tPm1lc2hDb2x1bW5zKCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51
bShjdXN0b21PcGVyYXRpb24tPm1lc2hCb3hUeXBlKCkpOworICAgICAgICAgICAgZW5jb2RlciA8
PCBjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGN1
c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKTsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2Rl
RW51bShjdXN0b21PcGVyYXRpb24tPm1lc2hCb3hUeXBlKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMzQ3LDEyICszNDcsMTIgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdAogfQogI2VuZGlmCiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucykKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucykK
IHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRyYW5zZm9ybU9w
ZXJhdGlvbnMuc2l6ZSgpKSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24qIG9wZXJhdGlvbiA9IHRyYW5zZm9ybU9wZXJhdGlvbnMuYXQoaSk7Ci0gICAg
ICAgIGVuY29kZXItPmVuY29kZUVudW0ob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpOwor
ICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0ob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkp
OwogCiAgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6CkBAIC0zNjAsOSArMzYwLDkg
QEAgdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OgogICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTQ0FMRV9aOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6
Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKS0+eSgpKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25z
dCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKSk7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKS0+eCgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnkoKTsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT56KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1k6CkBAIC0zNzcsMTYgKzM3NywxNiBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
VHJhbnNmb3JtT3BlcmF0aW9ucz46CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEVfWDoKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgogICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+
KG9wZXJhdGlvbiktPngoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nh
c3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpKTsKLSAg
ICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT56KCkpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlv
biktPmFuZ2xlKCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9w
ZXJhdGlvbiktPnkoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eigpOworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT5hbmdsZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTS0VXX1k6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOgotICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24qPihvcGVyYXRpb24pLT5hbmdsZVgoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbikt
PmFuZ2xlWSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlWCgpOworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uKS0+YW5nbGVZKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246Ok1BVFJJWDoKICAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bWF0cml4KCkpOwpAQCAtNTA3LDMwICs1
MDcsMzAgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBlbmNvZGVUaW1pbmdGdW5jdGlvbihBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikK
K3N0YXRpYyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0aW9uKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQogewogICAgIGlmICghdGlt
aW5nRnVuY3Rpb24pIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShUaW1pbmdGdW5jdGlv
bjo6VGltaW5nRnVuY3Rpb25UeXBlKC0xKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShU
aW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlKC0xKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUgPSB0
aW1pbmdGdW5jdGlvbiA/IHRpbWluZ0Z1bmN0aW9uLT50eXBlKCkgOiBUaW1pbmdGdW5jdGlvbjo6
TGluZWFyRnVuY3Rpb247Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh0eXBlKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUVudW0odHlwZSk7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUaW1p
bmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGlt
aW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKICAgICAgICAgY29uc3QgQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbiogY3ViaWMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoY3ViaWMtPngxKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoY3ViaWMtPnkxKCkpOwot
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUoY3ViaWMtPngyKCkpOwotICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoY3ViaWMtPnkyKCkpOworICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT54MSgpOworICAg
ICAgICBlbmNvZGVyIDw8IGN1YmljLT55MSgpOworICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT54
MigpOworICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT55MigpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjogewogICAgICAgICBj
b25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGVwcyA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBz
VGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIGVuY29kZXItPmVuY29k
ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RlcHMtPm51bWJlck9mU3RlcHMoKSkpOwotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUoc3RlcHMtPnN0ZXBBdFN0YXJ0KCkpOworICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGVwcy0+bnVtYmVyT2ZTdGVwcygpKTsKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGVwcy0+c3RlcEF0U3RhcnQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIH0KQEAgLTU3OSwzOSArNTc5LDM5IEBAIGJvb2wgZGVjb2RlVGltaW5nRnVuY3Rpb24o
QXJndW1lbnREZWNvZGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2Rl
cjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYgYW5pbWF0aW9uKQordm9pZCBBcmd1bWVu
dENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmltYXRpb24pCiB7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbi5uYW1lKCkpOwotICAgIGVuY29kZXItPmVuY29kZShh
bmltYXRpb24uYm94U2l6ZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGFuaW1hdGlvbi5z
dGF0ZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLnN0YXJ0VGltZSgpKTsKLSAg
ICBlbmNvZGVyLT5lbmNvZGUoYW5pbWF0aW9uLnBhdXNlVGltZSgpKTsKLSAgICBlbmNvZGVyLT5l
bmNvZGUoYW5pbWF0aW9uLmxpc3RzTWF0Y2goKSk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24u
bmFtZSgpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmJveFNpemUoKTsKKyAgICBlbmNvZGVy
LmVuY29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9u
LnN0YXJ0VGltZSgpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgpOworICAg
IGVuY29kZXIgPDwgYW5pbWF0aW9uLmxpc3RzTWF0Y2goKTsKIAogICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbk9iamVjdCA9IGFuaW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBlbmNvZGVy
LT5lbmNvZGVFbnVtKGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOwotICAgIGVuY29kZXIt
PmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgp
KSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbk9iamVjdC0+ZHVyYXRpb24oKSk7Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0aW9uQ291bnQoKSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVFbnVtKGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOworICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+ZmlsbE1v
ZGUoKSk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7CisgICAg
ZW5jb2RlciA8PCBhbmltYXRpb25PYmplY3QtPml0ZXJhdGlvbkNvdW50KCk7CiAgICAgZW5jb2Rl
VGltaW5nRnVuY3Rpb24oZW5jb2RlciwgYW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlvbigp
LmdldCgpKTsKIAogICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmlt
YXRpb24ua2V5ZnJhbWVzKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRW51bShrZXlmcmFtZXMucHJv
cGVydHkoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlm
cmFtZXMuc2l6ZSgpKSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0
eSgpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6
ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMuYXQoaSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZSh2YWx1ZS0+a2V5VGltZSgpKTsKKyAgICAgICAgZW5j
b2RlciA8PCB2YWx1ZS0+a2V5VGltZSgpOwogICAgICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihl
bmNvZGVyLCB2YWx1ZS0+dGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHN3aXRjaCAoa2V5ZnJh
bWVzLnByb3BlcnR5KCkpIHsKICAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToK
LSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1h
dGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KHZhbHVlKS0+dmFsdWUoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm06Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoKnN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgKnN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odmFs
dWUpLT52YWx1ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI6Ci0gICAgICAgICAg
ICBlbmNvZGVyLT5lbmNvZGUoKnN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
Kj4odmFsdWUpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19jYXN0
PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKQEAgLTcxNyw5ICs3MTcsOSBAQCBi
b29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9ucz46OmVuY29k
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
JiBhbmltYXRpb25zKQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpOwog
fQogCiBib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+OjpkZWNvZGUo
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0
aW9ucykKQEAgLTcyOCwxOCArNzI4LDE2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW8KIH0KIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2Vu
KQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlVG9rZW4mIHRva2VuKQogewogI2lmIE9TKERBUldJTikKLSAgICBlbmNvZGVyLT5lbmNvZGUo
QXR0YWNobWVudCh0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NF
TkQpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoQXR0YWNobWVudCh0b2tlbi5iYWNrQnVmZmVySGFu
ZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpOworICAgIGVuY29kZXIgPDwgQXR0YWNobWVu
dCh0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpOworICAg
IGVuY29kZXIgPDwgQXR0YWNobWVudCh0b2tlbi5iYWNrQnVmZmVySGFuZGxlLCBNQUNIX01TR19U
WVBFX01PVkVfU0VORCk7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIHVpbnQ2NF90IGZyb250QnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRva2VuLmZyb250QnVmZmVySGFuZGxl
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZnJvbnRCdWZmZXIpOwotICAgIHVpbnQ2NF90IGJhY2tC
dWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odG9rZW4uYmFja0J1ZmZlckhhbmRs
ZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGJhY2tCdWZmZXIpOworICAgIGVuY29kZXIgPDwgcmVp
bnRlcnByZXRfY2FzdDx1aW50NjRfdD4odG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpOworICAgIGVu
Y29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4odG9rZW4uYmFja0J1ZmZlckhhbmRs
ZSk7CiAjZWxpZiBPUyhMSU5VWCkKLSAgICBlbmNvZGVyLT5lbmNvZGUodG9rZW4uZnJvbnRCdWZm
ZXJIYW5kbGUpOworICAgIGVuY29kZXIgPDwgdG9rZW4uZnJvbnRCdWZmZXJIYW5kbGU7CiAjZW5k
aWYKIH0KIApAQCAtNzcxLDQgKzc2OSw1IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpH
cmFwaGljc1N1cmYKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisKICNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMTMzMDc0KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDUwICs1MSw1MSBAQCBz
dHJ1Y3QgR3JhcGhpY3NTdXJmYWNlVG9rZW47CiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQzRCYpOworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6TGVuZ3RoJik7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6Okxlbmd0
aCYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogfTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpOwogfTsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1PcGVyYXRpb25zJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rlcios
IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uJik7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb24mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOwogfTsKIAogI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2VUb2tlbiYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29k
ZXIqLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwogfTsKICNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBDb3JlSVBDCisKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAKICNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnNfaApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAJKHJl
dmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2Rl
cnNHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotc3RhdGljIHZvaWQgZW5jb2RlSW1h
Z2UoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHZGtQaXhidWYqIHBpeGJ1ZikKK3N0
YXRpYyB2b2lkIGVuY29kZUltYWdlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgR2Rr
UGl4YnVmKiBwaXhidWYpCiB7CiAgICAgSW50U2l6ZSBpbWFnZVNpemUoZ2RrX3BpeGJ1Zl9nZXRf
d2lkdGgocGl4YnVmKSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KHBpeGJ1ZikpOwogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKGltYWdlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKQEAgLTU0LDcg
KzU0LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVyKgogICAgIFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZSho
YW5kbGUpOwogCi0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7CisgICAgZW5jb2RlciA8PCBo
YW5kbGU7CiB9CiAKIHN0YXRpYyBib29sIGRlY29kZUltYWdlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgR1JlZlB0cjxHZGtQaXhidWY+JiBwaXhidWYpCkBAIC04NSwzMCArODUsMzAgQEAgc3Rh
dGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKgogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3N0YXRpYyB2b2lkIGVuY29kZURh
dGFPYmplY3QoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEYXRhT2JqZWN0R3RrKiBk
YXRhT2JqZWN0KQogewogICAgIGJvb2wgaGFzVGV4dCA9IGRhdGFPYmplY3QtPmhhc1RleHQoKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVGV4dCk7CisgICAgZW5jb2RlciA8PCBoYXNUZXh0Owog
ICAgIGlmIChoYXNUZXh0KQotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZGF0YU9iamVjdC0+dGV4
dCgpKTsKKyAgICAgICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT50ZXh0KCk7CiAKICAgICBib29s
IGhhc01hcmt1cCA9IGRhdGFPYmplY3QtPmhhc01hcmt1cCgpOwotICAgIGVuY29kZXItPmVuY29k
ZShoYXNNYXJrdXApOworICAgIGVuY29kZXIgPDwgaGFzTWFya3VwOwogICAgIGlmIChoYXNNYXJr
dXApCi0gICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT5tYXJrdXAoKSk7CisgICAg
ICAgIGVuY29kZXIgPDwgZGF0YU9iamVjdC0+bWFya3VwKCk7CiAKICAgICBib29sIGhhc1VSTCA9
IGRhdGFPYmplY3QtPmhhc1VSTCgpOwotICAgIGVuY29kZXItPmVuY29kZShoYXNVUkwpOworICAg
IGVuY29kZXIgPDwgaGFzVVJMOwogICAgIGlmIChoYXNVUkwpCi0gICAgICAgIGVuY29kZXItPmVu
Y29kZShkYXRhT2JqZWN0LT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGVuY29kZXIgPDwgZGF0
YU9iamVjdC0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBib29sIGhhc1VSSUxpc3QgPSBkYXRhT2Jq
ZWN0LT5oYXNVUklMaXN0KCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1VSSUxpc3QpOworICAg
IGVuY29kZXIgPDwgaGFzVVJJTGlzdDsKICAgICBpZiAoaGFzVVJJTGlzdCkKLSAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPnVyaUxpc3QoKSk7CisgICAgICAgIGVuY29kZXIgPDwg
ZGF0YU9iamVjdC0+dXJpTGlzdCgpOwogCiAgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3Qt
Pmhhc0ltYWdlKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBlbmNvZGVy
IDw8IGhhc0ltYWdlOwogICAgIGlmIChoYXNJbWFnZSkKICAgICAgICAgZW5jb2RlSW1hZ2UoZW5j
b2RlciwgZGF0YU9iamVjdC0+aW1hZ2UoKSk7CiB9CkBAIC0xNzIsMTUgKzE3MiwxNSBAQCBzdGF0
aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxEcmFnRGF0YT46OmVuY29kZShBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxE
cmFnRGF0YT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuY2xpZW50UG9zaXRp
b24oKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9uKCkpOwot
ICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4oZHJhZ0RhdGEuZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGRyYWdEYXRhLmZsYWdzKCkpKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRh
LmNsaWVudFBvc2l0aW9uKCk7CisgICAgZW5jb2RlciA8PCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlv
bigpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihkcmFnRGF0YS5mbGFncygpKTsKIAogICAgIERhdGFPYmplY3RHdGsqIHBsYXRmb3Jt
RGF0YSA9IGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpOwotICAgIGVuY29kZXItPmVuY29kZShzdGF0
aWNfY2FzdDxib29sPihwbGF0Zm9ybURhdGEpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGJvb2w+KHBsYXRmb3JtRGF0YSk7CiAgICAgaWYgKHBsYXRmb3JtRGF0YSkKICAgICAgICAgZW5j
b2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOwogfQpAQCAtMjE5LDEyICsyMTks
MTEgQEAgYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKEFyZwogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBlbmNvZGVHS2V5RmlsZShBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIsIEdLZXlGaWxlKiBrZXlGaWxlKQorc3RhdGljIHZvaWQgZW5jb2RlR0tleUZpbGUo
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBHS2V5RmlsZSoga2V5RmlsZSkKIHsKICAgICBnc2l6
ZSBkYXRhU2l6ZTsKICAgICBHT3duUHRyPGNoYXI+IGRhdGEoZ19rZXlfZmlsZV90b19kYXRhKGtl
eUZpbGUsICZkYXRhU2l6ZSwgMCkpOwotICAgIERhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmdldCgpKSwgZGF0YVNpemUpOwotICAgIGVu
Y29kZXItPmVuY29kZShkYXRhUmVmZXJlbmNlKTsKKyAgICBlbmNvZGVyIDw8IERhdGFSZWZlcmVu
Y2UocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YS5nZXQoKSksIGRhdGFTaXplKTsKIH0K
IAogc3RhdGljIGJvb2wgZGVjb2RlR0tleUZpbGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBH
T3duUHRyPEdLZXlGaWxlPiYga2V5RmlsZSkKQEAgLTI0NSw3ICsyNDQsNyBAQCBzdGF0aWMgYm9v
bCBkZWNvZGVHS2V5RmlsZShBcmd1bWVudERlY29kCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgR3RrUHJpbnRTZXR0aW5ncyogcHJp
bnRTZXR0aW5ncykKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgR3RrUHJp
bnRTZXR0aW5ncyogcHJpbnRTZXR0aW5ncykKIHsKICAgICBHT3duUHRyPEdLZXlGaWxlPiBrZXlG
aWxlKGdfa2V5X2ZpbGVfbmV3KCkpOwogICAgIGd0a19wcmludF9zZXR0aW5nc190b19rZXlfZmls
ZShwcmludFNldHRpbmdzLCBrZXlGaWxlLmdldCgpLCAiUHJpbnQgU2V0dGluZ3MiKTsKQEAgLTI2
OCw3ICsyNjcsNyBAQCBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdSCiAg
ICAgcmV0dXJuIHByaW50U2V0dGluZ3M7CiB9CiAKLXZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgR3RrUGFnZVNldHVwKiBwYWdlU2V0dXApCit2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIEd0a1BhZ2VTZXR1cCogcGFnZVNldHVwKQogewogICAgIEdPd25Q
dHI8R0tleUZpbGU+IGtleUZpbGUoZ19rZXlfZmlsZV9uZXcoKSk7CiAgICAgZ3RrX3BhZ2Vfc2V0
dXBfdG9fa2V5X2ZpbGUocGFnZVNldHVwLCBrZXlGaWxlLmdldCgpLCAiUGFnZSBTZXR1cCIpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaAko
cmV2aXNpb24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENv
ZGVyc0d0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsMTQgQEAgY2xhc3MgRHJhZ0Rh
dGE7CiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKIH07
CiAKLXZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIEd0a1ByaW50U2V0dGluZ3MqKTsKK3Zv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIEd0a1ByaW50U2V0dGluZ3MqKTsKIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4mKTsKIAotdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgR3RrUGFnZVNldHVwKik7Cit2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXImLCBHdGtQYWdlU2V0dXAqKTsKIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciosIEdSZWZQdHI8R3RrUGFnZVNldHVwPiYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBD
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVyc01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkNvcmVBcmd1
bWVudENvZGVyc01hYy5tbQkocmV2aXNpb24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9XZWJDb3JlQXJndW1lbnRDb2RlcnNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4
LDE2ICszOCwxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgQ29yZUlQ
QyB7CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9y
bURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
c291cmNlUmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNv
ZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBib29sIHJlcXVlc3RJc1ByZXNlbnQgPSBy
ZXNvdXJjZVJlcXVlc3QubnNVUkxSZXF1ZXN0KCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlcXVl
c3RJc1ByZXNlbnQpOworICAgIGVuY29kZXIgPDwgcmVxdWVzdElzUHJlc2VudDsKIAogICAgIGlm
ICghcmVxdWVzdElzUHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gZGljdGlvbmFyeShBZG9wdENGLCBXS05TVVJMUmVxdWVzdENyZWF0ZVNl
cmlhbGl6YWJsZVJlcHJlc2VudGF0aW9uKHJlc291cmNlUmVxdWVzdC5uc1VSTFJlcXVlc3QoKSwg
Q29yZUlQQzo6dG9rZW5OdWxsVHlwZVJlZigpKSk7Ci0gICAgQ29yZUlQQzo6ZW5jb2RlKCplbmNv
ZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2RlciwgZGlj
dGlvbmFyeS5nZXQoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+
OjpkZWNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKQEAgLTczLDE2ICs3MywxNiBAQCBib29sIEFyZ3VtZW50
Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
QXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNw
b25zZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZv
cm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzb3VyY2VSZXNwb25zZSkKIHsKICAgICBib29sIHJlc3BvbnNlSXNQcmVzZW50ID0gcmVzb3Vy
Y2VSZXNwb25zZS5uc1VSTFJlc3BvbnNlKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKHJlc3BvbnNl
SXNQcmVzZW50KTsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNlSXNQcmVzZW50OwogCiAgICAgaWYg
KCFyZXNwb25zZUlzUHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gZGljdGlvbmFyeShBZG9wdENGLCBXS05TVVJMUmVzcG9uc2VDcmVhdGVT
ZXJpYWxpemFibGVSZXByZXNlbnRhdGlvbihyZXNvdXJjZVJlc3BvbnNlLm5zVVJMUmVzcG9uc2Uo
KSwgQ29yZUlQQzo6dG9rZW5OdWxsVHlwZVJlZigpKSk7Ci0gICAgQ29yZUlQQzo6ZW5jb2RlKCpl
bmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2Rlciwg
ZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3Bv
bnNlPjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKQEAgLTExMywxMCArMTEzLDEwIEBAIHN0YXRp
YyBOU1N0cmluZyogbnNTdHJpbmcoY29uc3QgU3RyaW5nJiAKICAgICByZXR1cm4gc3RyaW5nLmlt
cGwoKSA/IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpyZWludGVycHJldF9jYXN0PGNv
bnN0IFVuaUNoYXIqPihzdHJpbmcuY2hhcmFjdGVycygpKSBsZW5ndGg6c3RyaW5nLmxlbmd0aCgp
XSA6IEAiIjsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNvZGVQ
bGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiByZXNvdXJjZUVycm9yKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJyb3I+OjplbmNv
ZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiByZXNvdXJjZUVycm9yKQogewogICAgIGJvb2wgZXJyb3JJc051bGwgPSByZXNvdXJjZUVy
cm9yLmlzTnVsbCgpOwotICAgIGVuY29kZXItPmVuY29kZShlcnJvcklzTnVsbCk7CisgICAgZW5j
b2RlciA8PCBlcnJvcklzTnVsbDsKIAogICAgIGlmIChlcnJvcklzTnVsbCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTI0LDEwICsxMjQsMTAgQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJy
b3I+OjplbmNvZAogICAgIE5TRXJyb3IgKm5zRXJyb3IgPSByZXNvdXJjZUVycm9yLm5zRXJyb3Io
KTsKIAogICAgIFN0cmluZyBkb21haW4gPSBbbnNFcnJvciBkb21haW5dOwotICAgIGVuY29kZXIt
PmVuY29kZShkb21haW4pOwotICAgIAorICAgIGVuY29kZXIgPDwgZG9tYWluOworCiAgICAgaW50
NjRfdCBjb2RlID0gW25zRXJyb3IgY29kZV07Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGNvZGUpOwor
ICAgIGVuY29kZXIgPDwgY29kZTsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHN0cmlu
Z1VzZXJJbmZvTWFwOwogCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VFcnJvcj46OmVuY29kCiAgICAgICAgIHN0cmluZ1VzZXJJbmZvTWFwLnNldChrZXks
IChOU1N0cmluZyAqKXZhbHVlKTsKICAgICAgICAgY29udGludWU7CiAgICAgfQotICAgIGVuY29k
ZXItPmVuY29kZShzdHJpbmdVc2VySW5mb01hcCk7CisgICAgZW5jb2RlciA8PCBzdHJpbmdVc2Vy
SW5mb01hcDsKIAogICAgIGlkIHBlZXJDZXJ0aWZpY2F0ZUNoYWluID0gW3VzZXJJbmZvIG9iamVj
dEZvcktleTpAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSJdOwogICAgIEFTU0VSVCgh
cGVlckNlcnRpZmljYXRlQ2hhaW4gfHwgW3BlZXJDZXJ0aWZpY2F0ZUNoYWluIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKFBsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvKChDRkFycmF5UmVmKXBlZXJDZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgZW5jb2Rl
ciA8PCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbygoQ0ZBcnJheVJlZilwZWVyQ2VydGlmaWNhdGVD
aGFpbik7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlUGxh
dGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvcikKQEAgLTE5NCwxMCArMTk0LDkgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNl
RXJyb3I+OjpkZWNvZAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8
S2V5cHJlc3NDb21tYW5kPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
S2V5cHJlc3NDb21tYW5kJiBrZXlwcmVzc0NvbW1hbmQpCit2b2lkIEFyZ3VtZW50Q29kZXI8S2V5
cHJlc3NDb21tYW5kPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgS2V5
cHJlc3NDb21tYW5kJiBrZXlwcmVzc0NvbW1hbmQpCiB7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGtl
eXByZXNzQ29tbWFuZC5jb21tYW5kTmFtZSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGtleXByZXNz
Q29tbWFuZC50ZXh0KTsKKyAgICBlbmNvZGVyIDw8IGtleXByZXNzQ29tbWFuZC5jb21tYW5kTmFt
ZSA8PCBrZXlwcmVzc0NvbW1hbmQudGV4dDsKIH0KICAgICAKIGJvb2wgQXJndW1lbnRDb2RlcjxL
ZXlwcmVzc0NvbW1hbmQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBLZXlwcmVz
c0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9Bcmd1bWVudENvZGVyc1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5jcHAJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTUgKzMzLDE1IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogdHlwZWRlZiBIYXNoTWFwPFN0
cmluZyAsIFZlY3Rvcjx1aW50OF90PiA+IE1JTUVEYXRhSGFzaE1hcDsKIAotdm9pZCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkRyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRHJhZ0Rh
dGEmIGRyYWdEYXRhKQogewotICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5jbGllbnRQb3Np
dGlvbigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKCh1aW50NjRfdClkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9w
ZXJhdGlvbk1hc2soKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKCh1aW50NjRfdClkcmFnRGF0YS5m
bGFncygpKTsKKyAgICBlbmNvZGVyIDw8IGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCk7CisgICAg
ZW5jb2RlciA8PCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpOworICAgIGVuY29kZXIgPDwgKHVp
bnQ2NF90KWRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpOworICAgIGVuY29k
ZXIgPDwgKHVpbnQ2NF90KWRyYWdEYXRhLmZsYWdzKCk7CiAKICAgICBib29sIGhhc1BsYXRmb3Jt
RGF0YSA9IGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpOwotICAgIGVuY29kZXItPmVuY29kZShoYXNQ
bGF0Zm9ybURhdGEpOworICAgIGVuY29kZXIgPDwgaGFzUGxhdGZvcm1EYXRhOwogICAgIGlmICgh
aGFzUGxhdGZvcm1EYXRhKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0LDcgKzU0LDcgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRhPjo6ZQogICAgICAgICB2ZGF0YS5hcHBl
bmQoKHVpbnQ4X3QqKShieXRlcy5kYXRhKCkpLCBieXRlcy5zaXplKCkpOwogICAgICAgICBtYXAu
YWRkKFN0cmluZyhmb3JtYXRzW2ldKSwgdmRhdGEpOwogICAgIH0KLSAgICBlbmNvZGVyLT5lbmNv
ZGUobWFwKTsKKyAgICBlbmNvZGVyIDw8IG1hcDsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkRyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRHJhZ0Rh
dGEmIGRyYWdEYXRhKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0FyZ3VtZW50Q29k
ZXJzUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvQXJndW1lbnRD
b2RlcnNRdC5oCShyZXZpc2lvbiAxMzMwNzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
QXJndW1lbnRDb2RlcnNRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKIAog
bmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYpOwordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdl
YkNvcmU6OkRyYWdEYXRhJik7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RHJhZ0RhdGE+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENv
ZGVyc1F0LmNwcAkocmV2aXNpb24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAot
dm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRmb3JtRGF0YShB
cmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0KQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZVBsYXRm
b3JtRGF0YShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0KQogewogfQogCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjpkZWMKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VSZXNwb25zZT46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVuY29kZXIqIGVuY29k
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2UpCit2b2lkIEFyZ3Vt
ZW50Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmVuY29kZVBsYXRmb3JtRGF0YShBcmd1bWVudEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2Up
CiB7CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVz
cG9uc2U+OjpkZQogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZW5j
b2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6
ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAJKHJl
dmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9zb3VwL1dlYkNvcmVBcmd1
bWVudENvZGVyc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKLXZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3Zv
aWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVx
dWVzdCkKIHsKLSAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlc291
cmNlUmVxdWVzdC5zb3VwTWVzc2FnZUZsYWdzKCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQzMl90PihyZXNvdXJjZVJlcXVlc3Quc291cE1lc3NhZ2VGbGFncygpKTsKIH0KIAog
Ym9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3JtRGF0YShB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
KQpAQCAtNTEsOSArNTEsOSBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6
ZGVjCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjplbmNvZGVQ
bGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNvdXJjZVJlc3BvbnNlKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9u
c2U+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQogewotICAgIGVuY29kZXItPmVuY29k
ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVzb3VyY2VSZXNwb25zZS5zb3VwTWVzc2FnZUZsYWdz
KCkpKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZXNvdXJjZVJlc3Bv
bnNlLnNvdXBNZXNzYWdlRmxhZ3MoKSk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJj
ZVJlc3BvbnNlPjo6ZGVjb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
UmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKQEAgLTY2LDcgKzY2LDcgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVzcG9uc2U+OjpkZQogfQogCiAKLXZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZUVycm9yPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlRXJy
b3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViQ29yZUFy
Z3VtZW50Q29kZXJzV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
d2luL1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViQ29yZUFyZ3VtZW50Q29kZXJzV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDE3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogLy8g
RklYTUU6IFRoZXNlIGNvZGVycyBzaG91bGQgcmVhbGx5IGdvIGluIGEgV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ0ZOZXR3b3JrIGZpbGUuCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVl
c3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlcXVlc3Q+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICNpZiBVU0UoQ0ZO
RVRXT1JLKQogICAgIGJvb2wgcmVxdWVzdElzUHJlc2VudCA9IHJlc291cmNlUmVxdWVzdC5jZlVS
TFJlcXVlc3QoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVxdWVzdElzUHJlc2VudCk7CisgICAg
ZW5jb2RlciA8PCByZXF1ZXN0SXNQcmVzZW50OwogCiAgICAgaWYgKCFyZXF1ZXN0SXNQcmVzZW50
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkaWN0
aW9uYXJ5KEFkb3B0Q0YsIHdrQ0ZVUkxSZXF1ZXN0Q3JlYXRlU2VyaWFsaXphYmxlUmVwcmVzZW50
YXRpb24ocmVzb3VyY2VSZXF1ZXN0LmNmVVJMUmVxdWVzdCgpLCBDb3JlSVBDOjp0b2tlbk51bGxU
eXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoKmVuY29kZXIsIGRpY3Rpb25hcnkuZ2V0
KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBkaWN0aW9uYXJ5LmdldCgpKTsKICNl
bmRpZgogfQogCkBAIC05NSwxNyArOTUsMTcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNl
UmVxdWVzdD46OmRlYwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlc3BvbnNl
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZVJlc3BvbnNlPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKIHsKICNpZiBVU0Uo
Q0ZORVRXT1JLKQogICAgIGJvb2wgcmVzcG9uc2VJc1ByZXNlbnQgPSByZXNvdXJjZVJlc3BvbnNl
LmNmVVJMUmVzcG9uc2UoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUocmVzcG9uc2VJc1ByZXNlbnQp
OworICAgIGVuY29kZXIgPDwgcmVzcG9uc2VJc1ByZXNlbnQ7CiAKICAgICBpZiAoIXJlc3BvbnNl
SXNQcmVzZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBkaWN0aW9uYXJ5KEFkb3B0Q0YsIHdrQ0ZVUkxSZXNwb25zZUNyZWF0ZVNlcmlhbGl6YWJs
ZVJlcHJlc2VudGF0aW9uKHJlc291cmNlUmVzcG9uc2UuY2ZVUkxSZXNwb25zZSgpLCBDb3JlSVBD
Ojp0b2tlbk51bGxUeXBlUmVmKCkpKTsKLSAgICBDb3JlSVBDOjplbmNvZGUoKmVuY29kZXIsIGRp
Y3Rpb25hcnkuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBkaWN0aW9uYXJ5
LmdldCgpKTsKICNlbmRpZgogfQogCkBAIC0xMzcsMTAgKzEzNywxMCBAQCBib29sIEFyZ3VtZW50
Q29kZXI8UmVzb3VyY2VSZXNwb25zZT46OmRlCiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPFJl
c291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQordm9pZCBBcmd1bWVudENvZGVy
PFJlc291cmNlRXJyb3I+OjplbmNvZGVQbGF0Zm9ybURhdGEoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQogewogI2lmIFVTRShDRk5F
VFdPUkspCi0gICAgZW5jb2Rlci0+ZW5jb2RlKFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKHJlc291
cmNlRXJyb3IuY2VydGlmaWNhdGUoKSkpOworICAgIGVuY29kZXIgPDwgUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8ocmVzb3VyY2VFcnJvci5jZXJ0aWZpY2F0ZSgpKTsKICNlbmRpZgogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRGVjb2RlckFkYXB0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRh
cHRlci5jcHAJKHJldmlzaW9uIDEzMzA3NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgRGVjb2RlckFkYXB0ZXI6OkRlY29kZXJBZGFwdGVyKGNvbnN0IHVpbgogYm9vbCBEZWNvZGVy
QWRhcHRlcjo6ZGVjb2RlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcykKIHsKICAgICBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7Ci0gICAgaWYgKCFtX2RlY29kZXItPmRl
Y29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWZlcmVuY2UpKQorICAgIGlmICghbV9k
ZWNvZGVyLT5kZWNvZGUoZGF0YVJlZmVyZW5jZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGJ5dGVzID0gZGF0YVJlZmVyZW5jZS52ZWN0b3IoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcAkocmV2aXNp
b24gMTMzMDc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJB
ZGFwdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlIEVuY29kZXJBZGFwdGVyOjpkCiAKIHZvaWQgRW5jb2RlckFkYXB0ZXI6OmVuY29k
ZUJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBtX2VuY29k
ZXItPmVuY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KENvcmVJUEM6OkRhdGFSZWZlcmVuY2Uo
Ynl0ZXMsIHNpemUpKTsKKyAgICBtX2VuY29kZXItPmVuY29kZShDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlKGJ5dGVzLCBzaXplKSk7CiB9CiAKIHZvaWQgRW5jb2RlckFkYXB0ZXI6OmVuY29kZUJvb2wo
Ym9vbCB2YWx1ZSkK
</data>
<flag name="review"
          id="185727"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>