<?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>8875</bug_id>
          
          <creation_ts>2006-05-12 13:30:00 -0700</creation_ts>
          <short_desc>Split out html_headimpl.* into separate files (one per class)</short_desc>
          <delta_ts>2006-05-12 13:39:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42128</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-12 13:30:00 -0700</bug_when>
    <thetext>Also fix the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42129</commentid>
    <comment_count>1</comment_count>
      <attachid>8269</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-12 13:32:01 -0700</bug_when>
    <thetext>Created attachment 8269
Build fix and file split.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42130</commentid>
    <comment_count>2</comment_count>
      <attachid>8269</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-05-12 13:38:45 -0700</bug_when>
    <thetext>Comment on attachment 8269
Build fix and file split.

r=mee</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8269</attachid>
            <date>2006-05-12 13:32:01 -0700</date>
            <delta_ts>2006-05-12 13:38:45 -0700</delta_ts>
            <desc>Build fix and file split.</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>281030</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pz
L2tqc19jc3MuY3BwCShyZXZpc2lvbiAxNDMyNSkKKysrIGJpbmRpbmdzL2pzL2tqc19jc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiY3NzX3J1bGVpbXBs
LmgiCiAjaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzX3ZhbHVl
aW1wbC5oIgotI2luY2x1ZGUgImh0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVsZW1l
bnQKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgog
CiAjaW5jbHVkZSAia2pzX2Nzcy5sdXQuaCIKSW5kZXg6IGJpbmRpbmdzL2pzL2tqc19odG1sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDE0MzI3
KQorKysgYmluZGluZ3MvanMva2pzX2h0bWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MQmFzZUZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKQEAgLTM1LDEzICszNiwyNCBAQAog
I2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5r
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxP
YmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
U3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNvbEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRh
YmxlUm93RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTQ5LDExICs2MSw5IEBACiAjaW5jbHVkZSAiZG9tMl9l
dmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9iYXNlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxf
YmxvY2tpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0bWxf
aW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9pbmxpbmVpbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bF9saXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAia2pz
X2Nzcy5oIgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKICNpbmNsdWRlICJranNfcHJveHkuaCIK
QEAgLTEzNjgsNyArMTM3OCw3IEBAIEpTVmFsdWUgKkpTSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIo
RXhlY1MKIAogSlNWYWx1ZSAqSlNIVE1MRWxlbWVudDo6aGVhZEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgICBIVE1MSGVhZEVsZW1lbnQgJmhlYWQgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50Kj4oaW1wbCgpKTsKKyAgICBIVE1MSGVhZEVsZW1lbnQm
IGhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBpZiAo
dG9rZW4gPT0gSGVhZFByb2ZpbGUpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyhoZWFkLnByb2Zp
bGUoKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMzc2LDcgKzEzODYsNyBAQCBK
U1ZhbHVlICpKU0hUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTCiAKIEpTVmFsdWUgKkpTSFRN
TEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
Ci0gICAgSFRNTExpbmtFbGVtZW50ICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVu
dCo+KGltcGwoKSk7CisgICAgSFRNTExpbmtFbGVtZW50JiBsaW5rID0gKnN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICBj
YXNlIExpbmtEaXNhYmxlZDoKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4obGluay5kaXNh
YmxlZCgpKTsKSW5kZXg6IGJpbmRpbmdzL29iamMvRE9NQ1NTLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJp
bmRpbmdzL29iamMvRE9NQ1NTLm1tCShyZXZpc2lvbiAxNDMyNSkKKysrIGJpbmRpbmdzL29iamMv
RE9NQ1NTLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2ltcG9ydCAiRE9N
V2luZG93LmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJh
cy5oIgorI2ltcG9ydCAiSFRNTExpbmtFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MU3R5bGVFbGVt
ZW50LmgiCiAjaW1wb3J0ICJjc3NfcnVsZWltcGwuaCIKKyNpbXBvcnQgImNzc19zdHlsZXNoZWV0
aW1wbC5oIgogI2ltcG9ydCAiZG9tX3htbGltcGwuaCIKLSNpbXBvcnQgImh0bWxfaGVhZGltcGwu
aCIKICNpbXBvcnQgPG9iamMvb2JqYy1jbGFzcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTgzLDcgKzg1LDcgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogLSAo
dm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxT
dHlsZVNoZWV0ICo+KF9pbnRlcm5hbCktPmRlcmVmKCk7CisgICAgICAgIERPTV9jYXN0PFN0eWxl
U2hlZXQqPihfaW50ZXJuYWwpLT5kZXJlZigpOwogICAgIH0KICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CkBAIC05MSwxNCArOTMsMTQgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3Owog
LSAodm9pZClmaW5hbGl6ZQogewogICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nh
c3Q8U3R5bGVTaGVldCAqPihfaW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxT
dHlsZVNoZWV0Kj4oX2ludGVybmFsKS0+ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGZpbmFs
aXplXTsKIH0KIAogLSAoU3R5bGVTaGVldCAqKV9ET01TdHlsZVNoZWV0CiB7Ci0gICAgcmV0dXJu
IERPTV9jYXN0PFN0eWxlU2hlZXQgKj4oX2ludGVybmFsKTsKKyAgICByZXR1cm4gRE9NX2Nhc3Q8
U3R5bGVTaGVldCo+KF9pbnRlcm5hbCk7CiB9CiAKIC0gKE5TU3RyaW5nICopdHlwZQpAQCAtMTQ4
LDcgKzE1MCw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKGlkKV9pbml0
V2l0aFN0eWxlU2hlZXQ6KFN0eWxlU2hlZXQgKilpbXBsCiB7CiAgICAgW3N1cGVyIF9pbml0XTsK
LSAgICBfaW50ZXJuYWwgPSBET01fY2FzdDxET01PYmplY3RJbnRlcm5hbCAqPihpbXBsKTsKKyAg
ICBfaW50ZXJuYWwgPSBET01fY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwogICAgIGlt
cGwtPnJlZigpOwogICAgIGFkZERPTVdyYXBwZXIoc2VsZiwgaW1wbCk7CiAgICAgcmV0dXJuIHNl
bGY7CkBAIC0xODIsNyArMTg0LDcgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3Owog
LSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2Fz
dDxTdHlsZVNoZWV0TGlzdCAqPihfaW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2Fz
dDxTdHlsZVNoZWV0TGlzdCo+KF9pbnRlcm5hbCktPmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBl
ciBkZWFsbG9jXTsKIH0KQEAgLTE5MCwxNCArMTkyLDE0IEBAIHR5cGVkZWYgRE9NV2luZG93IEFi
c3RyYWN0VmlldzsKIC0gKHZvaWQpZmluYWxpemUKIHsKICAgICBpZiAoX2ludGVybmFsKSB7Ci0g
ICAgICAgIERPTV9jYXN0PFN0eWxlU2hlZXRMaXN0ICo+KF9pbnRlcm5hbCktPmRlcmVmKCk7Cisg
ICAgICAgIERPTV9jYXN0PFN0eWxlU2hlZXRMaXN0Kj4oX2ludGVybmFsKS0+ZGVyZWYoKTsKICAg
ICB9CiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KIAogLSAoU3R5bGVTaGVldExpc3QgKilfc3R5
bGVTaGVldExpc3QKIHsKLSAgICByZXR1cm4gRE9NX2Nhc3Q8U3R5bGVTaGVldExpc3QgKj4oX2lu
dGVybmFsKTsKKyAgICByZXR1cm4gRE9NX2Nhc3Q8U3R5bGVTaGVldExpc3QqPihfaW50ZXJuYWwp
OwogfQogCiAtICh1bnNpZ25lZClsZW5ndGgKQEAgLTIxNyw3ICsyMTksNyBAQCB0eXBlZGVmIERP
TVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAtIChpZClfaW5pdFdpdGhTdHlsZVNoZWV0TGlzdDooU3R5
bGVTaGVldExpc3QgKilpbXBsCiB7CiAgICAgW3N1cGVyIF9pbml0XTsKLSAgICBfaW50ZXJuYWwg
PSBET01fY2FzdDxET01PYmplY3RJbnRlcm5hbCAqPihpbXBsKTsKKyAgICBfaW50ZXJuYWwgPSBE
T01fY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwogICAgIGltcGwtPnJlZigpOwogICAg
IGFkZERPTVdyYXBwZXIoc2VsZiwgaW1wbCk7CiAgICAgcmV0dXJuIHNlbGY7CkBAIC0yNDUsNyAr
MjQ3LDcgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogCiAtIChDU1NTdHlsZVNo
ZWV0ICopX0NTU1N0eWxlU2hlZXQKIHsKLSAgICByZXR1cm4gRE9NX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCAqPihfaW50ZXJuYWwpOworICAgIHJldHVybiBET01fY2FzdDxDU1NTdHlsZVNoZWV0Kj4oX2lu
dGVybmFsKTsKIH0KIAogLSAoRE9NQ1NTUnVsZSAqKW93bmVyUnVsZQpAQCAtMjkyLDcgKzI5NCw3
IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKHZvaWQpZGVhbGxvYwogewog
ICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8TWVkaWFMaXN0ICo+KF9pbnRl
cm5hbCktPmRlcmVmKCk7CisgICAgICAgIERPTV9jYXN0PE1lZGlhTGlzdCo+KF9pbnRlcm5hbCkt
PmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTMwMCwxNCArMzAy
LDE0IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKHZvaWQpZmluYWxpemUK
IHsKICAgICBpZiAoX2ludGVybmFsKSB7Ci0gICAgICAgIERPTV9jYXN0PE1lZGlhTGlzdCAqPihf
aW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxNZWRpYUxpc3QqPihfaW50ZXJu
YWwpLT5kZXJlZigpOwogICAgIH0KICAgICBbc3VwZXIgZmluYWxpemVdOwogfQogCiAtIChNZWRp
YUxpc3QgKilfbWVkaWFMaXN0CiB7Ci0gICAgcmV0dXJuIERPTV9jYXN0PE1lZGlhTGlzdCAqPihf
aW50ZXJuYWwpOworICAgIHJldHVybiBET01fY2FzdDxNZWRpYUxpc3QqPihfaW50ZXJuYWwpOwog
fQogCiAtIChOU1N0cmluZyAqKW1lZGlhVGV4dApAQCAtMzQ3LDcgKzM0OSw3IEBAIHR5cGVkZWYg
RE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKGlkKV9pbml0V2l0aE1lZGlhTGlzdDooTWVkaWFM
aXN0ICopaW1wbAogewogICAgIFtzdXBlciBfaW5pdF07Ci0gICAgX2ludGVybmFsID0gRE9NX2Nh
c3Q8RE9NT2JqZWN0SW50ZXJuYWwgKj4oaW1wbCk7CisgICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8
RE9NT2JqZWN0SW50ZXJuYWwqPihpbXBsKTsKICAgICBpbXBsLT5yZWYoKTsKICAgICBhZGRET01X
cmFwcGVyKHNlbGYsIGltcGwpOwogICAgIHJldHVybiBzZWxmOwpAQCAtMzc2LDcgKzM3OCw3IEBA
IHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKHZvaWQpZGVhbGxvYwogewogICAg
IGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q1NTUnVsZUxpc3QgKj4oX2ludGVy
bmFsKS0+ZGVyZWYoKTsKKyAgICAgICAgRE9NX2Nhc3Q8Q1NTUnVsZUxpc3QqPihfaW50ZXJuYWwp
LT5kZXJlZigpOwogICAgIH0KICAgICBbc3VwZXIgZGVhbGxvY107CiB9CkBAIC0zODQsMTQgKzM4
NiwxNCBAQCB0eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAtICh2b2lkKWZpbmFsaXpl
CiB7CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxDU1NSdWxlTGlzdCAq
PihfaW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxDU1NSdWxlTGlzdCo+KF9p
bnRlcm5hbCktPmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CiAKIC0g
KENTU1J1bGVMaXN0ICopX3J1bGVMaXN0CiB7Ci0gICAgcmV0dXJuIERPTV9jYXN0PENTU1J1bGVM
aXN0ICo+KF9pbnRlcm5hbCk7CisgICAgcmV0dXJuIERPTV9jYXN0PENTU1J1bGVMaXN0Kj4oX2lu
dGVybmFsKTsKIH0KIAogLSAodW5zaWduZWQpbGVuZ3RoCkBAIC00MTEsNyArNDEzLDcgQEAgdHlw
ZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogLSAoaWQpX2luaXRXaXRoUnVsZUxpc3Q6KENT
U1J1bGVMaXN0ICopaW1wbAogewogICAgIFtzdXBlciBfaW5pdF07Ci0gICAgX2ludGVybmFsID0g
RE9NX2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwgKj4oaW1wbCk7CisgICAgX2ludGVybmFsID0gRE9N
X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihpbXBsKTsKICAgICBpbXBsLT5yZWYoKTsKICAgICBh
ZGRET01XcmFwcGVyKHNlbGYsIGltcGwpOwogICAgIHJldHVybiBzZWxmOwpAQCAtNDQwLDcgKzQ0
Miw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIC0gKHZvaWQpZGVhbGxvYwog
ewogICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q1NTUnVsZSAqPihfaW50
ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxDU1NSdWxlKj4oX2ludGVybmFsKS0+
ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNDQ4LDE0ICs0NTAs
MTQgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogLSAodm9pZClmaW5hbGl6ZQog
ewogICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q1NTUnVsZSAqPihfaW50
ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxDU1NSdWxlKj4oX2ludGVybmFsKS0+
ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KIAogLSAoQ1NTUnVsZSAq
KV9ydWxlCiB7Ci0gICAgcmV0dXJuIERPTV9jYXN0PENTU1J1bGUgKj4oX2ludGVybmFsKTsKKyAg
ICByZXR1cm4gRE9NX2Nhc3Q8Q1NTUnVsZSo+KF9pbnRlcm5hbCk7CiB9CiAKIC0gKHVuc2lnbmVk
IHNob3J0KXR5cGUKQEAgLTQ5MCw3ICs0OTIsNyBAQCB0eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFj
dFZpZXc7CiAtIChpZClfaW5pdFdpdGhSdWxlOihDU1NSdWxlICopaW1wbAogewogICAgIFtzdXBl
ciBfaW5pdF07Ci0gICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwgKj4o
aW1wbCk7CisgICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihpbXBs
KTsKICAgICBpbXBsLT5yZWYoKTsKICAgICBhZGRET01XcmFwcGVyKHNlbGYsIGltcGwpOwogICAg
IHJldHVybiBzZWxmOwpAQCAtNTQyLDcgKzU0NCw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3Ry
YWN0VmlldzsKIAogLSAoQ1NTU3R5bGVSdWxlICopX3N0eWxlUnVsZQogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUgKj4oRE9NX2Nhc3Q8Q1NTUnVsZSAqPihfaW50ZXJuYWwp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oRE9NX2Nhc3Q8Q1NTUnVs
ZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKXNlbGVjdG9yVGV4dApAQCAtNTY5
LDcgKzU3MSw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIAogLSAoQ1NTTWVk
aWFSdWxlICopX21lZGlhUnVsZQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1
bGUgKj4oRE9NX2Nhc3Q8Q1NTUnVsZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oRE9NX2Nhc3Q8Q1NTUnVsZSo+KF9pbnRlcm5hbCkpOwogfQog
CiAtIChET01NZWRpYUxpc3QgKiltZWRpYQpAQCAtNjAxLDcgKzYwMyw3IEBAIHR5cGVkZWYgRE9N
V2luZG93IEFic3RyYWN0VmlldzsKIAogLSAoQ1NTRm9udEZhY2VSdWxlICopX2ZvbnRGYWNlUnVs
ZQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUgKj4oRE9NX2Nhc3Q8
Q1NTUnVsZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTRm9udEZh
Y2VSdWxlKj4oRE9NX2Nhc3Q8Q1NTUnVsZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChET01DU1NT
dHlsZURlY2xhcmF0aW9uICopc3R5bGUKQEAgLTYxOCw3ICs2MjAsNyBAQCB0eXBlZGVmIERPTVdp
bmRvdyBBYnN0cmFjdFZpZXc7CiAKIC0gKENTU1BhZ2VSdWxlICopX3BhZ2VSdWxlCiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlICo+KERPTV9jYXN0PENTU1J1bGUgKj4oX2lu
dGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4oRE9NX2Nhc3Q8
Q1NTUnVsZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKXNlbGVjdG9yVGV4dApA
QCAtNjQ1LDcgKzY0Nyw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIAogLSAo
Q1NTSW1wb3J0UnVsZSAqKV9pbXBvcnRSdWxlCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENT
U0ltcG9ydFJ1bGUgKj4oRE9NX2Nhc3Q8Q1NTUnVsZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KERPTV9jYXN0PENTU1J1bGUqPihfaW50ZXJu
YWwpKTsKIH0KIAogLSAoRE9NTWVkaWFMaXN0ICopbWVkaWEKQEAgLTY3Miw3ICs2NzQsNyBAQCB0
eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAKIC0gKENTU0NoYXJzZXRSdWxlICopX2lt
cG9ydFJ1bGUKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUgKj4oRE9N
X2Nhc3Q8Q1NTUnVsZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NT
Q2hhcnNldFJ1bGUqPihET01fY2FzdDxDU1NSdWxlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5T
U3RyaW5nICopZW5jb2RpbmcKQEAgLTY5Nyw3ICs2OTksNyBAQCB0eXBlZGVmIERPTVdpbmRvdyBB
YnN0cmFjdFZpZXc7CiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAoX2ludGVybmFsKSB7Ci0g
ICAgICAgIERPTV9jYXN0PENTU1N0eWxlRGVjbGFyYXRpb24gKj4oX2ludGVybmFsKS0+ZGVyZWYo
KTsKKyAgICAgICAgRE9NX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KF9pbnRlcm5hbCktPmRl
cmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTcwNSw3ICs3MDcsNyBA
QCB0eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAtICh2b2lkKWZpbmFsaXplCiB7CiAg
ICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9u
ICo+KF9pbnRlcm5hbCktPmRlcmVmKCk7CisgICAgICAgIERPTV9jYXN0PENTU1N0eWxlRGVjbGFy
YXRpb24qPihfaW50ZXJuYWwpLT5kZXJlZigpOwogICAgIH0KICAgICBbc3VwZXIgZmluYWxpemVd
OwogfQpAQCAtNzg5LDcgKzc5MSw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsK
IC0gKGlkKV9pbml0V2l0aFN0eWxlRGVjbGFyYXRpb246KENTU1N0eWxlRGVjbGFyYXRpb24gKilp
bXBsCiB7CiAgICAgW3N1cGVyIF9pbml0XTsKLSAgICBfaW50ZXJuYWwgPSBET01fY2FzdDxET01P
YmplY3RJbnRlcm5hbCAqPihpbXBsKTsKKyAgICBfaW50ZXJuYWwgPSBET01fY2FzdDxET01PYmpl
Y3RJbnRlcm5hbCo+KGltcGwpOwogICAgIGltcGwtPnJlZigpOwogICAgIGFkZERPTVdyYXBwZXIo
c2VsZiwgaW1wbCk7CiAgICAgcmV0dXJuIHNlbGY7CkBAIC04MTAsNyArODEyLDcgQEAgdHlwZWRl
ZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogCiAtIChDU1NTdHlsZURlY2xhcmF0aW9uICopX3N0
eWxlRGVjbGFyYXRpb24KIHsKLSAgICByZXR1cm4gRE9NX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlv
biAqPihfaW50ZXJuYWwpOworICAgIHJldHVybiBET01fY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9u
Kj4oX2ludGVybmFsKTsKIH0KIAogQGVuZApAQCAtODIzLDcgKzgyNSw3IEBAIHR5cGVkZWYgRE9N
V2luZG93IEFic3RyYWN0VmlldzsKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChfaW50ZXJu
YWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q1NTVmFsdWUgKj4oX2ludGVybmFsKS0+ZGVyZWYoKTsK
KyAgICAgICAgRE9NX2Nhc3Q8Q1NTVmFsdWUqPihfaW50ZXJuYWwpLT5kZXJlZigpOwogICAgIH0K
ICAgICBbc3VwZXIgZGVhbGxvY107CiB9CkBAIC04MzEsMTQgKzgzMywxNCBAQCB0eXBlZGVmIERP
TVdpbmRvdyBBYnN0cmFjdFZpZXc7CiAtICh2b2lkKWZpbmFsaXplCiB7CiAgICAgaWYgKF9pbnRl
cm5hbCkgewotICAgICAgICBET01fY2FzdDxDU1NWYWx1ZSAqPihfaW50ZXJuYWwpLT5kZXJlZigp
OworICAgICAgICBET01fY2FzdDxDU1NWYWx1ZSo+KF9pbnRlcm5hbCktPmRlcmVmKCk7CiAgICAg
fQogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CiAKIC0gKENTU1ZhbHVlICopX3ZhbHVlCiB7Ci0g
ICAgcmV0dXJuIERPTV9jYXN0PENTU1ZhbHVlICo+KF9pbnRlcm5hbCk7CisgICAgcmV0dXJuIERP
TV9jYXN0PENTU1ZhbHVlKj4oX2ludGVybmFsKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljc3NUZXh0
CkBAIC04NjMsNyArODY1LDcgQEAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogLSAo
aWQpX2luaXRXaXRoVmFsdWU6KENTU1ZhbHVlICopaW1wbAogewogICAgIFtzdXBlciBfaW5pdF07
Ci0gICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwgKj4oaW1wbCk7Cisg
ICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPihpbXBsKTsKICAgICBp
bXBsLT5yZWYoKTsKICAgICBhZGRET01XcmFwcGVyKHNlbGYsIGltcGwpOwogICAgIHJldHVybiBz
ZWxmOwpAQCAtOTExLDcgKzkxMyw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsK
IAogLSAoQ1NTUHJpbWl0aXZlVmFsdWUgKilfcHJpbWl0aXZlVmFsdWUKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUgKj4oRE9NX2Nhc3Q8Q1NTVmFsdWUgKj4oX2lu
dGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oRE9N
X2Nhc3Q8Q1NTVmFsdWUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAodW5zaWduZWQgc2hvcnQpcHJp
bWl0aXZlVHlwZQpAQCAtOTY4LDcgKzk3MCw3IEBAIHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0
VmlldzsKIAogLSAoQ1NTVmFsdWVMaXN0ICopX3ZhbHVlTGlzdAogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NWYWx1ZUxpc3QgKj4oRE9NX2Nhc3Q8Q1NTVmFsdWUgKj4oX2ludGVybmFsKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KERPTV9jYXN0PENTU1ZhbHVl
Kj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKHVuc2lnbmVkKWxlbmd0aApAQCAtOTkyLDcgKzk5NCw3
IEBAIGlkIGdldFdyYXBwZXJGb3JSR0IoUkdCQTMyIHZhbHVlKQogewogICAgIGlmICghd3JhcHBl
ckNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoaWQpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUod3JhcHBlckNhY2hlLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4odmFs
dWUpKTsKKyAgICByZXR1cm4gKGlkKUNGRGljdGlvbmFyeUdldFZhbHVlKHdyYXBwZXJDYWNoZSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4odmFsdWUpKTsKIH0KIAogdm9pZCBzZXRXcmFw
cGVyRm9yUkdCKGlkIHdyYXBwZXIsIFJHQkEzMiB2YWx1ZSkKQEAgLTEwMDIsMTQgKzEwMDQsMTQg
QEAgdm9pZCBzZXRXcmFwcGVyRm9yUkdCKGlkIHdyYXBwZXIsIFJHQkEzMgogICAgICAgICAvLyBm
cm9tIHRoZSBjYWNoZSBpbiBkZWFsbG9jIG1ldGhvZHMuCiAgICAgICAgIHdyYXBwZXJDYWNoZSA9
IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoTlVMTCwgMCwgTlVMTCwgTlVMTCk7CiAgICAgfQot
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHdyYXBwZXJDYWNoZSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KHZhbHVlKSwgd3JhcHBlcik7CisgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
d3JhcHBlckNhY2hlLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPih2YWx1ZSksIHdyYXBw
ZXIpOwogfQogCiB2b2lkIHJlbW92ZVdyYXBwZXJGb3JSR0IoUkdCQTMyIHZhbHVlKQogewogICAg
IGlmICghd3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVt
b3ZlVmFsdWUod3JhcHBlckNhY2hlLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4odmFs
dWUpKTsKKyAgICBDRkRpY3Rpb25hcnlSZW1vdmVWYWx1ZSh3cmFwcGVyQ2FjaGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHZhbHVlKSk7CiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBET01S
R0JDb2xvcgpAQCAtMTA1OSw3ICsxMDYxLDcgQEAgdm9pZCByZW1vdmVXcmFwcGVyRm9yUkdCKFJH
QkEzMiB2YWx1ZSkKIC0gKGlkKV9pbml0V2l0aFJHQjooUkdCQTMyKXZhbHVlCiB7CiAgICAgW3N1
cGVyIF9pbml0XTsKLSAgICBfaW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdElu
dGVybmFsICo+KHZhbHVlKTsKKyAgICBfaW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9i
amVjdEludGVybmFsKj4odmFsdWUpOwogICAgIHNldFdyYXBwZXJGb3JSR0Ioc2VsZiwgdmFsdWUp
OwogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMTEwNyw3ICsxMTA5LDcgQEAgdm9pZCByZW1vdmVX
cmFwcGVyRm9yUkdCKFJHQkEzMiB2YWx1ZSkKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChf
aW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8UmVjdEltcGwgKj4oX2ludGVybmFsKS0+ZGVy
ZWYoKTsKKyAgICAgICAgRE9NX2Nhc3Q8UmVjdEltcGwqPihfaW50ZXJuYWwpLT5kZXJlZigpOwog
ICAgIH0KICAgICBbc3VwZXIgZGVhbGxvY107CiB9CkBAIC0xMTE1LDE0ICsxMTE3LDE0IEBAIHZv
aWQgcmVtb3ZlV3JhcHBlckZvclJHQihSR0JBMzIgdmFsdWUpCiAtICh2b2lkKWZpbmFsaXplCiB7
CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxSZWN0SW1wbCAqPihfaW50
ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxSZWN0SW1wbCo+KF9pbnRlcm5hbCkt
PmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CiAKIC0gKFJlY3RJbXBs
ICopX3JlY3QKIHsKLSAgICByZXR1cm4gRE9NX2Nhc3Q8UmVjdEltcGwgKj4oX2ludGVybmFsKTsK
KyAgICByZXR1cm4gRE9NX2Nhc3Q8UmVjdEltcGwqPihfaW50ZXJuYWwpOwogfQogCiAtIChET01D
U1NQcmltaXRpdmVWYWx1ZSAqKXRvcApAQCAtMTE1Nyw3ICsxMTU5LDcgQEAgdm9pZCByZW1vdmVX
cmFwcGVyRm9yUkdCKFJHQkEzMiB2YWx1ZSkKIC0gKGlkKV9pbml0V2l0aFJlY3Q6KFJlY3RJbXBs
ICopaW1wbAogewogICAgIFtzdXBlciBfaW5pdF07Ci0gICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8
RE9NT2JqZWN0SW50ZXJuYWwgKj4oaW1wbCk7CisgICAgX2ludGVybmFsID0gRE9NX2Nhc3Q8RE9N
T2JqZWN0SW50ZXJuYWwqPihpbXBsKTsKICAgICBpbXBsLT5yZWYoKTsKICAgICBhZGRET01XcmFw
cGVyKHNlbGYsIGltcGwpOwogICAgIHJldHVybiBzZWxmOwpAQCAtMTE4Niw3ICsxMTg4LDcgQEAg
dm9pZCByZW1vdmVXcmFwcGVyRm9yUkdCKFJHQkEzMiB2YWx1ZSkKIC0gKHZvaWQpZGVhbGxvYwog
ewogICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q291bnRlciAqPihfaW50
ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxDb3VudGVyKj4oX2ludGVybmFsKS0+
ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMTE5NCwxNCArMTE5
NiwxNCBAQCB2b2lkIHJlbW92ZVdyYXBwZXJGb3JSR0IoUkdCQTMyIHZhbHVlKQogLSAodm9pZClm
aW5hbGl6ZQogewogICAgIGlmIChfaW50ZXJuYWwpIHsKLSAgICAgICAgRE9NX2Nhc3Q8Q291bnRl
ciAqPihfaW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxDb3VudGVyKj4oX2lu
dGVybmFsKS0+ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KIAogLSAo
Q291bnRlciAqKV9jb3VudGVyCiB7Ci0gICAgcmV0dXJuIERPTV9jYXN0PENvdW50ZXIgKj4oX2lu
dGVybmFsKTsKKyAgICByZXR1cm4gRE9NX2Nhc3Q8Q291bnRlcio+KF9pbnRlcm5hbCk7CiB9CiAK
IC0gKE5TU3RyaW5nICopaWRlbnRpZmllcgpAQCAtMTIzMSw3ICsxMjMzLDcgQEAgdm9pZCByZW1v
dmVXcmFwcGVyRm9yUkdCKFJHQkEzMiB2YWx1ZSkKIC0gKGlkKV9pbml0V2l0aENvdW50ZXI6KENv
dW50ZXIgKilpbXBsCiB7CiAgICAgW3N1cGVyIF9pbml0XTsKLSAgICBfaW50ZXJuYWwgPSBET01f
Y2FzdDxET01PYmplY3RJbnRlcm5hbCAqPihpbXBsKTsKKyAgICBfaW50ZXJuYWwgPSBET01fY2Fz
dDxET01PYmplY3RJbnRlcm5hbCo+KGltcGwpOwogICAgIGltcGwtPnJlZigpOwogICAgIGFkZERP
TVdyYXBwZXIoc2VsZiwgaW1wbCk7CiAgICAgcmV0dXJuIHNlbGY7CkBAIC0yNDk3LDExICsyNDk5
LDExIEBAIHZvaWQgcmVtb3ZlV3JhcHBlckZvclJHQihSR0JBMzIgdmFsdWUpCiAgICAgU3R5bGVT
aGVldCAqc2hlZXQ7CiAKICAgICBpZiAoW3NlbGYgaXNLaW5kT2ZDbGFzczpbRE9NUHJvY2Vzc2lu
Z0luc3RydWN0aW9uIGNsYXNzXV0pCi0gICAgICAgIHNoZWV0ID0gc3RhdGljX2Nhc3Q8UHJvY2Vz
c2luZ0luc3RydWN0aW9uICo+KFsoRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uICopc2VsZiBfbm9k
ZV0pLT5zaGVldCgpOworICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbio+KFsoRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uICopc2VsZiBfbm9kZV0pLT5zaGVl
dCgpOwogICAgIGVsc2UgaWYgKFtzZWxmIGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxMaW5rRWxlbWVu
dCBjbGFzc11dKQotICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCAq
PihbKERPTUhUTUxMaW5rRWxlbWVudCAqKXNlbGYgX25vZGVdKS0+c2hlZXQoKTsKKyAgICAgICAg
c2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihbKERPTUhUTUxMaW5rRWxlbWVu
dCAqKXNlbGYgX25vZGVdKS0+c2hlZXQoKTsKICAgICBlbHNlIGlmIChbc2VsZiBpc0tpbmRPZkNs
YXNzOltET01IVE1MU3R5bGVFbGVtZW50IGNsYXNzXV0pCi0gICAgICAgIHNoZWV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCAqPihbKERPTUhUTUxTdHlsZUVsZW1lbnQgKilzZWxmIF9u
b2RlXSktPnNoZWV0KCk7CisgICAgICAgIHNoZWV0ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxl
bWVudCo+KFsoRE9NSFRNTFN0eWxlRWxlbWVudCAqKXNlbGYgX25vZGVdKS0+c2hlZXQoKTsKICAg
ICBlbHNlCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5kZXg6IGJpbmRpbmdzL29iamMvRE9NSFRN
TC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJldmlzaW9uIDE0
MzI3KQorKysgYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJGb3VuZGF0
aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJIVE1MQXBwbGV0RWxlbWVudC5oIgorI2ltcG9ydCAiSFRN
TEJhc2VFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MQmFzZUZvbnRFbGVtZW50LmgiCiAjaW1wb3J0
ICJIVE1MQnV0dG9uRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTERvY3VtZW50LmgiCkBAIC00Miwy
MCArNDMsMjkgQEAKICNpbXBvcnQgIkhUTUxJc0luZGV4RWxlbWVudC5oIgogI2ltcG9ydCAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKKyNpbXBvcnQg
IkhUTUxMaW5rRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTE1ldGFFbGVtZW50LmgiCiAjaW1wb3J0
ICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgog
I2ltcG9ydCAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxPcHRpb25zQ29sbGVj
dGlvbi5oIgogI2ltcG9ydCAiSFRNTFBhcmFtRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTFNjcmlw
dEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1M
U3R5bGVFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MVGFibGVFbGVtZW50LmgiCisjaW1wb3J0ICJI
VE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCIKKyNpbXBvcnQgIkhUTUxUYWJsZUNvbEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxUYWJsZVJv
d0VsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCiAjaW1wb3J0
ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MVGl0bGVFbGVtZW50LmgiCiAj
aW1wb3J0ICJOYW1lTm9kZUxpc3QuaCIKICNpbXBvcnQgImh0bWxfYmFzZWltcGwuaCIKICNpbXBv
cnQgImh0bWxfYmxvY2tpbXBsLmgiCi0jaW1wb3J0ICJodG1sX2hlYWRpbXBsLmgiCiAjaW1wb3J0
ICJodG1sX2ltYWdlaW1wbC5oIgogI2ltcG9ydCAiaHRtbF9saXN0aW1wbC5oIgotI2ltcG9ydCAi
aHRtbF90YWJsZWltcGwuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgogI2ltcG9ydCAiUmVuZGVyVGV4
dEZpZWxkLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKQEAgLTEwNiw3ICsxMTYsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogLSAodm9pZClkZWFsbG9jCiB7CiAgICAg
aWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxIVE1MQ29sbGVjdGlvbiAqPihfaW50
ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxIVE1MQ29sbGVjdGlvbio+KF9pbnRl
cm5hbCktPmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTExNCwx
NCArMTI0LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAtICh2b2lk
KWZpbmFsaXplCiB7CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxIVE1M
Q29sbGVjdGlvbiAqPihfaW50ZXJuYWwpLT5kZXJlZigpOworICAgICAgICBET01fY2FzdDxIVE1M
Q29sbGVjdGlvbio+KF9pbnRlcm5hbCktPmRlcmVmKCk7CiAgICAgfQogICAgIFtzdXBlciBmaW5h
bGl6ZV07CiB9CiAKIC0gKEhUTUxDb2xsZWN0aW9uICopX2NvbGxlY3Rpb24KIHsKLSAgICByZXR1
cm4gRE9NX2Nhc3Q8SFRNTENvbGxlY3Rpb24gKj4oX2ludGVybmFsKTsKKyAgICByZXR1cm4gRE9N
X2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihfaW50ZXJuYWwpOwogfQogCiAtICh1bnNpZ25lZClsZW5n
dGgKQEAgLTE0OCw3ICsxNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVz
OwogICAgIEFTU0VSVChpbXBsKTsKICAgICAKICAgICBbc3VwZXIgX2luaXRdOwotICAgIF9pbnRl
cm5hbCA9IERPTV9jYXN0PERPTU9iamVjdEludGVybmFsICo+KGltcGwpOworICAgIF9pbnRlcm5h
bCA9IERPTV9jYXN0PERPTU9iamVjdEludGVybmFsKj4oaW1wbCk7CiAgICAgaW1wbC0+cmVmKCk7
CiAgICAgYWRkRE9NV3JhcHBlcihzZWxmLCBpbXBsKTsKICAgICByZXR1cm4gc2VsZjsKQEAgLTE3
NCw3ICsxODQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogLSAodm9p
ZClkZWFsbG9jCiB7CiAgICAgaWYgKF9pbnRlcm5hbCkgewotICAgICAgICBET01fY2FzdDxIVE1M
T3B0aW9uc0NvbGxlY3Rpb24gKj4oX2ludGVybmFsKS0+ZGVyZWYoKTsKKyAgICAgICAgRE9NX2Nh
c3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oX2ludGVybmFsKS0+ZGVyZWYoKTsKICAgICB9CiAg
ICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMTgyLDcgKzE5Miw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAtICh2b2lkKWZpbmFsaXplCiB7CiAgICAgaWYgKF9pbnRl
cm5hbCkgewotICAgICAgICBET01fY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24gKj4oX2ludGVy
bmFsKS0+ZGVyZWYoKTsKKyAgICAgICAgRE9NX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4o
X2ludGVybmFsKS0+ZGVyZWYoKTsKICAgICB9CiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KQEAg
LTE5Miw3ICsyMDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogICAg
IEFTU0VSVChpbXBsKTsKICAgICAKICAgICBbc3VwZXIgX2luaXRdOwotICAgIF9pbnRlcm5hbCA9
IERPTV9jYXN0PERPTU9iamVjdEludGVybmFsICo+KGltcGwpOworICAgIF9pbnRlcm5hbCA9IERP
TV9jYXN0PERPTU9iamVjdEludGVybmFsKj4oaW1wbCk7CiAgICAgaW1wbC0+cmVmKCk7CiAgICAg
YWRkRE9NV3JhcHBlcihzZWxmLCBpbXBsKTsKICAgICByZXR1cm4gc2VsZjsKQEAgLTIxMyw3ICsy
MjMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MT3B0
aW9uc0NvbGxlY3Rpb24gKilfb3B0aW9uc0NvbGxlY3Rpb24KIHsKLSAgICByZXR1cm4gRE9NX2Nh
c3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uICo+KF9pbnRlcm5hbCk7CisgICAgcmV0dXJuIERPTV9j
YXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KF9pbnRlcm5hbCk7CiB9CiAKIC0gKHVuc2lnbmVk
KWxlbmd0aApAQCAtMzAzLDEyICszMTMsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhU
TUxOYW1lczsKIAogKyAoRE9NSFRNTEVsZW1lbnQgKilfZWxlbWVudFdpdGg6KEhUTUxFbGVtZW50
ICopaW1wbAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01IVE1MRWxlbWVudCAqPihbRE9N
Tm9kZSBfbm9kZVdpdGg6aW1wbF0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01IVE1MRWxl
bWVudCo+KFtET01Ob2RlIF9ub2RlV2l0aDppbXBsXSk7CiB9CiAKIC0gKEhUTUxFbGVtZW50ICop
X0hUTUxFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KERP
TV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiBAZW5kCkBAIC0zOTAs
NyArNDAwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRN
TERvY3VtZW50ICopX0hUTUxEb2N1bWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQog
CiAtIChOU1N0cmluZyAqKXRpdGxlCkBAIC01MjIsNyArNTMyLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTEh0bWxFbGVtZW50ICopX0hUTUxIdG1sRWxl
bWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQgKj4oRE9NX2Nh
c3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEh0bWxF
bGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAq
KXZlcnNpb24KQEAgLTU0MSw3ICs1NTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRN
TE5hbWVzOwogCiAtIChIVE1MSGVhZEVsZW1lbnQgKilfaGVhZEVsZW1lbnQKIHsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVy
bmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudCo+KERPTV9jYXN0
PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilwcm9maWxlCkBAIC01NjAs
NyArNTcwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRN
TExpbmtFbGVtZW50ICopX2xpbmtFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFs
KSk7CiB9CiAKIC0gKEJPT0wpZGlzYWJsZWQKQEAgLTY2NCw3ICs2NzQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MVGl0bGVFbGVtZW50ICopX3RpdGxl
RWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50ICo+KERP
TV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxU
aXRsZUVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopdGV4dApAQCAtNjgzLDcgKzY5Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpI
VE1MTmFtZXM7CiAKIC0gKEhUTUxNZXRhRWxlbWVudCAqKV9tZXRhRWxlbWVudAogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50
ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50Kj4oRE9NX2Nh
c3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNvbnRlbnQKQEAgLTcz
Miw3ICs3NDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChI
VE1MQmFzZUVsZW1lbnQgKilfYmFzZUVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEJhc2VFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJu
YWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilocmVmCkBAIC03NjEsNyArNzcxLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTFN0eWxlRWxlbWVudCAqKV9z
dHlsZUVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCAq
PihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MU3R5bGVFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChC
T09MKWRpc2FibGVkCkBAIC04MDAsNyArODEwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6
OkhUTUxOYW1lczsKIAogLSAoSFRNTEJvZHlFbGVtZW50ICopX2JvZHlFbGVtZW50CiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9p
bnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihET01f
Y2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopYUxpbmsKQEAgLTg2
OSw3ICs4NzksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChI
VE1MRm9ybUVsZW1lbnQgKilfZm9ybUVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJu
YWwpKTsKIH0KIAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKillbGVtZW50cwpAQCAtOTU5LDcgKzk2
OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKICsgKERPTUhUTUxG
b3JtRWxlbWVudCAqKV9mb3JtRWxlbWVudFdpdGg6KEhUTUxGb3JtRWxlbWVudCAqKWltcGwKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NSFRNTEZvcm1FbGVtZW50ICo+KFtET01Ob2RlIF9u
b2RlV2l0aDppbXBsXSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERPTUhUTUxGb3JtRWxlbWVu
dCo+KFtET01Ob2RlIF9ub2RlV2l0aDppbXBsXSk7CiB9CiAKIEBlbmQKQEAgLTk2OCw3ICs5Nzgs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MSXNJbmRl
eEVsZW1lbnQgKilfaXNJbmRleEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TElzSW5kZXhFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50
ZXJuYWwpKTsKIH0KIAogLSAoRE9NSFRNTEZvcm1FbGVtZW50ICopZm9ybQpAQCAtOTkyLDcgKzEw
MDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MU2Vs
ZWN0RWxlbWVudCAqKV9zZWxlY3RFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRl
cm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKXR5cGUKQEAgLTExMjEsNyArMTEzMSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxPcHRHcm91cEVsZW1l
bnQgKilfb3B0R3JvdXBFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRH
cm91cEVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJu
YWwpKTsKIH0KIAogLSAoQk9PTClkaXNhYmxlZApAQCAtMTE1MCw3ICsxMTYwLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTE9wdGlvbkVsZW1lbnQgKilf
b3B0aW9uRWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAog
LSAoRE9NSFRNTEZvcm1FbGVtZW50ICopZm9ybQpAQCAtMTIyNSw3ICsxMjM1LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTElucHV0RWxlbWVudCAqKV9p
bnB1dEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCAq
PihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChO
U1N0cmluZyAqKWRlZmF1bHRWYWx1ZQpAQCAtMTQ0MSw3ICsxNDUxLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTFRleHRBcmVhRWxlbWVudCAqKV90ZXh0
QXJlYUVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVu
dCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQog
CiAtIChOU1N0cmluZyAqKWRlZmF1bHRWYWx1ZQpAQCAtMTU3MCw3ICsxNTgwLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTEJ1dHRvbkVsZW1lbnQgKilf
YnV0dG9uRWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVu
dCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MQnV0dG9uRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAog
LSAoRE9NSFRNTEZvcm1FbGVtZW50ICopZm9ybQpAQCAtMTYzOSw3ICsxNjQ5LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTExhYmVsRWxlbWVudCAqKV9s
YWJlbEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCAq
PihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MTGFiZWxFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChE
T01IVE1MRm9ybUVsZW1lbnQgKilmb3JtCkBAIC0xNjQ3LDcgKzE2NTcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogICAgIEVsZW1lbnQgKmZvcm1FbGVtZW50ID0gW3Nl
bGYgX2xhYmVsRWxlbWVudF0tPmZvcm1FbGVtZW50KCk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFtET01IVE1MRm9ybUVsZW1lbnQgX2Zvcm1F
bGVtZW50V2l0aDpzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50ICo+KGZvcm1FbGVt
ZW50KS0+Zm9ybSgpXTsKKyAgICByZXR1cm4gW0RPTUhUTUxGb3JtRWxlbWVudCBfZm9ybUVsZW1l
bnRXaXRoOnN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPihmb3JtRWxlbWVudCkt
PmZvcm0oKV07CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzS2V5CkBAIC0xNjc2LDcgKzE2ODYs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MRmllbGRT
ZXRFbGVtZW50ICopX2ZpZWxkU2V0RWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRmllbGRTZXRFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4o
X2ludGVybmFsKSk7CiB9CiAKIC0gKERPTUhUTUxGb3JtRWxlbWVudCAqKWZvcm0KQEAgLTE2OTAs
NyArMTcwMCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhU
TUxMZWdlbmRFbGVtZW50ICopX2xlZ2VuZEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTExlZ2VuZEVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4o
X2ludGVybmFsKSk7CiB9CiAKIC0gKERPTUhUTUxGb3JtRWxlbWVudCAqKWZvcm0KQEAgLTE3MjQs
NyArMTczNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhU
TUxVTGlzdEVsZW1lbnQgKilfdUxpc3RFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxVTGlzdEVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50
ZXJuYWwpKTsKIH0KIAogLSAoQk9PTCljb21wYWN0CkBAIC0xNzUzLDcgKzE3NjMsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MT0xpc3RFbGVtZW50ICop
X29MaXN0RWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50
ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0g
KEJPT0wpY29tcGFjdApAQCAtMTc5Miw3ICsxODAyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTERMaXN0RWxlbWVudCAqKV9kTGlzdEVsZW1lbnQKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudCAqPihET01fY2FzdDxOb2Rl
ICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50
Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChCT09MKWNvbXBhY3QKQEAg
LTE4MTEsNyArMTgyMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAK
IC0gKEhUTUxEaXJlY3RvcnlFbGVtZW50ICopX2RpcmVjdG9yeUxpc3RFbGVtZW50CiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUg
Kj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVt
ZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChCT09MKWNvbXBhY3QK
QEAgLTE4MzAsNyArMTg0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7
CiAKIC0gKEhUTUxNZW51RWxlbWVudCAqKV9tZW51TGlzdEVsZW1lbnQKIHsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFs
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudCo+KERPTV9jYXN0PE5v
ZGUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoQk9PTCljb21wYWN0CkBAIC0xODQ5LDcgKzE4NTks
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MTElFbGVt
ZW50ICopX2xpRWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50
ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxMSUVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5T
U3RyaW5nICopdHlwZQpAQCAtMTg3OCw3ICsxODg4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTEVsZW1lbnQgKilfcXVvdGVFbGVtZW50CiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVy
bmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9k
ZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNpdGUKQEAgLTE4OTcsNyArMTkw
Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxEaXZF
bGVtZW50ICopX2RpdkVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERpdkVs
ZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAK
IC0gKE5TU3RyaW5nICopYWxpZ24KQEAgLTE5MTYsNyArMTkyNiw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxQYXJhZ3JhcGhFbGVtZW50ICopX3BhcmFn
cmFwaEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1l
bnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTFBhcmFncmFwaEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9
CiAKIC0gKE5TU3RyaW5nICopYWxpZ24KQEAgLTE5MzUsNyArMTk0NSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxIZWFkaW5nRWxlbWVudCAqKV9oZWFk
aW5nRWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQg
Kj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAt
IChOU1N0cmluZyAqKWFsaWduCkBAIC0xOTU0LDcgKzE5NjQsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MUHJlRWxlbWVudCAqKV9wcmVFbGVtZW50CiB7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUg
Kj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50Kj4o
RE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChpbnQpd2lkdGgKQEAgLTE5NzMs
NyArMTk4Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhU
TUxCUkVsZW1lbnQgKilfQlJFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxC
UkVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEJSRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKiljbGVhcgpAQCAtMTk5Miw3ICsyMDAyLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTEJhc2VGb250RWxlbWVudCAqKV9iYXNl
Rm9udEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVu
dCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MQmFzZUZvbnRFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQog
CiAtIChOU1N0cmluZyAqKWNvbG9yCkBAIC0yMDMxLDcgKzIwNDEsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MRm9udEVsZW1lbnQgKilfZm9udEVsZW1l
bnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50ICo+KERPTV9jYXN0
PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb250RWxl
bWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilj
b2xvcgpAQCAtMjA3MCw3ICsyMDgwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxO
YW1lczsKIAogLSAoSFRNTEhSRWxlbWVudCAqKV9IUkVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEhSRWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9p
bnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWFsaWduCkBAIC0yMTE5LDcgKzIxMjksNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MRWxlbWVudCAq
KV9tb2RFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KERP
TV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAq
KWNpdGUKQEAgLTIxNDgsNyArMjE1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CiAKIC0gKEhUTUxBbmNob3JFbGVtZW50ICopX2FuY2hvckVsZW1lbnQKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihf
aW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihE
T01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWNjZXNzS2V5
CkBAIC0yMjk1LDcgKzIzMDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVz
OwogCiAtIChIVE1MSW1hZ2VFbGVtZW50ICopX2ltYWdlRWxlbWVudAogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFs
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihET01fY2FzdDxO
b2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopbmFtZQpAQCAtMjQzNSw3ICsy
NDQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTE9i
amVjdEVsZW1lbnQgKilfb2JqZWN0RWxlbWVudAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MT2JqZWN0RWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50
ZXJuYWwpKTsKIH0KIAogLSAoRE9NSFRNTEZvcm1FbGVtZW50ICopZm9ybQpAQCAtMjYzMSw3ICsy
NjQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTFBh
cmFtRWxlbWVudCAqKV9wYXJhbUVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TFBhcmFtRWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5h
bCkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAgLTI4MDUsNyArMjgxNSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxNYXBFbGVtZW50ICopX21h
cEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnQgKj4oRE9N
X2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1h
cEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKERPTUhUTUxD
b2xsZWN0aW9uICopYXJlYXMKQEAgLTI4MzAsNyArMjg0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxBcmVhRWxlbWVudCAqKV9hcmVhRWxlbWVudAog
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9k
ZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50
Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWFjY2Vz
c0tleQpAQCAtMjkzMCw3ICsyOTQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxO
YW1lczsKIAogLSAoSFRNTFNjcmlwdEVsZW1lbnQgKilfc2NyaXB0RWxlbWVudAogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCAqPihET01fY2FzdDxOb2RlICo+KF9p
bnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KERP
TV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKil0ZXh0CkBAIC0z
MDI1LDEyICszMDM1LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAK
ICsgKERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50ICopX3RhYmxlQ2FwdGlvbkVsZW1lbnRXaXRo
OihIVE1MVGFibGVDYXB0aW9uRWxlbWVudCAqKWltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgKj4oW0RPTU5vZGUgX25vZGVXaXRoOmltcGxd
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihb
RE9NTm9kZSBfbm9kZVdpdGg6aW1wbF0pOwogfQogCiAtIChIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dCAqKV90YWJsZUNhcHRpb25FbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50ICo+KERPTV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9k
ZSo+KF9pbnRlcm5hbCkpOwogfQogCiBAZW5kCkBAIC0zMTA0LDEyICszMTE0LDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKICsgKERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50ICopX3RhYmxlU2VjdGlvbkVsZW1lbnRXaXRoOihIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCAqKWltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQgKj4oW0RPTU5vZGUgX25vZGVXaXRoOmltcGxdKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihbRE9NTm9kZSBfbm9kZVdpdGg6aW1wbF0p
OwogfQogCiAtIChIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAqKV90YWJsZVNlY3Rpb25FbGVtZW50
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICo+KERP
TV9jYXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiBA
ZW5kCkBAIC0zMjUwLDcgKzMyNjAsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5h
bWVzOwogCiAtIChET01IVE1MRWxlbWVudCAqKWNyZWF0ZVRIZWFkCiB7Ci0gICAgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQgKmltcGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCAqPihbc2VsZiBfdGFibGVFbGVtZW50XS0+Y3JlYXRlVEhlYWQoKSk7CisgICAgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQgKmltcGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCo+KFtzZWxmIF90YWJsZUVsZW1lbnRdLT5jcmVhdGVUSGVhZCgpKTsKICAgICByZXR1cm4gW0RP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IF90YWJsZVNlY3Rpb25FbGVtZW50V2l0aDppbXBsXTsK
IH0KIApAQCAtMzI2MSw3ICszMjcxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxO
YW1lczsKIAogLSAoRE9NSFRNTEVsZW1lbnQgKiljcmVhdGVURm9vdAogewotICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50ICppbXBsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQgKj4oW3NlbGYgX3RhYmxlRWxlbWVudF0tPmNyZWF0ZVRGb290KCkpOworICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50ICppbXBsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqPihbc2VsZiBfdGFibGVFbGVtZW50XS0+Y3JlYXRlVEZvb3QoKSk7CiAgICAgcmV0dXJuIFtE
T01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCBfdGFibGVTZWN0aW9uRWxlbWVudFdpdGg6aW1wbF07
CiB9CiAKQEAgLTMyNzIsNyArMzI4Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CiAKIC0gKERPTUhUTUxFbGVtZW50ICopY3JlYXRlQ2FwdGlvbgogewotICAgIEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50ICppbXBsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQgKj4oW3NlbGYgX3RhYmxlRWxlbWVudF0tPmNyZWF0ZUNhcHRpb24oKSk7CisgICAgSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQgKmltcGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9u
RWxlbWVudCo+KFtzZWxmIF90YWJsZUVsZW1lbnRdLT5jcmVhdGVDYXB0aW9uKCkpOwogICAgIHJl
dHVybiBbRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgX3RhYmxlQ2FwdGlvbkVsZW1lbnRXaXRo
OmltcGxdOwogfQogCkBAIC0zMjg0LDcgKzMyOTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTo6SFRNTE5hbWVzOwogLSAoRE9NSFRNTEVsZW1lbnQgKilpbnNlcnRSb3c6KGludClpbmRleAog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEhUTUxUYWJsZUVsZW1lbnQgKmltcGwg
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50ICo+KFtzZWxmIF90YWJsZUVsZW1lbnRdLT5p
bnNlcnRSb3coaW5kZXgsIGVjKSk7CisgICAgSFRNTFRhYmxlRWxlbWVudCAqaW1wbCA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihbc2VsZiBfdGFibGVFbGVtZW50XS0+aW5zZXJ0Um93
KGluZGV4LCBlYykpOwogICAgIHJhaXNlT25ET01FcnJvcihlYyk7CiAgICAgcmV0dXJuIFtET01I
VE1MVGFibGVFbGVtZW50IF90YWJsZUVsZW1lbnRXaXRoOmltcGxdOwogfQpAQCAtMzMwMiwxMiAr
MzMxMiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiArIChET01I
VE1MVGFibGVFbGVtZW50ICopX3RhYmxlRWxlbWVudFdpdGg6KEhUTUxUYWJsZUVsZW1lbnQgKilp
bXBsCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERPTUhUTUxUYWJsZUVsZW1lbnQgKj4oW0RP
TU5vZGUgX25vZGVXaXRoOmltcGxdKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RE9NSFRNTFRh
YmxlRWxlbWVudCo+KFtET01Ob2RlIF9ub2RlV2l0aDppbXBsXSk7CiB9CiAKIC0gKEhUTUxUYWJs
ZUVsZW1lbnQgKilfdGFibGVFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwp
KTsKIH0KIAogQGVuZApAQCAtMzMxNiw3ICszMzI2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKIAogLSAoSFRNTFRhYmxlQ29sRWxlbWVudCAqKV90YWJsZUNvbEVsZW1l
bnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudCAqPihET01f
Y2FzdDxOb2RlICo+KF9pbnRlcm5hbCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDb2xFbGVtZW50Kj4oRE9NX2Nhc3Q8Tm9kZSo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0
cmluZyAqKWFsaWduCkBAIC0zMzg1LDcgKzMzOTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MVGFibGVSb3dFbGVtZW50ICopX3RhYmxlUm93RWxlbWVu
dAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50ICo+KERPTV9j
YXN0PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJs
ZVJvd0VsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKGludCly
b3dJbmRleApAQCAtMzQ1Nyw3ICszNDY3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhU
TUxOYW1lczsKIC0gKERPTUhUTUxFbGVtZW50ICopaW5zZXJ0Q2VsbDooaW50KWluZGV4CiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgKmltcGwg
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCAqPihbc2VsZiBfdGFibGVSb3dFbGVt
ZW50XS0+aW5zZXJ0Q2VsbChpbmRleCwgZWMpKTsKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudCAq
aW1wbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oW3NlbGYgX3RhYmxlUm93
RWxlbWVudF0tPmluc2VydENlbGwoaW5kZXgsIGVjKSk7CiAgICAgcmFpc2VPbkRPTUVycm9yKGVj
KTsKICAgICByZXR1cm4gW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IF90YWJsZUNlbGxFbGVtZW50
V2l0aDppbXBsXTsKIH0KQEAgLTM2MjQsMTIgKzM2MzQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKIAogKyAoRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgKilfdGFibGVD
ZWxsRWxlbWVudFdpdGg6KEhUTUxUYWJsZUNlbGxFbGVtZW50ICopaW1wbAogewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxET01IVE1MVGFibGVDZWxsRWxlbWVudCAqPihbRE9NTm9kZSBfbm9kZVdp
dGg6aW1wbF0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01IVE1MVGFibGVDZWxsRWxlbWVu
dCo+KFtET01Ob2RlIF9ub2RlV2l0aDppbXBsXSk7CiB9CiAKIC0gKEhUTUxUYWJsZUNlbGxFbGVt
ZW50ICopX3RhYmxlQ2VsbEVsZW1lbnQKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ2VsbEVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2lu
dGVybmFsKSk7CiB9CiAKIEBlbmQKQEAgLTM2MzgsNyArMzY0OCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxGcmFtZVNldEVsZW1lbnQgKilfZnJhbWVT
ZXRFbGVtZW50CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQg
Kj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEZyYW1lU2V0RWxlbWVudCo+KERPTV9jYXN0PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAog
LSAoTlNTdHJpbmcgKilyb3dzCkBAIC0zNjY3LDcgKzM2NzcsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtIChIVE1MRnJhbWVFbGVtZW50ICopX2ZyYW1lRWxlbWVu
dAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50ICo+KERPTV9jYXN0
PE5vZGUgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVs
ZW1lbnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICop
ZnJhbWVCb3JkZXIKQEAgLTM3NjEsNyArMzc3MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpIVE1MTmFtZXM7CiAKIC0gKEhUTUxJRnJhbWVFbGVtZW50ICopX0lGcmFtZUVsZW1lbnQKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9k
ZSAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1l
bnQqPihET01fY2FzdDxOb2RlKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopYWxp
Z24KQEAgLTM4ODcsNyArMzg5Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFt
ZXM7CiAKIC0gKEhUTUxFbWJlZEVsZW1lbnQgKilfZW1iZWRFbGVtZW50CiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQgKj4oRE9NX2Nhc3Q8Tm9kZSAqPihfaW50ZXJu
YWwpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KERPTV9jYXN0
PE5vZGUqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilhbGlnbgpAQCAtMzk2NCw3
ICszOTc0LDcgQEAgc3RhdGljIE5TVmlldyAqdmlld0ZvckVsZW1lbnQoRE9NRWxlbWVudAogewog
ICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBbZWxlbWVudCBfZWxlbWVudF0tPnJlbmRlcmVy
KCk7CiAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1dpZGdldCgpKSB7Ci0gICAgICAg
IFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0ICo+KHJlbmRl
cmVyKS0+d2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKICAgICAgICAgaWYgKHdpZGdl
dCkgewogICAgICAgICAgICAgd2lkZ2V0LT5wb3B1bGF0ZSgpOwogICAgICAgICAgICAgcmV0dXJu
IHdpZGdldC0+Z2V0VmlldygpOwpJbmRleDogaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiAxNDMyNSkKKysrIGh0bWwv
SFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDU2ICsyMSwyMCBAQAogICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIEhUTUxfSEVBRElN
UExfSAotI2RlZmluZSBIVE1MX0hFQURJTVBMX0gKKyNpZm5kZWYgSFRNTExpbmtFbGVtZW50X0gK
KyNkZWZpbmUgSFRNTExpbmtFbGVtZW50X0gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBD
YWNoZWRTY3JpcHQ7Ci1jbGFzcyBTdHJpbmc7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBIVE1M
Rm9ybUVsZW1lbnQ7Ci1jbGFzcyBTdHlsZVNoZWV0OwogCi1jbGFzcyBIVE1MQmFzZUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQKK2NsYXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAogewogcHVibGljOgotICAgIEhUTUxC
YXNlRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTEJhc2VFbGVtZW50KCk7Ci0KLSAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9o
cmVmOyB9Ci0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0g
ICAgCi0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyAmKTsKLSAgICB2b2lkIHNldFRhcmdl
dChjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9ocmVmOwotICAg
IFN0cmluZyBtX3RhcmdldDsKLX07Ci0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNz
IEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDYWNoZWRPYmplY3RDbGllbnQsIHB1
YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxMaW5rRWxlbWVudChEb2N1bWVu
dCAqZG9jKTsKKyAgICBIVE1MTGlua0VsZW1lbnQoRG9jdW1lbnQqKTsKICAgICB+SFRNTExpbmtF
bGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KQEAgLTgwLDMzICs0NCwzMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIFN0cmluZyBjaGFy
c2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmKTsKKyAgICB2
b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0
OwotICAgIHZvaWQgc2V0SHJlZihjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRIcmVmKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIGhyZWZsYW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRIcmVmbGFuZyhjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRIcmVmbGFuZyhjb25zdCBT
dHJpbmcmKTsKIAogICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEo
Y29uc3QgU3RyaW5nICYpOworICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBTdHJpbmcgcmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWwoY29uc3QgU3RyaW5nICYpOwor
ICAgIHZvaWQgc2V0UmVsKGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHJldigpIGNvbnN0
OwotICAgIHZvaWQgc2V0UmV2KGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldFJldihjb25z
dCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRh
cmdldChjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7
CiAKICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJp
bmcgJik7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3R5bGVTaGVl
dCogc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0LmdldCgpOyB9CiAKICAgICAvLyBvdmVy
bG9hZCBmcm9tIEhUTUxFbGVtZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgdm9pZCBwcm9jZXNzKCk7CiAKQEAg
LTExNCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwogCiAgICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3R5bGVTaGVldChjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnVybCwgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nICZzaGVldCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nICZ1cmwsIGNvbnN0IFN0cmluZyAmc2hlZXQpOwogICAgIGJvb2wgaXNMb2FkaW5nKCkg
Y29uc3Q7CiAgICAgdm9pZCBzaGVldExvYWRlZCgpOwogCkBAIC0xMjUsMTIgKzg5LDEyIEBAIHB1
YmxpYzoKICAgICBpbnQgZGlzYWJsZWRTdGF0ZSgpIHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZTsg
fQogICAgIHZvaWQgc2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAgICAgCiAgICAgdm9p
ZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCk7CiAKIHByb3Rl
Y3RlZDoKLSAgICBXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0ICptX2NhY2hlZFNoZWV0Owor
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIG1fY2FjaGVkU2hlZXQ7CiAgICAgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IG1fc2hlZXQ7CiAgICAgU3RyaW5nIG1fdXJsOwogICAgIFN0cmluZyBtX3R5cGU7
CkBAIC0xNDIsMTUxICsxMDYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2lzSWNvbiA6IDE7
CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNZXRhRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxNZXRhRWxlbWVudChEb2N1bWVu
dCAqZG9jKTsKLSAgICB+SFRNTE1ldGFFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRk
ZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotCi0gICAg
dm9pZCBwcm9jZXNzKCk7Ci0KLSAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0Q29udGVudChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHR0cEVxdWl2KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5n
IG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nICYpOwotCi0gICAg
U3RyaW5nIHNjaGVtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFN0cmluZyAm
KTsKLQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX2VxdWl2OwotICAgIFN0cmluZyBtX2NvbnRl
bnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxTY3JpcHRFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgV2ViQ29yZTo6Q2FjaGVkT2JqZWN0Q2xpZW50
Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0gICAg
fkhUTUxTY3JpcHRFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlz
VGV4dE5vZGUoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoV2ViQ29yZTo6Q2FjaGVkT2JqZWN0ICpmaW5pc2hlZE9i
aik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFy
c2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIo
KTsKLQotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nICZVUkwsIGNvbnN0IFN0
cmluZyAmc2NyaXB0KTsKLQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRU
ZXh0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBodG1sRm9yKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBldmVudCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0RXZlbnQoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGNo
YXJzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nICYpOwotCi0g
ICAgYm9vbCBkZWZlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVmZXIoYm9vbCk7Ci0KLSAgICBT
dHJpbmcgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nICYpOwotCi0g
ICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nICYp
OwotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OkNhY2hlZFNjcmlwdCAqbV9jYWNoZWRTY3JpcHQ7
Ci0gICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKLSAgICBib29sIG1fZXZhbHVhdGVkOwotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MU3R5bGVFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFN0eWxlRWxlbWVudChEb2N1bWVudCAq
ZG9jKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9Ci0K
LSAgICBTdHlsZVNoZWV0ICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXQuZ2V0KCk7IH0K
LQotICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21E
b2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLQotICAgIGJv
b2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzaGVldExvYWRlZCgpOwotCi0gICAgYm9v
bCBkaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7Ci0KLSAgICBT
dHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0cmluZyAmKTsK
LQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmlu
ZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0Owot
ICAgIGJvb2wgbV9sb2FkaW5nOwotICAgIFN0cmluZyBtX3R5cGU7Ci0gICAgU3RyaW5nIG1fbWVk
aWE7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxUaXRsZUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MVGl0bGVFbGVtZW50KERv
Y3VtZW50ICpkb2MpOwotICAgIH5IVE1MVGl0bGVFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1Rl
eHROb2RlKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNoaWxkcmVuQ2hhbmdlZCgpOwotCi0gICAgU3RyaW5nIHRleHQoKSBjb25zdDsKLSAgICB2b2lk
IHNldFRleHQoY29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fdGl0
bGU7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogaHRtbC9IVE1MRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTERvY3VtZW50LmNwcAkocmV2aXNpb24gMTQz
MjUpCisrKyBodG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYy
LDYgQEAKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxfYmFzZWltcGwuaCIKLSNpbmNsdWRlICJodG1sX2hl
YWRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2lt
YWdlaW1wbC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudEZhY3RvcnkuaCIKSW5kZXg6IGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDMyNSkKKysrIGh0
bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw0NjEgKzIxLDI4
IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiaHRtbF9o
ZWFkaW1wbC5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJD
YWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNs
dWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0
aW1wbC5oIgotI2luY2x1ZGUgImNzc2hlbHBlci5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwogCi1IVE1MQmFzZUVsZW1lbnQ6OkhUTUxCYXNlRWxlbWVudChEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmFzZVRhZywgZG9jKQotewotfQotCi1IVE1MQmFzZUVs
ZW1lbnQ6On5IVE1MQmFzZUVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKLSAgICAgICAgbV9ocmVmID0gcGFyc2VVUkwoYXR0
ci0+dmFsdWUoKSk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSB0YXJnZXRBdHRyKSB7Ci0gICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKLQotICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNlIGVsZW1l
bnQuLi4KLSAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGJh
c2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCi0gICAgZG9jdW1l
bnQoKS0+c2V0QmFzZVVSTCggRGVwcmVjYXRlZFN0cmluZzo6bnVsbCApOwotICAgIGRvY3VtZW50
KCktPnNldEJhc2VUYXJnZXQoIERlcHJlY2F0ZWRTdHJpbmc6Om51bGwgKTsKLX0KLQotdm9pZCBI
VE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MoKQotewotICAgIGlmICghaW5Eb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZighbV9ocmVmLmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5m
cmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlVVJMKCBLVVJMKCBkb2N1bWVudCgp
LT5mcmFtZSgpLT51cmwoKSwgbV9ocmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSApLnVybCgpICk7Ci0K
LSAgICBpZighbV90YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNl
VGFyZ2V0KCBtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5nKCkgKTsKLQotICAgIC8vICMjIyBzaG91
bGQgY2hhbmdpbmcgYSBkb2N1bWVudCdzIGJhc2UgVVJMIGR5bmFtaWNhbGx5IGF1dG9tYXRpY2Fs
bHkgdXBkYXRlIGFsbCBpbWFnZXMsIHN0eWxlc2hlZXRzIGV0Yz8KLX0KLQotdm9pZCBIVE1MQmFz
ZUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnNldFRhcmdl
dChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2
YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTExpbmtFbGVtZW50OjpIVE1M
TGlua0VsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGxpbmtUYWcsIGRv
YykKLXsKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBtX2NhY2hlZFNoZWV0ID0gMDsKLSAg
ICBtX2lzU3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxzZTsKLSAgICBt
X2Rpc2FibGVkU3RhdGUgPSAwOwotfQotCi1IVE1MTGlua0VsZW1lbnQ6On5IVE1MTGlua0VsZW1l
bnQoKQotewotICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICBtX2NhY2hlZFNoZWV0LT5k
ZXJlZih0aGlzKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkU3RhdGUo
Ym9vbCBfZGlzYWJsZWQpCi17Ci0gICAgaW50IG9sZERpc2FibGVkU3RhdGUgPSBtX2Rpc2FibGVk
U3RhdGU7Ci0gICAgbV9kaXNhYmxlZFN0YXRlID0gX2Rpc2FibGVkID8gMiA6IDE7Ci0gICAgaWYg
KG9sZERpc2FibGVkU3RhdGUgIT0gbV9kaXNhYmxlZFN0YXRlKSB7Ci0gICAgICAgIC8vIElmIHdl
IGNoYW5nZSB0aGUgZGlzYWJsZWQgc3RhdGUgd2hpbGUgdGhlIHNoZWV0IGlzIHN0aWxsIGxvYWRp
bmcsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAgICAvLyBwZXJmb3JtIHRocmVlIGNoZWNrczoKLSAg
ICAgICAgaWYgKGlzTG9hZGluZygpKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayAjMTogSWYgdGhl
IHNoZWV0IGJlY29tZXMgZGlzYWJsZWQgd2hpbGUgaXQgd2FzIGxvYWRpbmcsIGFuZCBpZiBpdCB3
YXMgZWl0aGVyCi0gICAgICAgICAgICAvLyBhIG1haW4gc2hlZXQgb3IgYSBzaGVldCB0aGF0IHdh
cyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHNjcmlwdCwgdGhlbiB3ZSBuZWVkCi0gICAgICAgICAg
ICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwZW5kaW5nIHNoZWV0cy4KLSAgICAg
ICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gMiAmJiAoIW1fYWx0ZXJuYXRlIHx8IG9sZERp
c2FibGVkU3RhdGUgPT0gMSkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVl
dExvYWRlZCgpOwotCi0gICAgICAgICAgICAvLyBDaGVjayAjMjogQW4gYWx0ZXJuYXRlIHNoZWV0
IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCBpcyBzdGlsbCBsb2FkaW5nLgotICAgICAgICAgICAg
aWYgKG1fYWx0ZXJuYXRlICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSAxKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotCi0gICAgICAgICAgICAvLyBDaGVjayAj
MzogQSBtYWluIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCB3YXMgc3RpbGwgbG9hZGlu
ZyBhbmQKLSAgICAgICAgICAgIC8vIGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB2aWEgc2NyaXB0LiAg
SXQgdGFrZXMgcmVhbGx5IHRlcnJpYmxlIGNvZGUgdG8gbWFrZSB0aGlzCi0gICAgICAgICAgICAv
LyBoYXBwZW4gKGEgZG91YmxlIHRvZ2dsZSBmb3Igbm8gcmVhc29uIGVzc2VudGlhbGx5KS4gIFRo
aXMgaGFwcGVucyBvbgotICAgICAgICAgICAgLy8gdmlydHVhbHBsYXN0aWMubmV0LCB3aGljaCBt
YW5hZ2VzIHRvIGRvIGFib3V0IDEyIGVuYWJsZS9kaXNhYmxlcyBvbiBvbmx5IDMKLSAgICAgICAg
ICAgIC8vIHNoZWV0cy4gOikKLSAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGUgJiYgbV9kaXNh
YmxlZFN0YXRlID09IDEgJiYgb2xkRGlzYWJsZWRTdGF0ZSA9PSAyKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUg
c2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFpbC4KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIExvYWQgdGhlIHNoZWV0LCBzaW5jZSBpdCdzIG5ldmVy
IGJlZW4gbG9hZGVkIGJlZm9yZS4KLSAgICAgICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRT
dGF0ZSA9PSAxKQotICAgICAgICAgICAgcHJvY2VzcygpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7IC8vIFVwZGF0ZSB0aGUgc3R5
bGUgc2VsZWN0b3IuCi0gICAgfQotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1
ZSgpKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFy
c2VVUkwoYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFs
dWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG1lZGlhQXR0cikgewotICAgICAgICBtX21lZGlhID0gYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVk
U3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewotICAgICAgICBzZXREaXNhYmxlZFN0YXRlKCFh
dHRyLT5pc051bGwoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXpl
UmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsU3RyKQotewotICAgIG1faXNTdHls
ZVNoZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVybmF0ZSA9IGZhbHNlOwotICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVsID0gcmVsU3RyLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgIGlmIChy
ZWwgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICBtX2lzU3R5bGVTaGVldCA9IHRydWU7Ci0gICAg
ZWxzZSBpZiAocmVsID09ICJpY29uIiB8fCByZWwgPT0gInNob3J0Y3V0IGljb24iKQotICAgICAg
ICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgZWxzZSBpZiAocmVsID09ICJhbHRlcm5hdGUgc3R5bGVz
aGVldCIgfHwgcmVsID09ICJzdHlsZXNoZWV0IGFsdGVybmF0ZSIpCi0gICAgICAgIG1faXNTdHls
ZVNoZWV0ID0gbV9hbHRlcm5hdGUgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICAvLyBUb2tl
bml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMgYmFzZWQgb24gc3BlY2lmaWMga2V5
d29yZHMgdGhhdCB3ZSBmaW5kLgotICAgICAgICByZWwucmVwbGFjZSgnXG4nLCAnICcpOwotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNw
bGl0KCcgJywgcmVsKTsgICAgICAgIAotICAgICAgICBmb3IgKERlcHJlY2F0ZWRTdHJpbmdMaXN0
OjpJdGVyYXRvciBpID0gbGlzdC5iZWdpbigpOyBpICE9IGxpc3QuZW5kKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCppID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAgICAgICAgICBtX2lzU3R5
bGVTaGVldCA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgqaSA9PSAiYWx0ZXJuYXRlIikK
LSAgICAgICAgICAgICAgICBtX2FsdGVybmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlm
ICgqaSA9PSAiaWNvbiIpCi0gICAgICAgICAgICAgICAgbV9pc0ljb24gPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCi17Ci0gICAg
aWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB0eXBlID0g
bV90eXBlLmxvd2VyKCk7Ci0gICAgCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLQotICAgIC8vIElFIGV4dGVuc2lvbjogbG9jYXRpb24gb2Ygc21hbGwgaWNvbiBmb3Ig
bG9jYXRpb25iYXIgLyBib29rbWFya3MKLSAgICBpZiAoZnJhbWUgJiYgbV9pc0ljb24gJiYgIW1f
dXJsLmlzRW1wdHkoKSAmJiAhZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KCF0eXBlLmlzRW1wdHkoKSkgLy8gTW96aWxsYSBleHRlbnNpb24gdG8gSUUgZXh0ZW5zaW9uOiBp
Y29uIHNwZWNpZmllZCB3aXRoIHR5cGUKLSAgICAgICAgICAgIGZyYW1lLT5icm93c2VyRXh0ZW5z
aW9uKCktPnNldFR5cGVkSWNvblVSTChLVVJMKG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSksIHR5
cGUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24o
KS0+c2V0SWNvblVSTChLVVJMKG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwotICAgIH0KLQot
ICAgIC8vIFN0eWxlc2hlZXQKLSAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQgd291bGQgaW5jb3Jy
ZWN0bHkgbWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFzIGEgZGlmZmVyZW50
IHNwZWNpZmllZCBtZWFuaW5nLiAtZHdoCi0gICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYm
ICh0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpIHx8IG1faXNTdHlsZVNoZWV0KSAmJiBkb2N1bWVu
dCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgIC8vIG5vIG5lZWQgdG8gbG9hZCBzdHlsZSBzaGVldHMg
d2hpY2ggYXJlbid0IGZvciB0aGUgc2NyZWVuIG91dHB1dAotICAgICAgICAvLyAjIyMgdGhlcmUg
bWF5IGJlIGluIHNvbWUgc2l0dWF0aW9ucyBlLmcuIGZvciBhbiBlZGl0b3Igb3Igc2NyaXB0IHRv
IG1hbmlwdWxhdGUKLSAgICAgICAgLy8gYWxzbywgZG9uJ3QgbG9hZCBzdHlsZSBzaGVldHMgZm9y
IHN0YW5kYWxvbmUgZG9jdW1lbnRzCi0gICAgICAgIGlmIChtX21lZGlhLmlzTnVsbCgpIHx8IG1f
bWVkaWEuY29udGFpbnMoInNjcmVlbiIpIHx8IG1fbWVkaWEuY29udGFpbnMoImFsbCIpIHx8IG1f
bWVkaWEuY29udGFpbnMoInByaW50IikpIHsKLQotICAgICAgICAgICAgLy8gQWRkIG91cnNlbHZl
cyBhcyBhIHBlbmRpbmcgc2hlZXQsIGJ1dCBvbmx5IGlmIHdlIGFyZW4ndCBhbiBhbHRlcm5hdGUg
Ci0gICAgICAgICAgICAvLyBzdHlsZXNoZWV0LiAgQWx0ZXJuYXRlIHN0eWxlc2hlZXRzIGRvbid0
IGhvbGQgdXAgcmVuZGVyIHRyZWUgY29uc3RydWN0aW9uLgotICAgICAgICAgICAgaWYgKCFpc0Fs
dGVybmF0ZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNoc2V0ID0gZ2V0
QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICBp
ZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICAgICAgICAgIGlmIChtX2xvYWRpbmcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAgICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTdHlsZVNo
ZWV0KG1fdXJsLCBjaHNldCk7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAg
ICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAobV9zaGVldCkgewotICAgICAgICAvLyB3ZSBubyBsb25nZXIgY29udGFpbiBh
IHN0eWxlc2hlZXQsIGUuZy4gcGVyaGFwcyByZWwgb3IgdHlwZSB3YXMgY2hhbmdlZAotICAgICAg
ICBtX3NoZWV0ID0gMDsKLSAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3Rvcigp
OwotICAgIH0KLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBwcm9j
ZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkK
LXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHByb2Nlc3Mo
KTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
ICZ1cmwsIGNvbnN0IFN0cmluZyAmc2hlZXRTdHIpCi17Ci0gICAgbV9zaGVldCA9IG5ldyBDU1NT
dHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0gICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoc2hlZXRTdHIs
ICFkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0KLSAgICBNZWRpYUxpc3QgKm1lZGlhID0g
bmV3IE1lZGlhTGlzdChtX3NoZWV0LmdldCgpLCBtX21lZGlhKTsKLSAgICBtX3NoZWV0LT5zZXRN
ZWRpYShtZWRpYSk7Ci0KLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLQotICAgIC8vIFRlbGwgdGhl
IGRvYyBhYm91dCB0aGUgc2hlZXQuCi0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0ICYm
ICFpc0Rpc2FibGVkKCkgJiYgIWlzQWx0ZXJuYXRlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnN0
eWxlc2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MTGlua0VsZW1lbnQ6OmlzTG9hZGluZygp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKCFtX3NoZWV0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpOwotfQotCi12
b2lkIEhUTUxMaW5rRWxlbWVudDo6c2hlZXRMb2FkZWQoKQotewotICAgIGlmICghaXNMb2FkaW5n
KCkgJiYgIWlzRGlzYWJsZWQoKSAmJiAhaXNBbHRlcm5hdGUoKSkKLSAgICAgICAgZG9jdW1lbnQo
KS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5uYW1l
KCkgPT0gaHJlZkF0dHI7Ci19Ci0KLWJvb2wgSFRNTExpbmtFbGVtZW50OjpkaXNhYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKS5pc051bGwoKTsK
LX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZGlzYWJsZWQgPyAiIiA6IDApOwotfQot
Ci1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpjaGFyc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dENoYXJzZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNl
dEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6aHJlZigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShocmVm
QXR0cikpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0SHJlZihjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUpOwotfQotCi1TdHJp
bmcgSFRNTExpbmtFbGVtZW50OjpocmVmbGFuZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShocmVmbGFuZ0F0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0SHJl
ZmxhbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZmxhbmdB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6Om1lZGlhKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExp
bmtFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6cmVs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJlbEF0dHIpOwotfQotCi12b2lk
IEhUTUxMaW5rRWxlbWVudDo6c2V0UmVsKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHJlbEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6
cmV2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJldkF0dHIpOwotfQotCi12
b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0UmV2KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKHJldkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVu
dDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIp
OwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxMaW5rRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQo
RG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChtZXRhVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxN
ZXRhRWxlbWVudDo6fkhUTUxNZXRhRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBodHRwX2VxdWl2QXR0cikgewotICAgICAgICBtX2VxdWl2ID0g
YXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGNvbnRlbnRBdHRyKSB7Ci0gICAgICAgIG1fY29udGVudCA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBu
YW1lQXR0cikgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgIH0gZWxzZQotICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1l
dGFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxNZXRh
RWxlbWVudDo6cHJvY2VzcygpCi17Ci0gICAgLy8gR2V0IHRoZSBkb2N1bWVudCB0byBwcm9jZXNz
IHRoZSB0YWcsIGJ1dCBvbmx5IGlmIHdlJ3JlIGFjdHVhbGx5IHBhcnQgb2YgRE9NIHRyZWUgKGNo
YW5naW5nIGEgbWV0YSB0YWcgd2hpbGUKLSAgICAvLyBpdCdzIG5vdCBpbiB0aGUgdHJlZSBzaG91
bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBkb2N1bWVudCkKLSAgICBpZiAoaW5Eb2N1bWVu
dCgpICYmICFtX2VxdWl2LmlzTnVsbCgpICYmICFtX2NvbnRlbnQuaXNOdWxsKCkpCi0gICAgICAg
IGRvY3VtZW50KCktPnByb2Nlc3NIdHRwRXF1aXYobV9lcXVpdixtX2NvbnRlbnQpOwotfQotCi1T
dHJpbmcgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldENv
bnRlbnQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29udGVudEF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MTWV0YUVsZW1lbnQ6OnNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRN
TE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxNZXRhRWxlbWVudDo6c2NoZW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHNjaGVtZUF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0U2NoZW1l
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNjaGVtZUF0dHIsIHZh
bHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBIVE1MU2NyaXB0RWxlbWVudDo6SFRN
TFNjcmlwdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHNjcmlwdFRh
ZywgZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9l
dmFsdWF0ZWQoZmFsc2UpCisgICAgOiBIVE1MRWxlbWVudChzY3JpcHRUYWcsIGRvYykKKyAgICAs
IG1fY2FjaGVkU2NyaXB0KDApCisgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKKyAgICAs
IG1fZXZhbHVhdGVkKGZhbHNlKQogewogfQogCkBAIC01MTcsOSArODQsOSBAQCB2b2lkIEhUTUxT
Y3JpcHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBtX2NhY2hlZFNjcmlw
dCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVybCwgY2hhcnNldCk7
CiAgICAgICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVmKHRoaXMpOwogICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxvYWRBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRy
TmFtZSA9PSBvbmxvYWRBdHRyKQogICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZl
bnQsIGF0dHIpOwotICAgIH0gZWxzZQorICAgIGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCkBAIC01OTUsOSArMTYyLDkgQEAgdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoYwogICAgIGlmIChtX2V2YWx1YXRlZCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAo
ZnJhbWUpIHsKLSAgICAgICAgS0pTUHJveHkgKnByb3h5ID0gZnJhbWUtPmpTY3JpcHQoKTsKKyAg
ICAgICAgS0pTUHJveHkqIHByb3h5ID0gZnJhbWUtPmpTY3JpcHQoKTsKICAgICAgICAgaWYgKHBy
b3h5KSB7CiAgICAgICAgICAgICBtX2V2YWx1YXRlZCA9IHRydWU7CiAgICAgICAgICAgICBwcm94
eS0+ZXZhbHVhdGUoVVJMLCAwLCBzY3JpcHQsIDApOwpAQCAtNjk3LDE3MyArMjY0LDQgQEAgdm9p
ZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdAogICAgIHNldEF0dHJpYnV0ZSh0
eXBlQXR0ciwgdmFsdWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxTdHlsZUVs
ZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChzdHls
ZVRhZywgZG9jKQotewotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotfQotCi0vLyBvdGhlciBzdHVm
Zi4uLgotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikKLSAg
ICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKS5sb3dlcigpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCi0gICAgICAgIG1fbWVkaWEgPSBhdHRy
LT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgIGVsc2UKLSAgICAgICAg
SFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxT
dHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkKLSAgICAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0gICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0
eWxlU2VsZWN0b3IoKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5n
ZWQoKQotewotICAgIFN0cmluZyB0ZXh0ID0gIiI7Ci0KLSAgICBmb3IgKE5vZGUqIGMgPSBmaXJz
dENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoYy0+bm9kZVR5
cGUoKSA9PSBURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDREFUQV9TRUNUSU9OX05PREUg
fHwgYy0+bm9kZVR5cGUoKSA9PSBDT01NRU5UX05PREUpCi0gICAgICAgICAgICB0ZXh0ICs9IGMt
Pm5vZGVWYWx1ZSgpOwotCi0gICAgaWYgKG1fc2hlZXQpIHsKLSAgICAgICAgaWYgKHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpKQotICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOyAvLyBSZW1vdmUgb3Vyc2VsdmVz
IGZyb20gdGhlIHNoZWV0IGxpc3QuCi0gICAgICAgIG1fc2hlZXQgPSAwOwotICAgIH0KLQotICAg
IG1fbG9hZGluZyA9IGZhbHNlOwotICAgIGlmICgobV90eXBlLmlzRW1wdHkoKSB8fCBtX3R5cGUg
PT0gInRleHQvY3NzIikgLy8gVHlwZSBtdXN0IGJlIGVtcHR5IG9yIENTUwotICAgICAgICAgJiYg
KG1fbWVkaWEuaXNOdWxsKCkgfHwgbV9tZWRpYS5jb250YWlucygic2NyZWVuIikgfHwgbV9tZWRp
YS5jb250YWlucygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlucygicHJpbnQiKSkpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgIG1fbG9hZGluZyA9IHRy
dWU7Ci0gICAgICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzKTsKLSAgICAgICAg
bV9zaGVldC0+cGFyc2VTdHJpbmcodGV4dCwgIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsK
LSAgICAgICAgTWVkaWFMaXN0ICptZWRpYSA9IG5ldyBNZWRpYUxpc3QobV9zaGVldC5nZXQoKSwg
bV9tZWRpYSk7Ci0gICAgICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlhKTsKLSAgICAgICAgbV9s
b2FkaW5nID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0
KQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci19Ci0KLWJvb2wgSFRN
TFN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobV9sb2FkaW5nKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0Lmdl
dCgpKS0+aXNMb2FkaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2hlZXRMb2Fk
ZWQoKQotewotICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnN0eWxl
c2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpkaXNhYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKS5pc051bGwoKTsK
LX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQot
ewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKLX0K
LQotU3RyaW5nIEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKG1lZGlhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2V0
TWVkaWEoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWVkaWFBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVF
bGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFRpdGxl
RWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnQodGl0bGVUYWcsIGRvYyksIG1fdGl0bGUoIiIpCi17Ci19Ci0KLUhUTUxUaXRsZUVsZW1lbnQ6
On5IVE1MVGl0bGVFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUobV90aXRsZSwgdGhpcyk7Ci19Ci0KLXZv
aWQgSFRNTFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLT5yZW1vdmVUaXRs
ZSh0aGlzKTsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKQot
ewotICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICBtX3RpdGxlID0gIiI7
Ci0gICAgZm9yIChOb2RlKiBjID0gZmlyc3RDaGlsZCgpOyBjICE9IDA7IGMgPSBjLT5uZXh0U2li
bGluZygpKQotICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUgfHwgYy0+bm9k
ZVR5cGUoKSA9PSBDREFUQV9TRUNUSU9OX05PREUpCi0gICAgICAgICAgICBtX3RpdGxlICs9IGMt
Pm5vZGVWYWx1ZSgpOwotICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCkt
PnNldFRpdGxlKG1fdGl0bGUsIHRoaXMpOwotfQotCi1TdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6
dGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHZhbCA9ICIiOwotICAgIAotICAgIGZvciAoTm9k
ZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0
ICo+KG4pLT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQg
SFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZUNvdW50
KCk7Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCAqPihmaXJzdENoaWxkKCkpLT5z
ZXREYXRhKHZhbHVlLCBlYyk7Ci0gICAgfSBlbHNlIHsgIAotICAgICAgICBpZiAobnVtQ2hpbGRy
ZW4gPiAwKSB7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0gICAg
Ci0gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHZhbHVlLmlt
cGwoKSksIGVjKTsKLSAgICB9Ci19Ci0KIH0KSW5kZXg6IGh0bWwvaHRtbF9oZWFkaW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkocmV2aXNpb24gMTQzMjUpCisr
KyBodG1sL2h0bWxfaGVhZGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2OSArMCwwIEBA
Ci0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
LSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2hlYWRpbXBsLmgiCi0KLSNp
bmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0Lmgi
Ci0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgot
I2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNs
dWRlICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAia2pz
X3Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi1IVE1MQmFzZUVsZW1lbnQ6OkhU
TUxCYXNlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmFzZVRhZywg
ZG9jKQotewotfQotCi1IVE1MQmFzZUVsZW1lbnQ6On5IVE1MQmFzZUVsZW1lbnQoKQotewotfQot
Ci12b2lkIEhUTUxCYXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKLSAgICAg
ICAgbV9ocmVmID0gcGFyc2VVUkwoYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIHByb2Nlc3MoKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKSB7Ci0gICAgICAgIG1f
dGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZQot
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZv
aWQgSFRNTEJhc2VFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lk
IEhUTUxCYXNlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBk
b2Vzbid0IGhhdmUgYSBiYXNlIGVsZW1lbnQuLi4KLSAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGlu
IHRoZSBjYXNlIG9mIG11bHRpcGxlIGJhc2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlk
IGFueXdheSAoPykpCi0gICAgZG9jdW1lbnQoKS0+c2V0QmFzZVVSTCggRGVwcmVjYXRlZFN0cmlu
Zzo6bnVsbCApOwotICAgIGRvY3VtZW50KCktPnNldEJhc2VUYXJnZXQoIERlcHJlY2F0ZWRTdHJp
bmc6Om51bGwgKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MoKQotewotICAg
IGlmICghaW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZighbV9ocmVmLmlz
RW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRC
YXNlVVJMKCBLVVJMKCBkb2N1bWVudCgpLT5mcmFtZSgpLT51cmwoKSwgbV9ocmVmLmRlcHJlY2F0
ZWRTdHJpbmcoKSApLnVybCgpICk7Ci0KLSAgICBpZighbV90YXJnZXQuaXNFbXB0eSgpKQotICAg
ICAgICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KCBtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5n
KCkgKTsKLQotICAgIC8vICMjIyBzaG91bGQgY2hhbmdpbmcgYSBkb2N1bWVudCdzIGJhc2UgVVJM
IGR5bmFtaWNhbGx5IGF1dG9tYXRpY2FsbHkgdXBkYXRlIGFsbCBpbWFnZXMsIHN0eWxlc2hlZXRz
IGV0Yz8KLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBI
VE1MQmFzZUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotSFRNTExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50KGxpbmtUYWcsIGRvYykKLXsKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAg
ICBtX2NhY2hlZFNoZWV0ID0gMDsKLSAgICBtX2lzU3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9h
bHRlcm5hdGUgPSBmYWxzZTsKLSAgICBtX2Rpc2FibGVkU3RhdGUgPSAwOwotfQotCi1IVE1MTGlu
a0VsZW1lbnQ6On5IVE1MTGlua0VsZW1lbnQoKQotewotICAgIGlmIChtX2NhY2hlZFNoZWV0KQot
ICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKLX0KLQotdm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnNldERpc2FibGVkU3RhdGUoYm9vbCBfZGlzYWJsZWQpCi17Ci0gICAgaW50IG9sZERp
c2FibGVkU3RhdGUgPSBtX2Rpc2FibGVkU3RhdGU7Ci0gICAgbV9kaXNhYmxlZFN0YXRlID0gX2Rp
c2FibGVkID8gMiA6IDE7Ci0gICAgaWYgKG9sZERpc2FibGVkU3RhdGUgIT0gbV9kaXNhYmxlZFN0
YXRlKSB7Ci0gICAgICAgIC8vIElmIHdlIGNoYW5nZSB0aGUgZGlzYWJsZWQgc3RhdGUgd2hpbGUg
dGhlIHNoZWV0IGlzIHN0aWxsIGxvYWRpbmcsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAgICAvLyBw
ZXJmb3JtIHRocmVlIGNoZWNrczoKLSAgICAgICAgaWYgKGlzTG9hZGluZygpKSB7Ci0gICAgICAg
ICAgICAvLyBDaGVjayAjMTogSWYgdGhlIHNoZWV0IGJlY29tZXMgZGlzYWJsZWQgd2hpbGUgaXQg
d2FzIGxvYWRpbmcsIGFuZCBpZiBpdCB3YXMgZWl0aGVyCi0gICAgICAgICAgICAvLyBhIG1haW4g
c2hlZXQgb3IgYSBzaGVldCB0aGF0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHNjcmlwdCwg
dGhlbiB3ZSBuZWVkCi0gICAgICAgICAgICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBv
ZiBwZW5kaW5nIHNoZWV0cy4KLSAgICAgICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gMiAm
JiAoIW1fYWx0ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gMSkpCi0gICAgICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotCi0gICAgICAgICAgICAvLyBDaGVj
ayAjMjogQW4gYWx0ZXJuYXRlIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCBpcyBzdGls
bCBsb2FkaW5nLgotICAgICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlICYmIG1fZGlzYWJsZWRTdGF0
ZSA9PSAxKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwot
Ci0gICAgICAgICAgICAvLyBDaGVjayAjMzogQSBtYWluIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3
aGlsZSBpdCB3YXMgc3RpbGwgbG9hZGluZyBhbmQKLSAgICAgICAgICAgIC8vIGFmdGVyIGl0IHdh
cyBkaXNhYmxlZCB2aWEgc2NyaXB0LiAgSXQgdGFrZXMgcmVhbGx5IHRlcnJpYmxlIGNvZGUgdG8g
bWFrZSB0aGlzCi0gICAgICAgICAgICAvLyBoYXBwZW4gKGEgZG91YmxlIHRvZ2dsZSBmb3Igbm8g
cmVhc29uIGVzc2VudGlhbGx5KS4gIFRoaXMgaGFwcGVucyBvbgotICAgICAgICAgICAgLy8gdmly
dHVhbHBsYXN0aWMubmV0LCB3aGljaCBtYW5hZ2VzIHRvIGRvIGFib3V0IDEyIGVuYWJsZS9kaXNh
YmxlcyBvbiBvbmx5IDMKLSAgICAgICAgICAgIC8vIHNoZWV0cy4gOikKLSAgICAgICAgICAgIGlm
ICghbV9hbHRlcm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEgJiYgb2xkRGlzYWJsZWRTdGF0
ZSA9PSAyKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwot
Ci0gICAgICAgICAgICAvLyBJZiB0aGUgc2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFp
bC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExvYWQgdGhl
IHNoZWV0LCBzaW5jZSBpdCdzIG5ldmVyIGJlZW4gbG9hZGVkIGJlZm9yZS4KLSAgICAgICAgaWYg
KCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSAxKQotICAgICAgICAgICAgcHJvY2Vzcygp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVj
dG9yKCk7IC8vIFVwZGF0ZSB0aGUgc3R5bGUgc2VsZWN0b3IuCi0gICAgfQotfQotCi12b2lkIEhU
TUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6
ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1fdXJsID0gZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBw
cm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAg
ICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikgewotICAgICAgICBtX21lZGlhID0g
YXR0ci0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgcHJvY2Vz
cygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewotICAg
ICAgICBzZXREaXNhYmxlZFN0YXRlKCFhdHRyLT5pc051bGwoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
cmVsU3RyKQotewotICAgIG1faXNTdHlsZVNoZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVybmF0ZSA9
IGZhbHNlOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVsID0gcmVsU3RyLmRlcHJlY2F0ZWRTdHJp
bmcoKS5sb3dlcigpOwotICAgIGlmIChyZWwgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICBtX2lz
U3R5bGVTaGVldCA9IHRydWU7Ci0gICAgZWxzZSBpZiAocmVsID09ICJpY29uIiB8fCByZWwgPT0g
InNob3J0Y3V0IGljb24iKQotICAgICAgICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgZWxzZSBpZiAo
cmVsID09ICJhbHRlcm5hdGUgc3R5bGVzaGVldCIgfHwgcmVsID09ICJzdHlsZXNoZWV0IGFsdGVy
bmF0ZSIpCi0gICAgICAgIG1faXNTdHlsZVNoZWV0ID0gbV9hbHRlcm5hdGUgPSB0cnVlOwotICAg
IGVsc2UgewotICAgICAgICAvLyBUb2tlbml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJp
dHMgYmFzZWQgb24gc3BlY2lmaWMga2V5d29yZHMgdGhhdCB3ZSBmaW5kLgotICAgICAgICByZWwu
cmVwbGFjZSgnXG4nLCAnICcpOwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0ID0g
RGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgcmVsKTsgICAgICAgIAotICAgICAgICBm
b3IgKERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpJdGVyYXRvciBpID0gbGlzdC5iZWdpbigpOyBpICE9
IGxpc3QuZW5kKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCppID09ICJzdHlsZXNoZWV0IikK
LSAgICAgICAgICAgICAgICBtX2lzU3R5bGVTaGVldCA9IHRydWU7Ci0gICAgICAgICAgICBlbHNl
IGlmICgqaSA9PSAiYWx0ZXJuYXRlIikKLSAgICAgICAgICAgICAgICBtX2FsdGVybmF0ZSA9IHRy
dWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgqaSA9PSAiaWNvbiIpCi0gICAgICAgICAgICAgICAg
bV9pc0ljb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxMaW5rRWxl
bWVudDo6cHJvY2VzcygpCi17Ci0gICAgaWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyB0eXBlID0gbV90eXBlLmxvd2VyKCk7Ci0gICAgCi0gICAgRnJhbWUg
KmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLQotICAgIC8vIElFIGV4dGVuc2lvbjogbG9j
YXRpb24gb2Ygc21hbGwgaWNvbiBmb3IgbG9jYXRpb25iYXIgLyBib29rbWFya3MKLSAgICBpZiAo
ZnJhbWUgJiYgbV9pc0ljb24gJiYgIW1fdXJsLmlzRW1wdHkoKSAmJiAhZnJhbWUtPnRyZWUoKS0+
cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkgLy8gTW96aWxsYSBleHRl
bnNpb24gdG8gSUUgZXh0ZW5zaW9uOiBpY29uIHNwZWNpZmllZCB3aXRoIHR5cGUKLSAgICAgICAg
ICAgIGZyYW1lLT5icm93c2VyRXh0ZW5zaW9uKCktPnNldFR5cGVkSWNvblVSTChLVVJMKG1fdXJs
LmRlcHJlY2F0ZWRTdHJpbmcoKSksIHR5cGUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAg
ZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0SWNvblVSTChLVVJMKG1fdXJsLmRlcHJlY2F0
ZWRTdHJpbmcoKSkpOwotICAgIH0KLQotICAgIC8vIFN0eWxlc2hlZXQKLSAgICAvLyBUaGlzIHdh
cyBidWdneSBhbmQgd291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUi
Piwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNwZWNpZmllZCBtZWFuaW5nLiAtZHdoCi0gICAgaWYg
KG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYmICh0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpIHx8IG1f
aXNTdHlsZVNoZWV0KSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgIC8vIG5vIG5l
ZWQgdG8gbG9hZCBzdHlsZSBzaGVldHMgd2hpY2ggYXJlbid0IGZvciB0aGUgc2NyZWVuIG91dHB1
dAotICAgICAgICAvLyAjIyMgdGhlcmUgbWF5IGJlIGluIHNvbWUgc2l0dWF0aW9ucyBlLmcuIGZv
ciBhbiBlZGl0b3Igb3Igc2NyaXB0IHRvIG1hbmlwdWxhdGUKLSAgICAgICAgLy8gYWxzbywgZG9u
J3QgbG9hZCBzdHlsZSBzaGVldHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzCi0gICAgICAgIGlm
IChtX21lZGlhLmlzTnVsbCgpIHx8IG1fbWVkaWEuY29udGFpbnMoInNjcmVlbiIpIHx8IG1fbWVk
aWEuY29udGFpbnMoImFsbCIpIHx8IG1fbWVkaWEuY29udGFpbnMoInByaW50IikpIHsKLQotICAg
ICAgICAgICAgLy8gQWRkIG91cnNlbHZlcyBhcyBhIHBlbmRpbmcgc2hlZXQsIGJ1dCBvbmx5IGlm
IHdlIGFyZW4ndCBhbiBhbHRlcm5hdGUgCi0gICAgICAgICAgICAvLyBzdHlsZXNoZWV0LiAgQWx0
ZXJuYXRlIHN0eWxlc2hlZXRzIGRvbid0IGhvbGQgdXAgcmVuZGVyIHRyZWUgY29uc3RydWN0aW9u
LgotICAgICAgICAgICAgaWYgKCFpc0FsdGVybmF0ZSgpKQotICAgICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIGNoc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5kZXByZWNhdGVk
U3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICAgICAg
ICAgIGlmIChtX2xvYWRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5
bGVzaGVldExvYWRlZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Nh
Y2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbG9h
ZGluZyA9IHRydWU7Ci0gICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9j
TG9hZGVyKCktPnJlcXVlc3RTdHlsZVNoZWV0KG1fdXJsLCBjaHNldCk7Ci0gICAgICAgICAgICBp
ZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhp
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobV9zaGVldCkgewotICAgICAgICAv
LyB3ZSBubyBsb25nZXIgY29udGFpbiBhIHN0eWxlc2hlZXQsIGUuZy4gcGVyaGFwcyByZWwgb3Ig
dHlwZSB3YXMgY2hhbmdlZAotICAgICAgICBtX3NoZWV0ID0gMDsKLSAgICAgICAgZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotICAgIH0KLX0KLQotdm9pZCBIVE1MTGlua0VsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKLSAgICBwcm9jZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpOwotICAgIHByb2Nlc3MoKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwsIGNvbnN0IFN0cmluZyAmc2hlZXRTdHIpCi17
Ci0gICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0gICAgbV9zaGVl
dC0+cGFyc2VTdHJpbmcoc2hlZXRTdHIsICFkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0K
LSAgICBNZWRpYUxpc3QgKm1lZGlhID0gbmV3IE1lZGlhTGlzdChtX3NoZWV0LmdldCgpLCBtX21l
ZGlhKTsKLSAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYSk7Ci0KLSAgICBtX2xvYWRpbmcgPSBm
YWxzZTsKLQotICAgIC8vIFRlbGwgdGhlIGRvYyBhYm91dCB0aGUgc2hlZXQuCi0gICAgaWYgKCFp
c0xvYWRpbmcoKSAmJiBtX3NoZWV0ICYmICFpc0Rpc2FibGVkKCkgJiYgIWlzQWx0ZXJuYXRlKCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1M
TGlua0VsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX3NoZWV0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQo
KSktPmlzTG9hZGluZygpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2hlZXRMb2FkZWQo
KQotewotICAgIGlmICghaXNMb2FkaW5nKCkgJiYgIWlzRGlzYWJsZWQoKSAmJiAhaXNBbHRlcm5h
dGUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29s
IEhUTUxMaW5rRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAot
ewotICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHI7Ci19Ci0KLWJvb2wgSFRNTExp
bmtFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUo
ZGlzYWJsZWRBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERp
c2FibGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwg
ZGlzYWJsZWQgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpjaGFyc2V0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLX0KLQot
dm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENoYXJzZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxM
aW5rRWxlbWVudDo6aHJlZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGdldEF0dHJpYnV0ZShocmVmQXR0cikpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0SHJlZihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVm
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpocmVmbGFuZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShocmVmbGFuZ0F0dHIpOwotfQotCi12b2lk
IEhUTUxMaW5rRWxlbWVudDo6c2V0SHJlZmxhbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoaHJlZmxhbmdBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlu
a0VsZW1lbnQ6Om1lZGlhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlh
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxMaW5rRWxlbWVudDo6cmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHJlbEF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0UmVsKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHJlbEF0dHIsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6cmV2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHJldkF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0UmV2KGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHJldkF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0
VGFyZ2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtF
bGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTE1ldGFF
bGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChtZXRh
VGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxNZXRhRWxlbWVudDo6fkhUTUxNZXRhRWxlbWVudCgpCi17
Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBodHRwX2VxdWl2QXR0
cikgewotICAgICAgICBtX2VxdWl2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2Vzcygp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbnRlbnRBdHRyKSB7Ci0gICAgICAg
IG1fY29udGVudCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICAvLyBEbyBub3RoaW5n
LgotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
Ci17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgcHJvY2Vz
cygpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2VzcygpCi17Ci0gICAgLy8gR2V0
IHRoZSBkb2N1bWVudCB0byBwcm9jZXNzIHRoZSB0YWcsIGJ1dCBvbmx5IGlmIHdlJ3JlIGFjdHVh
bGx5IHBhcnQgb2YgRE9NIHRyZWUgKGNoYW5naW5nIGEgbWV0YSB0YWcgd2hpbGUKLSAgICAvLyBp
dCdzIG5vdCBpbiB0aGUgdHJlZSBzaG91bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBkb2N1
bWVudCkKLSAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX2VxdWl2LmlzTnVsbCgpICYmICFtX2Nv
bnRlbnQuaXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnByb2Nlc3NIdHRwRXF1aXYobV9l
cXVpdixtX2NvbnRlbnQpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MTWV0YUVsZW1lbnQ6OnNldENvbnRlbnQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY29udGVudEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxNZXRh
RWxlbWVudDo6aHR0cEVxdWl2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGh0
dHBfZXF1aXZBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldEh0dHBFcXVpdihj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1l
bnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFt
ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6c2NoZW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNjaGVtZUF0dHIpOwotfQotCi12b2lkIEhU
TUxNZXRhRWxlbWVudDo6c2V0U2NoZW1lKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHNjaGVtZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1IVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50KHNjcmlwdFRhZywgZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3Jl
YXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFsc2UpCi17Ci19Ci0KLUhUTUxTY3Jp
cHRFbGVtZW50Ojp+SFRNTFNjcmlwdEVsZW1lbnQoKQotewotICAgIGlmIChtX2NhY2hlZFNjcmlw
dCkKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmRlcmVmKHRoaXMpOwotfQotCi1ib29sIEhUTUxT
Y3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyOwotfQotCi12b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKQotewotICAgIC8vIElmIGEgbm9kZSBpcyBpbnNlcnRl
ZCBhcyBhIGNoaWxkIG9mIHRoZSBzY3JpcHQgZWxlbWVudAotICAgIC8vIGFuZCB0aGUgc2NyaXB0
IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gd2UgZXZh
bHVhdGUgdGhlIHNjcmlwdC4KLSAgICBpZiAoIW1fY3JlYXRlZEJ5UGFyc2VyICYmIGluRG9jdW1l
bnQoKSAmJiBmaXJzdENoaWxkKCkpCi0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCkt
PlVSTCgpLCB0ZXh0KCkpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IHNyY0F0
dHIpIHsKLSAgICAgICAgaWYgKG1fZXZhbHVhdGVkIHx8IG1fY2FjaGVkU2NyaXB0IHx8IG1fY3Jl
YXRlZEJ5UGFyc2VyIHx8ICFpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gRklYTUU6IEV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xlc3MgZG9jdW1lbnRzLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzI3Ci0gICAgICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmwgPSBhdHRyLT52
YWx1ZSgpOwotICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIERlcHJl
Y2F0ZWRTdHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuZGVwcmVjYXRl
ZFN0cmluZygpOwotICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudCgpLT5kb2NM
b2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1cmwsIGNoYXJzZXQpOwotICAgICAgICAgICAgbV9jYWNo
ZWRTY3JpcHQtPnJlZih0aGlzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUg
PT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQs
IGF0dHIpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIo
KQotewotICAgIC8vIFRoZSBwYXJzZXIganVzdCByZWFjaGVkIDwvc2NyaXB0Pi4gSWYgd2UgaGF2
ZSBubyBzcmMgYW5kIG5vIHRleHQsCi0gICAgLy8gYWxsb3cgZHluYW1pYyBsb2FkaW5nIGxhdGVy
LgotICAgIGlmIChnZXRBdHRyaWJ1dGUoc3JjQXR0cikuaXNFbXB0eSgpICYmIHRleHQoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHNldENyZWF0ZWRCeVBhcnNlcihmYWxzZSk7Ci0gICAgSFRNTEVsZW1l
bnQ6OmNsb3NlUmVuZGVyZXIoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwotCi0gICAgYXNzZXJ0KCFtX2NhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAobV9jcmVhdGVk
QnlQYXJzZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGSVhNRTogRXZlbnR1YWxs
eSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBh
IAotICAgIC8vIHZpZXdsZXNzIGRvY3VtZW50IGJ1dCB0aGlzJ2xsIGRvIGZvciBub3cuCi0gICAg
Ly8gU2VlIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcy
NwotICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAg
IGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNoYXJzZXQg
PSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAg
bV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1
cmwsIGNoYXJzZXQpOwotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVmKHRoaXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9k
ZSwgd2Ugc2hvdWxkbid0IGV2YWx1YXRlIHRoZSBzY3JpcHQKLSAgICAvLyBiZWNhdXNlIGlmIGEg
c2NyaXB0IGlzIGluc2VydGVkIGFmdGVyd2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRl
eHQpCi0gICAgLy8gaXQgc2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9u
bHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9uY2UuCi0gICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IHRl
eHQoKTsgICAgCi0gICAgaWYgKCFzY3JpcHRTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBldmFs
dWF0ZVNjcmlwdChkb2N1bWVudCgpLT5VUkwoKSwgc2NyaXB0U3RyaW5nKTsKLX0KLQotdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewot
ICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkU2Ny
aXB0ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlz
aGVkKENhY2hlZE9iamVjdCogbykKLXsKLSAgICBDYWNoZWRTY3JpcHQgKmNzID0gc3RhdGljX2Nh
c3Q8Q2FjaGVkU2NyaXB0ICo+KG8pOwotCi0gICAgYXNzZXJ0KGNzID09IG1fY2FjaGVkU2NyaXB0
KTsKLQotICAgIGlmIChjcy0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBkaXNwYXRjaEhUTUxF
dmVudChlcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1
YXRlU2NyaXB0KGNzLT51cmwoKSwgY3MtPnNjcmlwdCgpKTsKLSAgICAgICAgZGlzcGF0Y2hIVE1M
RXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwotICAgIH0KLQotICAgIGNzLT5kZXJlZih0
aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlwdCA9IDA7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgVVJMLCBjb25zdCBTdHJpbmcmIHNjcmlw
dCkKLXsKLSAgICBpZiAobV9ldmFsdWF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBG
cmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmIChmcmFtZSkgewotICAg
ICAgICBLSlNQcm94eSAqcHJveHkgPSBmcmFtZS0+alNjcmlwdCgpOwotICAgICAgICBpZiAocHJv
eHkpIHsKLSAgICAgICAgICAgIG1fZXZhbHVhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByb3h5
LT5ldmFsdWF0ZShVUkwsIDAsIHNjcmlwdCwgMCk7Ci0gICAgICAgICAgICBEb2N1bWVudDo6dXBk
YXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVN0cmluZyBI
VE1MU2NyaXB0RWxlbWVudDo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHZhbCA9ICIiOwot
ICAgIAotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCAr
PSBzdGF0aWNfY2FzdDxUZXh0ICo+KG4pLT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biB2YWw7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbnVtQ2hpbGRy
ZW4gPSBjaGlsZE5vZGVDb3VudCgpOwotICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA9PSAxICYm
IGZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHQg
Kj4oZmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh2YWx1ZSwgZWMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA+IDApIHsKLSAgICAgICAgcmVtb3ZlQ2hp
bGRyZW4oKTsKLSAgICB9Ci0gICAgCi0gICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZWMpOwotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1l
bnQ6Omh0bWxGb3IoKSBjb25zdAotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVk
IGZvciBmdXR1cmUgdXNlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBIVE1MU2Ny
aXB0RWxlbWVudDo6c2V0SHRtbEZvcihjb25zdCBTdHJpbmcgJi8qdmFsdWUqLykKLXsKLSAgICAv
LyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5n
IEhUTUxTY3JpcHRFbGVtZW50OjpldmVudCgpIGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEg
c2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRFdmVudChjb25zdCBTdHJpbmcgJi8qdmFsdWUq
LykKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4K
LX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpjaGFyc2V0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxl
bWVudDo6c2V0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwotfQotCi1ib29sIEhUTUxTY3JpcHRFbGVtZW50OjpkZWZl
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGVmZXJBdHRyKS5pc051bGwo
KTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0RGVmZXIoYm9vbCBkZWZlcikKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoZGVmZXJBdHRyLCBkZWZlciA/ICIiIDogMCk7Ci19Ci0KLVN0cmlu
ZyBIVE1MU2NyaXB0RWxlbWVudDo6c3JjKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKLX0KLQotdm9pZCBIVE1MU2Ny
aXB0RWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0eXBl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBI
VE1MRWxlbWVudChzdHlsZVRhZywgZG9jKQotewotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotfQot
Ci0vLyBvdGhlciBzdHVmZi4uLgotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSB0eXBlQXR0cikKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKS5s
b3dlcigpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCi0gICAgICAg
IG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAg
IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwot
fQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAg
ICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkK
LSAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi12b2lkIEhU
TUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoKQotewotICAgIFN0cmluZyB0ZXh0ID0gIiI7Ci0KLSAgICBmb3Ig
KE5vZGUqIGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAg
ICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDREFU
QV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDT01NRU5UX05PREUpCi0gICAgICAg
ICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOwotCi0gICAgaWYgKG1fc2hlZXQpIHsKLSAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9h
ZGluZygpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOyAvLyBS
ZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHNoZWV0IGxpc3QuCi0gICAgICAgIG1fc2hlZXQgPSAw
OwotICAgIH0KLQotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotICAgIGlmICgobV90eXBlLmlzRW1w
dHkoKSB8fCBtX3R5cGUgPT0gInRleHQvY3NzIikgLy8gVHlwZSBtdXN0IGJlIGVtcHR5IG9yIENT
UwotICAgICAgICAgJiYgKG1fbWVkaWEuaXNOdWxsKCkgfHwgbV9tZWRpYS5jb250YWlucygic2Ny
ZWVuIikgfHwgbV9tZWRpYS5jb250YWlucygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlucygicHJp
bnQiKSkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAg
IG1fbG9hZGluZyA9IHRydWU7Ci0gICAgICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0
aGlzKTsKLSAgICAgICAgbV9zaGVldC0+cGFyc2VTdHJpbmcodGV4dCwgIWRvY3VtZW50KCktPmlu
Q29tcGF0TW9kZSgpKTsKLSAgICAgICAgTWVkaWFMaXN0ICptZWRpYSA9IG5ldyBNZWRpYUxpc3Qo
bV9zaGVldC5nZXQoKSwgbV9tZWRpYSk7Ci0gICAgICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlh
KTsKLSAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xvYWRp
bmcoKSAmJiBtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7
Ci19Ci0KLWJvb2wgSFRNTFN0eWxlRWxlbWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9sb2FkaW5nKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6c2hlZXRMb2FkZWQoKQotewotICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGRv
Y3VtZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MU3R5bGVFbGVtZW50
OjpkaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRB
dHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChi
b29sIGRpc2FibGVkKQotewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVk
ID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUobWVkaWFBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MU3R5bGVFbGVtZW50Ojp0
eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQot
dm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotSFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnQodGl0bGVUYWcsIGRvYyksIG1fdGl0bGUoIiIpCi17Ci19Ci0KLUhU
TUxUaXRsZUVsZW1lbnQ6On5IVE1MVGl0bGVFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MVGl0
bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUobV90aXRsZSwg
dGhpcyk7Ci19Ci0KLXZvaWQgSFRNTFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
Ci17Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVu
dCgpLT5yZW1vdmVUaXRsZSh0aGlzKTsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoKQotewotICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsKLSAg
ICBtX3RpdGxlID0gIiI7Ci0gICAgZm9yIChOb2RlKiBjID0gZmlyc3RDaGlsZCgpOyBjICE9IDA7
IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBURVhU
X05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDREFUQV9TRUNUSU9OX05PREUpCi0gICAgICAgICAg
ICBtX3RpdGxlICs9IGMtPm5vZGVWYWx1ZSgpOwotICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAg
ICAgIGRvY3VtZW50KCktPnNldFRpdGxlKG1fdGl0bGUsIHRoaXMpOwotfQotCi1TdHJpbmcgSFRN
TFRpdGxlRWxlbWVudDo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHZhbCA9ICIiOwotICAg
IAotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCArPSBz
dGF0aWNfY2FzdDxUZXh0ICo+KG4pLT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2
YWw7Ci19Ci0KLXZvaWQgSFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnZh
bHVlKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGludCBudW1DaGlsZHJlbiA9
IGNoaWxkTm9kZUNvdW50KCk7Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmly
c3RDaGlsZCgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCAqPihm
aXJzdENoaWxkKCkpLT5zZXREYXRhKHZhbHVlLCBlYyk7Ci0gICAgfSBlbHNlIHsgIAotICAgICAg
ICBpZiAobnVtQ2hpbGRyZW4gPiAwKSB7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZHJlbigpOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRl
eHROb2RlKHZhbHVlLmltcGwoKSksIGVjKTsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6IGh0bWwvSFRN
TEJhc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE0MzI1KQorKysgaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSwzMCArMjEsMTcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICovCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJodG1sX2hlYWRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEJhc2VFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVk
U2NyaXB0LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1
ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5oIgotI2luY2x1ZGUgImNzc2hlbHBlci5oIgotI2luY2x1
ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJjc3No
ZWxwZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKIEhUTUxCYXNlRWxlbWVudDo6SFRN
TEJhc2VFbGVtZW50KERvY3VtZW50ICpkb2MpCiAgICAgOiBIVE1MRWxlbWVudChiYXNlVGFnLCBk
b2MpCkBAIC03OSw4ICs2Niw4IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW4KIAogICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNlIGVs
ZW1lbnQuLi4KICAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRpcGxl
IGJhc2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCi0gICAgZG9j
dW1lbnQoKS0+c2V0QmFzZVVSTCggRGVwcmVjYXRlZFN0cmluZzo6bnVsbCApOwotICAgIGRvY3Vt
ZW50KCktPnNldEJhc2VUYXJnZXQoIERlcHJlY2F0ZWRTdHJpbmc6Om51bGwgKTsKKyAgICBkb2N1
bWVudCgpLT5zZXRCYXNlVVJMKERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOworICAgIGRvY3VtZW50
KCktPnNldEJhc2VUYXJnZXQoRGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7CiB9CiAKIHZvaWQgSFRN
TEJhc2VFbGVtZW50Ojpwcm9jZXNzKCkKQEAgLTg4LDExICs3NSwxMSBAQCB2b2lkIEhUTUxCYXNl
RWxlbWVudDo6cHJvY2VzcygpCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmKCFtX2hyZWYuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0g
ICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoIEtVUkwoIGRvY3VtZW50KCktPmZyYW1lKCkt
PnVybCgpLCBtX2hyZWYuZGVwcmVjYXRlZFN0cmluZygpICkudXJsKCkgKTsKKyAgICBpZiAoIW1f
aHJlZi5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+c2V0QmFzZVVSTChLVVJMKGRvY3VtZW50KCktPmZyYW1lKCktPnVybCgpLCBtX2hyZWYuZGVw
cmVjYXRlZFN0cmluZygpKS51cmwoKSk7CiAKLSAgICBpZighbV90YXJnZXQuaXNFbXB0eSgpKQot
ICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlVGFyZ2V0KCBtX3RhcmdldC5kZXByZWNhdGVkU3Ry
aW5nKCkgKTsKKyAgICBpZiAoIW1fdGFyZ2V0LmlzRW1wdHkoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+c2V0QmFzZVRhcmdldChtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5nKCkpOwogCiAgICAgLy8g
IyMjIHNob3VsZCBjaGFuZ2luZyBhIGRvY3VtZW50J3MgYmFzZSBVUkwgZHluYW1pY2FsbHkgYXV0
b21hdGljYWxseSB1cGRhdGUgYWxsIGltYWdlcywgc3R5bGVzaGVldHMgZXRjPwogfQpAQCAtMTA3
LDc2MyArOTQsNCBAQCB2b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0CiAg
ICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1IVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChEb2N1bWVudCAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnQobGlua1RhZywgZG9jKQotewotICAgIG1fbG9hZGluZyA9IGZhbHNl
OwotICAgIG1fY2FjaGVkU2hlZXQgPSAwOwotICAgIG1faXNTdHlsZVNoZWV0ID0gbV9pc0ljb24g
PSBtX2FsdGVybmF0ZSA9IGZhbHNlOwotICAgIG1fZGlzYWJsZWRTdGF0ZSA9IDA7Ci19Ci0KLUhU
TUxMaW5rRWxlbWVudDo6fkhUTUxMaW5rRWxlbWVudCgpCi17Ci0gICAgaWYgKG1fY2FjaGVkU2hl
ZXQpCi0gICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwotfQotCi12b2lkIEhUTUxM
aW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCkKLXsKLSAgICBpbnQg
b2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0ZTsKLSAgICBtX2Rpc2FibGVkU3RhdGUg
PSBfZGlzYWJsZWQgPyAyIDogMTsKLSAgICBpZiAob2xkRGlzYWJsZWRTdGF0ZSAhPSBtX2Rpc2Fi
bGVkU3RhdGUpIHsKLSAgICAgICAgLy8gSWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3
aGlsZSB0aGUgc2hlZXQgaXMgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCi0gICAgICAg
IC8vIHBlcmZvcm0gdGhyZWUgY2hlY2tzOgotICAgICAgICBpZiAoaXNMb2FkaW5nKCkpIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21lcyBkaXNhYmxlZCB3aGls
ZSBpdCB3YXMgbG9hZGluZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKLSAgICAgICAgICAgIC8vIGEg
bWFpbiBzaGVldCBvciBhIHNoZWV0IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCB2aWEgc2Ny
aXB0LCB0aGVuIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBs
aXN0IG9mIHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSA9
PSAyICYmICghbV9hbHRlcm5hdGUgfHwgb2xkRGlzYWJsZWRTdGF0ZSA9PSAxKSkKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci0KLSAgICAgICAgICAgIC8v
IENoZWNrICMyOiBBbiBhbHRlcm5hdGUgc2hlZXQgYmVjb21lcyBlbmFibGVkIHdoaWxlIGl0IGlz
IHN0aWxsIGxvYWRpbmcuCi0gICAgICAgICAgICBpZiAobV9hbHRlcm5hdGUgJiYgbV9kaXNhYmxl
ZFN0YXRlID09IDEpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0
KCk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrICMzOiBBIG1haW4gc2hlZXQgYmVjb21lcyBlbmFi
bGVkIHdoaWxlIGl0IHdhcyBzdGlsbCBsb2FkaW5nIGFuZAotICAgICAgICAgICAgLy8gYWZ0ZXIg
aXQgd2FzIGRpc2FibGVkIHZpYSBzY3JpcHQuICBJdCB0YWtlcyByZWFsbHkgdGVycmlibGUgY29k
ZSB0byBtYWtlIHRoaXMKLSAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBkb3VibGUgdG9nZ2xlIGZv
ciBubyByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCi0gICAgICAgICAgICAv
LyB2aXJ0dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8gYWJvdXQgMTIgZW5hYmxl
L2Rpc2FibGVzIG9uIG9ubHkgMwotICAgICAgICAgICAgLy8gc2hlZXRzLiA6KQotICAgICAgICAg
ICAgaWYgKCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSAmJiBvbGREaXNhYmxl
ZFN0YXRlID09IDIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0
KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBzaGVldCBpcyBhbHJlYWR5IGxvYWRpbmcganVz
dCBiYWlsLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTG9h
ZCB0aGUgc2hlZXQsIHNpbmNlIGl0J3MgbmV2ZXIgYmVlbiBsb2FkZWQgYmVmb3JlLgotICAgICAg
ICBpZiAoIW1fc2hlZXQgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEpCi0gICAgICAgICAgICBwcm9j
ZXNzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxl
U2VsZWN0b3IoKTsgLy8gVXBkYXRlIHRoZSBzdHlsZSBzZWxlY3Rvci4KLSAgICB9Ci19Ci0KLXZv
aWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7Ci0gICAgICAgIHRv
a2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCkpOwotICAgICAgICBwcm9jZXNzKCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKLSAgICAgICAgbV91cmwg
PSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7Ci0gICAg
ICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikg
ewotICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBwcm9jZXNzKCk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKSB7Ci0gICAgICAgIG1fbWVk
aWEgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgICAgICBw
cm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7
Ci0gICAgICAgIHNldERpc2FibGVkU3RhdGUoIWF0dHItPmlzTnVsbCgpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12
b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3Ry
aW5nJiByZWxTdHIpCi17Ci0gICAgbV9pc1N0eWxlU2hlZXQgPSBtX2lzSWNvbiA9IG1fYWx0ZXJu
YXRlID0gZmFsc2U7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZWwgPSByZWxTdHIuZGVwcmVjYXRl
ZFN0cmluZygpLmxvd2VyKCk7Ci0gICAgaWYgKHJlbCA9PSAic3R5bGVzaGVldCIpCi0gICAgICAg
IG1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChyZWwgPT0gImljb24iIHx8IHJl
bCA9PSAic2hvcnRjdXQgaWNvbiIpCi0gICAgICAgIG1faXNJY29uID0gdHJ1ZTsKLSAgICBlbHNl
IGlmIChyZWwgPT0gImFsdGVybmF0ZSBzdHlsZXNoZWV0IiB8fCByZWwgPT0gInN0eWxlc2hlZXQg
YWx0ZXJuYXRlIikKLSAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSBtX2FsdGVybmF0ZSA9IHRydWU7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRva2VuaXplIHRoZSByZWwgYXR0cmlidXRlIGFuZCBz
ZXQgYml0cyBiYXNlZCBvbiBzcGVjaWZpYyBrZXl3b3JkcyB0aGF0IHdlIGZpbmQuCi0gICAgICAg
IHJlbC5yZXBsYWNlKCdcbicsICcgJyk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IGxp
c3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCByZWwpOyAgICAgICAgCi0gICAg
ICAgIGZvciAoRGVwcmVjYXRlZFN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGkgPSBsaXN0LmJlZ2luKCk7
IGkgIT0gbGlzdC5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKmkgPT0gInN0eWxlc2hl
ZXQiKQotICAgICAgICAgICAgICAgIG1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKCppID09ICJhbHRlcm5hdGUiKQotICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCppID09ICJpY29uIikKLSAgICAgICAgICAg
ICAgICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSFRNTExp
bmtFbGVtZW50Ojpwcm9jZXNzKCkKLXsKLSAgICBpZiAoIWluRG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU3RyaW5nIHR5cGUgPSBtX3R5cGUubG93ZXIoKTsKLSAgICAKLSAgICBG
cmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAgLy8gSUUgZXh0ZW5zaW9u
OiBsb2NhdGlvbiBvZiBzbWFsbCBpY29uIGZvciBsb2NhdGlvbmJhciAvIGJvb2ttYXJrcwotICAg
IGlmIChmcmFtZSAmJiBtX2lzSWNvbiAmJiAhbV91cmwuaXNFbXB0eSgpICYmICFmcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKSAvLyBNb3ppbGxh
IGV4dGVuc2lvbiB0byBJRSBleHRlbnNpb246IGljb24gc3BlY2lmaWVkIHdpdGggdHlwZQotICAg
ICAgICAgICAgZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0VHlwZWRJY29uVVJMKEtVUkwo
bV91cmwuZGVwcmVjYXRlZFN0cmluZygpKSwgdHlwZSk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAg
ICAgICBmcmFtZS0+YnJvd3NlckV4dGVuc2lvbigpLT5zZXRJY29uVVJMKEtVUkwobV91cmwuZGVw
cmVjYXRlZFN0cmluZygpKSk7Ci0gICAgfQotCi0gICAgLy8gU3R5bGVzaGVldAotICAgIC8vIFRo
aXMgd2FzIGJ1Z2d5IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9ImFsdGVy
bmF0ZSI+LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1kd2gKLSAg
ICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IDIgJiYgKHR5cGUuY29udGFpbnMoInRleHQvY3NzIikg
fHwgbV9pc1N0eWxlU2hlZXQpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgLy8g
bm8gbmVlZCB0byBsb2FkIHN0eWxlIHNoZWV0cyB3aGljaCBhcmVuJ3QgZm9yIHRoZSBzY3JlZW4g
b3V0cHV0Ci0gICAgICAgIC8vICMjIyB0aGVyZSBtYXkgYmUgaW4gc29tZSBzaXR1YXRpb25zIGUu
Zy4gZm9yIGFuIGVkaXRvciBvciBzY3JpcHQgdG8gbWFuaXB1bGF0ZQotICAgICAgICAvLyBhbHNv
LCBkb24ndCBsb2FkIHN0eWxlIHNoZWV0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMKLSAgICAg
ICAgaWYgKG1fbWVkaWEuaXNOdWxsKCkgfHwgbV9tZWRpYS5jb250YWlucygic2NyZWVuIikgfHwg
bV9tZWRpYS5jb250YWlucygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlucygicHJpbnQiKSkgewot
Ci0gICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIGFzIGEgcGVuZGluZyBzaGVldCwgYnV0IG9u
bHkgaWYgd2UgYXJlbid0IGFuIGFsdGVybmF0ZSAKLSAgICAgICAgICAgIC8vIHN0eWxlc2hlZXQu
ICBBbHRlcm5hdGUgc3R5bGVzaGVldHMgZG9uJ3QgaG9sZCB1cCByZW5kZXIgdHJlZSBjb25zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICBpZiAoIWlzQWx0ZXJuYXRlKCkpCi0gICAgICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgY2hzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fbG9hZGluZykgewotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgp
LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFN0eWxlU2hlZXQobV91cmwsIGNoc2V0KTsKLSAgICAgICAg
ICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJl
Zih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChtX3NoZWV0KSB7Ci0gICAg
ICAgIC8vIHdlIG5vIGxvbmdlciBjb250YWluIGEgc3R5bGVzaGVldCwgZS5nLiBwZXJoYXBzIHJl
bCBvciB0eXBlIHdhcyBjaGFuZ2VkCi0gICAgICAgIG1fc2hlZXQgPSAwOwotICAgICAgICBkb2N1
bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci0gICAgfQotfQotCi12b2lkIEhUTUxMaW5r
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpOwotICAgIHByb2Nlc3MoKTsKLX0KLQotdm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwgY29uc3QgU3RyaW5nICZzaGVldFN0
cikKLXsKLSAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgdXJsKTsKLSAgICBt
X3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldFN0ciwgIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgp
KTsKLQotICAgIE1lZGlhTGlzdCAqbWVkaWEgPSBuZXcgTWVkaWFMaXN0KG1fc2hlZXQuZ2V0KCks
IG1fbWVkaWEpOwotICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlhKTsKLQotICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwotCi0gICAgLy8gVGVsbCB0aGUgZG9jIGFib3V0IHRoZSBzaGVldC4KLSAgICBp
ZiAoIWlzTG9hZGluZygpICYmIG1fc2hlZXQgJiYgIWlzRGlzYWJsZWQoKSAmJiAhaXNBbHRlcm5h
dGUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29s
IEhUTUxMaW5rRWxlbWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobV9sb2FkaW5n
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0
LmdldCgpKS0+aXNMb2FkaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzaGVldExv
YWRlZCgpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhaXNEaXNhYmxlZCgpICYmICFpc0Fs
dGVybmF0ZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci19Ci0K
LWJvb2wgSFRNTExpbmtFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBocmVmQXR0cjsKLX0KLQotYm9vbCBI
VE1MTGlua0VsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJp
YnV0ZShkaXNhYmxlZEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6
c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRB
dHRyLCBkaXNhYmxlZCA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OmNo
YXJzZXQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwot
fQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTExpbmtF
bGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OmhyZWZsYW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhyZWZsYW5nQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmbGFuZyhjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShocmVmbGFuZ0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhU
TUxMaW5rRWxlbWVudDo6bWVkaWEoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
bWVkaWFBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldE1lZGlhKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG1lZGlhQXR0ciwgdmFsdWUpOwotfQot
Ci1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZWwoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUocmVsQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRSZWwoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocmVsQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZXYoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUocmV2QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRSZXYo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocmV2QXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50
OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFy
Z2V0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0eXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1M
TWV0YUVsZW1lbnQ6OkhUTUxNZXRhRWxlbWVudChEb2N1bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50
KG1ldGFUYWcsIGRvYykKLXsKLX0KLQotSFRNTE1ldGFFbGVtZW50Ojp+SFRNTE1ldGFFbGVtZW50
KCkKLXsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGh0dHBfZXF1
aXZBdHRyKSB7Ci0gICAgICAgIG1fZXF1aXYgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBwcm9j
ZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29udGVudEF0dHIpIHsKLSAg
ICAgICAgbV9jb250ZW50ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgIC8vIERvIG5v
dGhpbmcuCi0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBw
cm9jZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkKLXsKLSAgICAv
LyBHZXQgdGhlIGRvY3VtZW50IHRvIHByb2Nlc3MgdGhlIHRhZywgYnV0IG9ubHkgaWYgd2UncmUg
YWN0dWFsbHkgcGFydCBvZiBET00gdHJlZSAoY2hhbmdpbmcgYSBtZXRhIHRhZyB3aGlsZQotICAg
IC8vIGl0J3Mgbm90IGluIHRoZSB0cmVlIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3Qgb24gdGhl
IGRvY3VtZW50KQotICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIW1fZXF1aXYuaXNOdWxsKCkgJiYg
IW1fY29udGVudC5pc051bGwoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+cHJvY2Vzc0h0dHBFcXVp
dihtX2VxdWl2LG1fY29udGVudCk7Ci19Ci0KLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6OmNvbnRl
bnQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29udGVudEF0dHIpOwotfQot
Ci12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0Q29udGVudChjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShjb250ZW50QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRN
TE1ldGFFbGVtZW50OjpodHRwRXF1aXYoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoaHR0cF9lcXVpdkF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0SHR0cEVx
dWl2KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGh0dHBfZXF1aXZB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Om5hbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRh
RWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpzY2hlbWUo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2NoZW1lQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTE1ldGFFbGVtZW50OjpzZXRTY2hlbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoc2NoZW1lQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChEb2N1bWVudCAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwg
bV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKLXsKLX0KLQotSFRN
TFNjcmlwdEVsZW1lbnQ6On5IVE1MU2NyaXB0RWxlbWVudCgpCi17Ci0gICAgaWYgKG1fY2FjaGVk
U2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7Ci19Ci0KLWJvb2wg
SFRNTFNjcmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QK
LXsKLSAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHI7Ci19Ci0KLXZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgLy8gSWYgYSBub2RlIGlzIGlu
c2VydGVkIGFzIGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAgLy8gYW5kIHRoZSBz
Y3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQKLSAgICAvLyB3
ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgotICAgIGlmICghbV9jcmVhdGVkQnlQYXJzZXIgJiYgaW5E
b2N1bWVudCgpICYmIGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoZG9jdW1l
bnQoKS0+VVJMKCksIHRleHQoKSk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
c3JjQXR0cikgewotICAgICAgICBpZiAobV9ldmFsdWF0ZWQgfHwgbV9jYWNoZWRTY3JpcHQgfHwg
bV9jcmVhdGVkQnlQYXJzZXIgfHwgIWluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBGSVhNRTogRXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVzcyBkb2N1bWVu
dHMuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3MjcKLSAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVybCA9IGF0
dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCkt
PmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVybCwgY2hhcnNldCk7Ci0gICAgICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+cmVmKHRoaXMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRy
TmFtZSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGxvYWRF
dmVudCwgYXR0cik7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6Y2xvc2VSZW5k
ZXJlcigpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9zY3JpcHQ+LiBJZiB3
ZSBoYXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxvdyBkeW5hbWljIGxvYWRpbmcg
bGF0ZXIuCi0gICAgaWYgKGdldEF0dHJpYnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkgJiYgdGV4dCgp
LmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q3JlYXRlZEJ5UGFyc2VyKGZhbHNlKTsKLSAgICBIVE1M
RWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCk7Ci0KLSAgICBhc3NlcnQoIW1fY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChtX2Ny
ZWF0ZWRCeVBhcnNlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1FOiBFdmVu
dHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBpbnNlcnRlZCBp
bnRvIGEgCi0gICAgLy8gdmlld2xlc3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8gZm9yIG5vdy4K
LSAgICAvLyBTZWUgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NzI3Ci0gICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmwgPSBnZXRBdHRyaWJ1dGUoc3JjQXR0cik7
Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hh
cnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAg
ICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2Ny
aXB0KHVybCwgY2hhcnNldCk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZWYodGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFuIGVtcHR5IHNjcmlw
dCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAotICAgIC8vIGJlY2F1c2Ug
aWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0ZXh0IG9yIGlu
bmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZhbHVhdGVTY3Jp
cHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBTdHJpbmcgc2NyaXB0U3RyaW5n
ID0gdGV4dCgpOyAgICAKLSAgICBpZiAoIXNjcmlwdFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAg
IGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPlVSTCgpLCBzY3JpcHRTdHJpbmcpOwotfQotCi12
b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBIVE1M
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgaWYgKG1fY2FjaGVkU2NyaXB0
KSB7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKLSAgICAgICAgbV9jYWNo
ZWRTY3JpcHQgPSAwOwotICAgIH0KLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6bm90aWZ5
RmluaXNoZWQoQ2FjaGVkT2JqZWN0KiBvKQotewotICAgIENhY2hlZFNjcmlwdCAqY3MgPSBzdGF0
aWNfY2FzdDxDYWNoZWRTY3JpcHQgKj4obyk7Ci0KLSAgICBhc3NlcnQoY3MgPT0gbV9jYWNoZWRT
Y3JpcHQpOwotCi0gICAgaWYgKGNzLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgIGRpc3BhdGNo
SFRNTEV2ZW50KGVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
ZXZhbHVhdGVTY3JpcHQoY3MtPnVybCgpLCBjcy0+c2NyaXB0KCkpOwotICAgICAgICBkaXNwYXRj
aEhUTUxFdmVudChsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgY3MtPmRl
cmVmKHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKLX0KLQotdm9pZCBIVE1MU2NyaXB0
RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYg
c2NyaXB0KQotewotICAgIGlmIChtX2V2YWx1YXRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lKSB7
Ci0gICAgICAgIEtKU1Byb3h5ICpwcm94eSA9IGZyYW1lLT5qU2NyaXB0KCk7Ci0gICAgICAgIGlm
IChwcm94eSkgewotICAgICAgICAgICAgbV9ldmFsdWF0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
cHJveHktPmV2YWx1YXRlKFVSTCwgMCwgc2NyaXB0LCAwKTsKLSAgICAgICAgICAgIERvY3VtZW50
Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotU3Ry
aW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgdmFsID0g
IiI7Ci0gICAgCi0gICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQotICAgICAgICAgICAg
dmFsICs9IHN0YXRpY19jYXN0PFRleHQgKj4obiktPmRhdGEoKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHZhbDsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VGV4dChjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGludCBudW1D
aGlsZHJlbiA9IGNoaWxkTm9kZUNvdW50KCk7Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID09
IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VGV4dCAqPihmaXJzdENoaWxkKCkpLT5zZXREYXRhKHZhbHVlLCBlYyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID4gMCkgewotICAgICAgICByZW1v
dmVDaGlsZHJlbigpOwotICAgIH0KLSAgICAKLSAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVUZXh0Tm9kZSh2YWx1ZS5pbXBsKCkpLCBlYyk7Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0
RWxlbWVudDo6aHRtbEZvcigpIGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5czogcmVz
ZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEhU
TUxTY3JpcHRFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyAmLyp2YWx1ZSovKQotewot
ICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgotfQotCi1T
dHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmV2ZW50KCkgY29uc3QKLXsKLSAgICAvLyBET00gTGV2
ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEV2ZW50KGNvbnN0IFN0cmluZyAmLyp2
YWx1ZSovKQotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBmdXR1cmUg
dXNlLgotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmNoYXJzZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwotfQotCi12b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjpzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGNoYXJzZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6
OmRlZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWZlckF0dHIpLmlz
TnVsbCgpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXREZWZlcihib29sIGRlZmVy
KQotewotICAgIHNldEF0dHJpYnV0ZShkZWZlckF0dHIsIGRlZmVyID8gIiIgOiAwKTsKLX0KLQot
U3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwotfQotCi12b2lkIEhU
TUxTY3JpcHRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6
OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQot
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChEb2N1bWVudCAqZG9j
KSA6IEhUTUxFbGVtZW50KHN0eWxlVGFnLCBkb2MpCi17Ci0gICAgbV9sb2FkaW5nID0gZmFsc2U7
Ci19Ci0KLS8vIG90aGVyIHN0dWZmLi4uCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHR5cGVBdHRyKQotICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpLmRvbVN0cmlu
ZygpLmxvd2VyKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikKLSAg
ICAgICAgbV9tZWRpYSA9IGF0dHItPnZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCk7
Ci0gICAgZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQot
ewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIGlmIChtX3No
ZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci19Ci0KLXZv
aWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkKLSAgICAgICAg
ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi12b2lkIEhUTUxTdHlsZUVs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgU3RyaW5nIHRleHQgPSAiIjsKLQotICAg
IGZvciAoTm9kZSogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09IFRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09
IENEQVRBX1NFQ1RJT05fTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IENPTU1FTlRfTk9ERSkKLSAg
ICAgICAgICAgIHRleHQgKz0gYy0+bm9kZVZhbHVlKCk7Ci0KLSAgICBpZiAobV9zaGVldCkgewot
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0LmdldCgpKS0+
aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7
IC8vIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2hlZXQgbGlzdC4KLSAgICAgICAgbV9zaGVl
dCA9IDA7Ci0gICAgfQotCi0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgaWYgKChtX3R5cGUu
aXNFbXB0eSgpIHx8IG1fdHlwZSA9PSAidGV4dC9jc3MiKSAvLyBUeXBlIG11c3QgYmUgZW1wdHkg
b3IgQ1NTCi0gICAgICAgICAmJiAobV9tZWRpYS5pc051bGwoKSB8fCBtX21lZGlhLmNvbnRhaW5z
KCJzY3JlZW4iKSB8fCBtX21lZGlhLmNvbnRhaW5zKCJhbGwiKSB8fCBtX21lZGlhLmNvbnRhaW5z
KCJwcmludCIpKSkgewotICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKLSAg
ICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNo
ZWV0KHRoaXMpOwotICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCAhZG9jdW1lbnQo
KS0+aW5Db21wYXRNb2RlKCkpOwotICAgICAgICBNZWRpYUxpc3QgKm1lZGlhID0gbmV3IE1lZGlh
TGlzdChtX3NoZWV0LmdldCgpLCBtX21lZGlhKTsKLSAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEo
bWVkaWEpOwotICAgICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlz
TG9hZGluZygpICYmIG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2Fk
ZWQoKTsKLX0KLQotYm9vbCBIVE1MU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBjb25zdAotewot
ICAgIGlmIChtX2xvYWRpbmcpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghbV9zaGVl
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0ICo+KG1fc2hlZXQuZ2V0KCkpLT5pc0xvYWRpbmcoKTsKLX0KLQotdm9pZCBIVE1MU3R5
bGVFbGVtZW50OjpzaGVldExvYWRlZCgpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29sIEhUTUxTdHlsZUVs
ZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkaXNh
YmxlZEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldERpc2Fi
bGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZGlz
YWJsZWQgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTFN0eWxlRWxlbWVudDo6bWVkaWEoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKLX0KLQotdm9pZCBI
VE1MU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxTdHlsZUVsZW1l
bnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwot
fQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1IVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KERvY3VtZW50ICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudCh0aXRsZVRhZywgZG9jKSwgbV90aXRsZSgiIikKLXsKLX0K
LQotSFRNTFRpdGxlRWxlbWVudDo6fkhUTUxUaXRsZUVsZW1lbnQoKQotewotfQotCi12b2lkIEhU
TUxUaXRsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLT5zZXRUaXRsZShtX3Rp
dGxlLCB0aGlzKTsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIGRv
Y3VtZW50KCktPnJlbW92ZVRpdGxlKHRoaXMpOwotfQotCi12b2lkIEhUTUxUaXRsZUVsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgp
OwotICAgIG1fdGl0bGUgPSAiIjsKLSAgICBmb3IgKE5vZGUqIGMgPSBmaXJzdENoaWxkKCk7IGMg
IT0gMDsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09
IFRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IENEQVRBX1NFQ1RJT05fTk9ERSkKLSAgICAg
ICAgICAgIG1fdGl0bGUgKz0gYy0+bm9kZVZhbHVlKCk7Ci0gICAgaWYgKGluRG9jdW1lbnQoKSkK
LSAgICAgICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUobV90aXRsZSwgdGhpcyk7Ci19Ci0KLVN0cmlu
ZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgdmFsID0gIiI7
Ci0gICAgCi0gICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQotICAgICAgICAgICAgdmFs
ICs9IHN0YXRpY19jYXN0PFRleHQgKj4obiktPmRhdGEoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHZhbDsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IG51bUNoaWxk
cmVuID0gY2hpbGROb2RlQ291bnQoKTsKLSAgICAKLSAgICBpZiAobnVtQ2hpbGRyZW4gPT0gMSAm
JiBmaXJzdENoaWxkKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUZXh0
ICo+KGZpcnN0Q2hpbGQoKSktPnNldERhdGEodmFsdWUsIGVjKTsKLSAgICB9IGVsc2UgeyAgCi0g
ICAgICAgIGlmIChudW1DaGlsZHJlbiA+IDApIHsKLSAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3Jl
YXRlVGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZWMpOwotICAgIH0KLX0KLQogfQpJbmRleDogaHRt
bC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNDMyNykKKysrIGh0bWwvSFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDE0ICszNSwxNSBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbF9iYXNlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfYmxv
Y2tpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfbGlz
dGltcGwuaCIKLSNpbmNsdWRlICJodG1sX3RhYmxlaW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDE0MzI3KQorKysgaHRtbC9IVE1M
RWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCYXNlRm9udEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQnV0dG9u
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCkBAIC0zNCwxNyArMzUsMjYgQEAKICNpbmNsdWRlICJIVE1MSXNJbmRleEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExl
Z2VuZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTWV0YUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJs
ZUNvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGl0bGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiaHRtbF9iYXNlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBs
LmgiCi0jaW5jbHVkZSAiaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfbGlzdGltcGwu
aCIKLSNpbmNsdWRlICJodG1sX3RhYmxlaW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IGh0bWwvSFRNTE1ldGFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MTWV0
YUVsZW1lbnQuaAkocmV2aXNpb24gMTQzMjUpCisrKyBodG1sL0hUTUxNZXRhRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSwxMjkgKzIxLDEzIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgSFRNTF9IRUFESU1QTF9ICi0jZGVmaW5lIEhUTUxf
SEVBRElNUExfSAorI2lmbmRlZiBIVE1MTWV0YUVsZW1lbnRfSAorI2RlZmluZSBIVE1MTWV0YUVs
ZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVz
aGVldGltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZVNoZWV0
OwotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZFNjcmlwdDsKLWNsYXNz
IFN0cmluZzsKLWNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNz
IFN0eWxlU2hlZXQ7Ci0KLWNsYXNzIEhUTUxCYXNlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dAotewotcHVibGljOgotICAgIEhUTUxCYXNlRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+
SFRNTEJhc2VFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIFN0cmluZyBo
cmVmKCkgY29uc3QgeyByZXR1cm4gbV9ocmVmOyB9Ci0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwot
Ci0gICAgdm9pZCBwcm9jZXNzKCk7Ci0gICAgCi0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmlu
ZyAmKTsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3RlZDoK
LSAgICBTdHJpbmcgbV9ocmVmOwotICAgIFN0cmluZyBtX3RhcmdldDsKLX07Ci0KLQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBXZWJDb3Jl
OjpDYWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxMaW5rRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTExpbmtFbGVtZW50KCk7
Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsK
LSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGhyZWYo
KSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5n
IGhyZWZsYW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmbGFuZyhjb25zdCBTdHJpbmcgJik7
Ci0KLSAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0
cmluZyAmKTsKLQotICAgIFN0cmluZyByZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbChjb25z
dCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgcmV2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZXYo
Y29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0eWxlU2hlZXQqIHNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQotCi0gICAgLy8gb3ZlcmxvYWQgZnJv
bSBIVE1MRWxlbWVudAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZy
b21Eb2N1bWVudCgpOwotCi0gICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnVybCwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nICZzaGVldCk7Ci0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLSAg
ICB2b2lkIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICBib29sIGlzQWx0ZXJuYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDAgJiYgbV9hbHRlcm5hdGU7IH0KLSAgICBib29sIGlz
RGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMjsgfQotICAgIGJv
b2wgaXNFbmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09
IDE7IH0KLQotICAgIGludCBkaXNhYmxlZFN0YXRlKCkgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRl
OyB9Ci0gICAgdm9pZCBzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0OwotICAgIAot
ICAgIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldCAqbV9jYWNoZWRT
aGVldDsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBTdHJpbmcgbV91
cmw7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV9tZWRpYTsKLSAgICBpbnQgbV9k
aXNhYmxlZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlhIHNjcmlwdCwg
Mj1kaXNhYmxlZAotICAgIGJvb2wgbV9sb2FkaW5nIDogMTsKLSAgICBib29sIG1fYWx0ZXJuYXRl
IDogMTsKLSAgICBib29sIG1faXNTdHlsZVNoZWV0IDogMTsKLSAgICBib29sIG1faXNJY29uIDog
MTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogY2xhc3MgSFRNTE1ldGFFbGVtZW50IDog
cHVibGljIEhUTUxFbGVtZW50CiB7CiBwdWJsaWM6CkBAIC0xNTMsMTQwICszNywyOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2Vy
dGVkSW50b0RvY3VtZW50KCk7CiAKICAgICB2b2lkIHByb2Nlc3MoKTsKIAogICAgIFN0cmluZyBj
b250ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyAmKTsKKyAg
ICB2b2lkIHNldENvbnRlbnQoY29uc3QgU3RyaW5nJik7CiAKICAgICBTdHJpbmcgaHR0cEVxdWl2
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nICYpOworICAgIHZv
aWQgc2V0SHR0cEVxdWl2KGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIG5hbWUoKSBjb25z
dDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nICYpOworICAgIHZvaWQgc2V0TmFtZShj
b25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBzY2hlbWUoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFNjaGVtZShjb25zdCBTdHJpbmcgJik7CisgICAgdm9pZCBzZXRTY2hlbWUoY29uc3QgU3RyaW5n
Jik7CiAKIHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9lcXVpdjsKICAgICBTdHJpbmcgbV9jb250
ZW50OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MU2NyaXB0RWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OkNhY2hlZE9iamVjdENsaWVu
dAotewotcHVibGljOgotICAgIEhUTUxTY3JpcHRFbGVtZW50KERvY3VtZW50ICpkb2MpOwotICAg
IH5IVE1MU2NyaXB0RWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5p
c1RleHROb2RlKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgdmly
dHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKFdlYkNvcmU6OkNhY2hlZE9iamVjdCAqZmluaXNoZWRP
YmopOwotCi0gICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotCi0gICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3Q7Ci0KLSAgICB2b2lk
IHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBh
cnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVy
KCk7Ci0KLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyAmVVJMLCBjb25zdCBT
dHJpbmcgJnNjcmlwdCk7Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
VGV4dChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHRtbEZvcigpIGNvbnN0OwotICAg
IHZvaWQgc2V0SHRtbEZvcihjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgZXZlbnQoKSBj
b25zdDsKLSAgICB2b2lkIHNldEV2ZW50KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBj
aGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIGJvb2wgZGVmZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldERlZmVyKGJvb2wpOwotCi0gICAg
U3RyaW5nIHNyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAm
KTsKLQotcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpDYWNoZWRTY3JpcHQgKm1fY2FjaGVkU2NyaXB0
OwotICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7Ci0gICAgYm9vbCBtX2V2YWx1YXRlZDsKLX07
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQg
KmRvYyk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQot
Ci0gICAgU3R5bGVTaGVldCAqc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0LmdldCgpOyB9
Ci0KLSAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50Ci0gICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9t
RG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICBi
b29sIGlzTG9hZGluZygpIGNvbnN0OwotICAgIHZvaWQgc2hlZXRMb2FkZWQoKTsKLQotICAgIGJv
b2wgZGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAg
U3RyaW5nIG1lZGlhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNZWRpYShjb25zdCBTdHJpbmcgJik7
Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJp
bmcgJik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsK
LSAgICBib29sIG1fbG9hZGluZzsKLSAgICBTdHJpbmcgbV90eXBlOwotICAgIFN0cmluZyBtX21l
ZGlhOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MVGl0bGVFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFRpdGxlRWxlbWVudChE
b2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTFRpdGxlRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBi
b29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBjaGlsZHJlbkNoYW5nZWQoKTsKLQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRUZXh0KGNvbnN0IFN0cmluZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX3Rp
dGxlOwotfTsKLQogfSAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGh0bWwvSFRNTFN0eWxl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5oCShyZXZpc2lv
biAxNDMyNSkKKysrIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwyMTUgKzIxLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8K
LSNpZm5kZWYgSFRNTF9IRUFESU1QTF9ICi0jZGVmaW5lIEhUTUxfSEVBRElNUExfSAorI2lmbmRl
ZiBIVE1MU3R5bGVFbGVtZW50X0gKKyNkZWZpbmUgSFRNTFN0eWxlRWxlbWVudF9ICiAKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgU3RyaW5nOwotY2xhc3Mg
RnJhbWVWaWV3OwotY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgU3R5bGVTaGVldDsKLQot
Y2xhc3MgSFRNTEJhc2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0g
ICAgSFRNTEJhc2VFbGVtZW50KERvY3VtZW50ICpkb2MpOwotICAgIH5IVE1MQmFzZUVsZW1lbnQo
KTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJl
dHVybiBtX2hyZWY7IH0KLSAgICBTdHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KLSAgICB2b2lkIHByb2Nl
c3MoKTsKLSAgICAKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nICYpOwotICAgIHZvaWQg
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX2hy
ZWY7Ci0gICAgU3RyaW5nIG1fdGFyZ2V0OwotfTsKLQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotY2xhc3MgSFRNTExpbmtFbGVtZW50IDogcHVibGljIFdlYkNvcmU6OkNhY2hlZE9iamVjdENs
aWVudCwgcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTExpbmtFbGVtZW50
KERvY3VtZW50ICpkb2MpOwotICAgIH5IVE1MTGlua0VsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gMDsgfQotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGlzYWJs
ZWQoYm9vbCk7Ci0KLSAgICBTdHJpbmcgY2hhcnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hh
cnNldChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHJlZigpIGNvbnN0OwotICAgIHZv
aWQgc2V0SHJlZihjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHJlZmxhbmcoKSBjb25z
dDsKLSAgICB2b2lkIHNldEhyZWZsYW5nKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBt
ZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgU3RyaW5nICYpOwotCi0gICAg
U3RyaW5nIHJlbCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVsKGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIFN0cmluZyByZXYoKSBjb25zdDsKLSAgICB2b2lkIHNldFJldihjb25zdCBTdHJpbmcgJik7
Ci0KLSAgICBTdHJpbmcgdGFyZ2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYXJnZXQoY29uc3Qg
U3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUo
Y29uc3QgU3RyaW5nICYpOwotCi0gICAgU3R5bGVTaGVldCogc2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3NoZWV0LmdldCgpOyB9Ci0KLSAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50Ci0g
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7Ci0KLSAgICB2b2lkIHByb2Nlc3MoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0K
LSAgICAvLyBmcm9tIENhY2hlZE9iamVjdENsaWVudAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHls
ZVNoZWV0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmdXJsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcg
JnNoZWV0KTsKLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwotICAgIHZvaWQgc2hlZXRMb2Fk
ZWQoKTsKLQotICAgIGJvb2wgaXNBbHRlcm5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVk
U3RhdGUgPT0gMCAmJiBtX2FsdGVybmF0ZTsgfQotICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAyOyB9Ci0gICAgYm9vbCBpc0VuYWJsZWRWaWFT
Y3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMTsgfQotCi0gICAgaW50
IGRpc2FibGVkU3RhdGUoKSB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGU7IH0KLSAgICB2b2lkIHNl
dERpc2FibGVkU3RhdGUoYm9vbCBfZGlzYWJsZWQpOwotCi0gICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB0b2tlbml6
ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCk7Ci0KLXByb3RlY3RlZDoKLSAg
ICBXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0ICptX2NhY2hlZFNoZWV0OwotICAgIFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OwotICAgIFN0cmluZyBtX3VybDsKLSAgICBTdHJpbmcg
bV90eXBlOwotICAgIFN0cmluZyBtX21lZGlhOwotICAgIGludCBtX2Rpc2FibGVkU3RhdGU7IC8v
IDA9dW5zZXQoZGVmYXVsdCksIDE9ZW5hYmxlZCB2aWEgc2NyaXB0LCAyPWRpc2FibGVkCi0gICAg
Ym9vbCBtX2xvYWRpbmcgOiAxOwotICAgIGJvb2wgbV9hbHRlcm5hdGUgOiAxOwotICAgIGJvb2wg
bV9pc1N0eWxlU2hlZXQgOiAxOwotICAgIGJvb2wgbV9pc0ljb24gOiAxOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWV0YUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTWV0YUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0gICAg
fkhUTUxNZXRhRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLQotICAgIHZvaWQgcHJvY2Vzcygp
OwotCi0gICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnQoY29u
c3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGh0dHBFcXVpdigpIGNvbnN0OwotICAgIHZvaWQg
c2V0SHR0cEVxdWl2KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBzY2hlbWUo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNjaGVtZShjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBTdHJpbmcgbV9lcXVpdjsKLSAgICBTdHJpbmcgbV9jb250ZW50OwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MU2NyaXB0RWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCwgcHVibGljIFdlYkNvcmU6OkNhY2hlZE9iamVjdENsaWVudAotewotcHVibGljOgot
ICAgIEhUTUxTY3JpcHRFbGVtZW50KERvY3VtZW50ICpkb2MpOwotICAgIH5IVE1MU2NyaXB0RWxl
bWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZpbmlzaGVkKFdlYkNvcmU6OkNhY2hlZE9iamVjdCAqZmluaXNoZWRPYmopOwotCi0gICAgdmly
dHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3Q7Ci0KLSAgICB2b2lkIHNldENyZWF0ZWRCeVBh
cnNlcihib29sIGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRC
eVBhcnNlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7Ci0KLSAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyAmVVJMLCBjb25zdCBTdHJpbmcgJnNjcmlwdCk7
Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJp
bmcgJik7Ci0KLSAgICBTdHJpbmcgaHRtbEZvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHRtbEZv
cihjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgZXZlbnQoKSBjb25zdDsKLSAgICB2b2lk
IHNldEV2ZW50KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBjaGFyc2V0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIGJvb2wgZGVmZXIo
KSBjb25zdDsKLSAgICB2b2lkIHNldERlZmVyKGJvb2wpOwotCi0gICAgU3RyaW5nIHNyYygpIGNv
bnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0eXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQotcHJpdmF0ZToK
LSAgICBXZWJDb3JlOjpDYWNoZWRTY3JpcHQgKm1fY2FjaGVkU2NyaXB0OwotICAgIGJvb2wgbV9j
cmVhdGVkQnlQYXJzZXI7Ci0gICAgYm9vbCBtX2V2YWx1YXRlZDsKLX07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQogY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAog
ewogcHVibGljOgpAQCAtMjQyLDcgKzQxLDcgQEAgcHVibGljOgogICAgIFN0eWxlU2hlZXQgKnNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQogCiAgICAgLy8gb3ZlcmxvYWQg
ZnJvbSBIVE1MRWxlbWVudAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKQEAgLTI1NCwxMCArNTMsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CiAKICAgICBTdHJpbmcgbWVkaWEoKSBjb25z
dDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldE1lZGlh
KGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFR5cGUoY29uc3QgU3RyaW5nICYpOworICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsK
IAogcHJvdGVjdGVkOgogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OwpAQCAtMjY2
LDI3ICs2NSw2IEBAIHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9tZWRpYTsKIH07CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFRpdGxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudAotewotcHVibGljOgotICAgIEhUTUxUaXRsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0g
ICAgfkhUTUxUaXRsZUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25z
dCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2Vk
KCk7Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBT
dHJpbmcgJik7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV90aXRsZTsKLX07Ci0KIH0gLy9u
YW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzI1KQorKysg
aHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNzkzICsyMSwy
MCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImh0bWxf
aGVhZGltcGwuaCIKKyNpbmNsdWRlICJIVE1MVGl0bGVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJD
YWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IlRleHQuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJjc3No
ZWxwZXIuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
LSNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOwotCi1IVE1MQmFzZUVsZW1lbnQ6OkhUTUxCYXNlRWxlbWVudChEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmFzZVRhZywgZG9jKQotewotfQotCi1IVE1MQmFzZUVs
ZW1lbnQ6On5IVE1MQmFzZUVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKLSAgICAgICAgbV9ocmVmID0gcGFyc2VVUkwoYXR0
ci0+dmFsdWUoKSk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSB0YXJnZXRBdHRyKSB7Ci0gICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKLQotICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBiYXNlIGVsZW1l
bnQuLi4KLSAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGJh
c2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCi0gICAgZG9jdW1l
bnQoKS0+c2V0QmFzZVVSTCggRGVwcmVjYXRlZFN0cmluZzo6bnVsbCApOwotICAgIGRvY3VtZW50
KCktPnNldEJhc2VUYXJnZXQoIERlcHJlY2F0ZWRTdHJpbmc6Om51bGwgKTsKLX0KLQotdm9pZCBI
VE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MoKQotewotICAgIGlmICghaW5Eb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZighbV9ocmVmLmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5m
cmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlVVJMKCBLVVJMKCBkb2N1bWVudCgp
LT5mcmFtZSgpLT51cmwoKSwgbV9ocmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSApLnVybCgpICk7Ci0K
LSAgICBpZighbV90YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNl
VGFyZ2V0KCBtX3RhcmdldC5kZXByZWNhdGVkU3RyaW5nKCkgKTsKLQotICAgIC8vICMjIyBzaG91
bGQgY2hhbmdpbmcgYSBkb2N1bWVudCdzIGJhc2UgVVJMIGR5bmFtaWNhbGx5IGF1dG9tYXRpY2Fs
bHkgdXBkYXRlIGFsbCBpbWFnZXMsIHN0eWxlc2hlZXRzIGV0Yz8KLX0KLQotdm9pZCBIVE1MQmFz
ZUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnNldFRhcmdl
dChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2
YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTExpbmtFbGVtZW50OjpIVE1M
TGlua0VsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGxpbmtUYWcsIGRv
YykKLXsKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBtX2NhY2hlZFNoZWV0ID0gMDsKLSAg
ICBtX2lzU3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxzZTsKLSAgICBt
X2Rpc2FibGVkU3RhdGUgPSAwOwotfQotCi1IVE1MTGlua0VsZW1lbnQ6On5IVE1MTGlua0VsZW1l
bnQoKQotewotICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICBtX2NhY2hlZFNoZWV0LT5k
ZXJlZih0aGlzKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkU3RhdGUo
Ym9vbCBfZGlzYWJsZWQpCi17Ci0gICAgaW50IG9sZERpc2FibGVkU3RhdGUgPSBtX2Rpc2FibGVk
U3RhdGU7Ci0gICAgbV9kaXNhYmxlZFN0YXRlID0gX2Rpc2FibGVkID8gMiA6IDE7Ci0gICAgaWYg
KG9sZERpc2FibGVkU3RhdGUgIT0gbV9kaXNhYmxlZFN0YXRlKSB7Ci0gICAgICAgIC8vIElmIHdl
IGNoYW5nZSB0aGUgZGlzYWJsZWQgc3RhdGUgd2hpbGUgdGhlIHNoZWV0IGlzIHN0aWxsIGxvYWRp
bmcsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAgICAvLyBwZXJmb3JtIHRocmVlIGNoZWNrczoKLSAg
ICAgICAgaWYgKGlzTG9hZGluZygpKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayAjMTogSWYgdGhl
IHNoZWV0IGJlY29tZXMgZGlzYWJsZWQgd2hpbGUgaXQgd2FzIGxvYWRpbmcsIGFuZCBpZiBpdCB3
YXMgZWl0aGVyCi0gICAgICAgICAgICAvLyBhIG1haW4gc2hlZXQgb3IgYSBzaGVldCB0aGF0IHdh
cyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHNjcmlwdCwgdGhlbiB3ZSBuZWVkCi0gICAgICAgICAg
ICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwZW5kaW5nIHNoZWV0cy4KLSAgICAg
ICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gMiAmJiAoIW1fYWx0ZXJuYXRlIHx8IG9sZERp
c2FibGVkU3RhdGUgPT0gMSkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVl
dExvYWRlZCgpOwotCi0gICAgICAgICAgICAvLyBDaGVjayAjMjogQW4gYWx0ZXJuYXRlIHNoZWV0
IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCBpcyBzdGlsbCBsb2FkaW5nLgotICAgICAgICAgICAg
aWYgKG1fYWx0ZXJuYXRlICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSAxKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotCi0gICAgICAgICAgICAvLyBDaGVjayAj
MzogQSBtYWluIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCB3YXMgc3RpbGwgbG9hZGlu
ZyBhbmQKLSAgICAgICAgICAgIC8vIGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB2aWEgc2NyaXB0LiAg
SXQgdGFrZXMgcmVhbGx5IHRlcnJpYmxlIGNvZGUgdG8gbWFrZSB0aGlzCi0gICAgICAgICAgICAv
LyBoYXBwZW4gKGEgZG91YmxlIHRvZ2dsZSBmb3Igbm8gcmVhc29uIGVzc2VudGlhbGx5KS4gIFRo
aXMgaGFwcGVucyBvbgotICAgICAgICAgICAgLy8gdmlydHVhbHBsYXN0aWMubmV0LCB3aGljaCBt
YW5hZ2VzIHRvIGRvIGFib3V0IDEyIGVuYWJsZS9kaXNhYmxlcyBvbiBvbmx5IDMKLSAgICAgICAg
ICAgIC8vIHNoZWV0cy4gOikKLSAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGUgJiYgbV9kaXNh
YmxlZFN0YXRlID09IDEgJiYgb2xkRGlzYWJsZWRTdGF0ZSA9PSAyKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUg
c2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFpbC4KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIExvYWQgdGhlIHNoZWV0LCBzaW5jZSBpdCdzIG5ldmVy
IGJlZW4gbG9hZGVkIGJlZm9yZS4KLSAgICAgICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRT
dGF0ZSA9PSAxKQotICAgICAgICAgICAgcHJvY2VzcygpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7IC8vIFVwZGF0ZSB0aGUgc3R5
bGUgc2VsZWN0b3IuCi0gICAgfQotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1
ZSgpKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFy
c2VVUkwoYXR0ci0+dmFsdWUoKSkpOwotICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFs
dWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG1lZGlhQXR0cikgewotICAgICAgICBtX21lZGlhID0gYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVk
U3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewotICAgICAgICBzZXREaXNhYmxlZFN0YXRlKCFh
dHRyLT5pc051bGwoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXpl
UmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsU3RyKQotewotICAgIG1faXNTdHls
ZVNoZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVybmF0ZSA9IGZhbHNlOwotICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVsID0gcmVsU3RyLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgIGlmIChy
ZWwgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICBtX2lzU3R5bGVTaGVldCA9IHRydWU7Ci0gICAg
ZWxzZSBpZiAocmVsID09ICJpY29uIiB8fCByZWwgPT0gInNob3J0Y3V0IGljb24iKQotICAgICAg
ICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgZWxzZSBpZiAocmVsID09ICJhbHRlcm5hdGUgc3R5bGVz
aGVldCIgfHwgcmVsID09ICJzdHlsZXNoZWV0IGFsdGVybmF0ZSIpCi0gICAgICAgIG1faXNTdHls
ZVNoZWV0ID0gbV9hbHRlcm5hdGUgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICAvLyBUb2tl
bml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMgYmFzZWQgb24gc3BlY2lmaWMga2V5
d29yZHMgdGhhdCB3ZSBmaW5kLgotICAgICAgICByZWwucmVwbGFjZSgnXG4nLCAnICcpOwotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsaXN0ID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNw
bGl0KCcgJywgcmVsKTsgICAgICAgIAotICAgICAgICBmb3IgKERlcHJlY2F0ZWRTdHJpbmdMaXN0
OjpJdGVyYXRvciBpID0gbGlzdC5iZWdpbigpOyBpICE9IGxpc3QuZW5kKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCppID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAgICAgICAgICBtX2lzU3R5
bGVTaGVldCA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgqaSA9PSAiYWx0ZXJuYXRlIikK
LSAgICAgICAgICAgICAgICBtX2FsdGVybmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlm
ICgqaSA9PSAiaWNvbiIpCi0gICAgICAgICAgICAgICAgbV9pc0ljb24gPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCi17Ci0gICAg
aWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB0eXBlID0g
bV90eXBlLmxvd2VyKCk7Ci0gICAgCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLQotICAgIC8vIElFIGV4dGVuc2lvbjogbG9jYXRpb24gb2Ygc21hbGwgaWNvbiBmb3Ig
bG9jYXRpb25iYXIgLyBib29rbWFya3MKLSAgICBpZiAoZnJhbWUgJiYgbV9pc0ljb24gJiYgIW1f
dXJsLmlzRW1wdHkoKSAmJiAhZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KCF0eXBlLmlzRW1wdHkoKSkgLy8gTW96aWxsYSBleHRlbnNpb24gdG8gSUUgZXh0ZW5zaW9uOiBp
Y29uIHNwZWNpZmllZCB3aXRoIHR5cGUKLSAgICAgICAgICAgIGZyYW1lLT5icm93c2VyRXh0ZW5z
aW9uKCktPnNldFR5cGVkSWNvblVSTChLVVJMKG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSksIHR5
cGUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24o
KS0+c2V0SWNvblVSTChLVVJMKG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwotICAgIH0KLQot
ICAgIC8vIFN0eWxlc2hlZXQKLSAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQgd291bGQgaW5jb3Jy
ZWN0bHkgbWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFzIGEgZGlmZmVyZW50
IHNwZWNpZmllZCBtZWFuaW5nLiAtZHdoCi0gICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYm
ICh0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpIHx8IG1faXNTdHlsZVNoZWV0KSAmJiBkb2N1bWVu
dCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgIC8vIG5vIG5lZWQgdG8gbG9hZCBzdHlsZSBzaGVldHMg
d2hpY2ggYXJlbid0IGZvciB0aGUgc2NyZWVuIG91dHB1dAotICAgICAgICAvLyAjIyMgdGhlcmUg
bWF5IGJlIGluIHNvbWUgc2l0dWF0aW9ucyBlLmcuIGZvciBhbiBlZGl0b3Igb3Igc2NyaXB0IHRv
IG1hbmlwdWxhdGUKLSAgICAgICAgLy8gYWxzbywgZG9uJ3QgbG9hZCBzdHlsZSBzaGVldHMgZm9y
IHN0YW5kYWxvbmUgZG9jdW1lbnRzCi0gICAgICAgIGlmIChtX21lZGlhLmlzTnVsbCgpIHx8IG1f
bWVkaWEuY29udGFpbnMoInNjcmVlbiIpIHx8IG1fbWVkaWEuY29udGFpbnMoImFsbCIpIHx8IG1f
bWVkaWEuY29udGFpbnMoInByaW50IikpIHsKLQotICAgICAgICAgICAgLy8gQWRkIG91cnNlbHZl
cyBhcyBhIHBlbmRpbmcgc2hlZXQsIGJ1dCBvbmx5IGlmIHdlIGFyZW4ndCBhbiBhbHRlcm5hdGUg
Ci0gICAgICAgICAgICAvLyBzdHlsZXNoZWV0LiAgQWx0ZXJuYXRlIHN0eWxlc2hlZXRzIGRvbid0
IGhvbGQgdXAgcmVuZGVyIHRyZWUgY29uc3RydWN0aW9uLgotICAgICAgICAgICAgaWYgKCFpc0Fs
dGVybmF0ZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNoc2V0ID0gZ2V0
QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICBp
ZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICAgICAgICAgIGlmIChtX2xvYWRpbmcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAgICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTdHlsZVNo
ZWV0KG1fdXJsLCBjaHNldCk7Ci0gICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAg
ICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAobV9zaGVldCkgewotICAgICAgICAvLyB3ZSBubyBsb25nZXIgY29udGFpbiBh
IHN0eWxlc2hlZXQsIGUuZy4gcGVyaGFwcyByZWwgb3IgdHlwZSB3YXMgY2hhbmdlZAotICAgICAg
ICBtX3NoZWV0ID0gMDsKLSAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3Rvcigp
OwotICAgIH0KLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBwcm9j
ZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkK
LXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHByb2Nlc3Mo
KTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
ICZ1cmwsIGNvbnN0IFN0cmluZyAmc2hlZXRTdHIpCi17Ci0gICAgbV9zaGVldCA9IG5ldyBDU1NT
dHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0gICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoc2hlZXRTdHIs
ICFkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0KLSAgICBNZWRpYUxpc3QgKm1lZGlhID0g
bmV3IE1lZGlhTGlzdChtX3NoZWV0LmdldCgpLCBtX21lZGlhKTsKLSAgICBtX3NoZWV0LT5zZXRN
ZWRpYShtZWRpYSk7Ci0KLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLQotICAgIC8vIFRlbGwgdGhl
IGRvYyBhYm91dCB0aGUgc2hlZXQuCi0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0ICYm
ICFpc0Rpc2FibGVkKCkgJiYgIWlzQWx0ZXJuYXRlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnN0
eWxlc2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MTGlua0VsZW1lbnQ6OmlzTG9hZGluZygp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKCFtX3NoZWV0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpOwotfQotCi12
b2lkIEhUTUxMaW5rRWxlbWVudDo6c2hlZXRMb2FkZWQoKQotewotICAgIGlmICghaXNMb2FkaW5n
KCkgJiYgIWlzRGlzYWJsZWQoKSAmJiAhaXNBbHRlcm5hdGUoKSkKLSAgICAgICAgZG9jdW1lbnQo
KS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5uYW1l
KCkgPT0gaHJlZkF0dHI7Ci19Ci0KLWJvb2wgSFRNTExpbmtFbGVtZW50OjpkaXNhYmxlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKS5pc051bGwoKTsK
LX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgZGlzYWJsZWQgPyAiIiA6IDApOwotfQot
Ci1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpjaGFyc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dENoYXJzZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNl
dEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6aHJlZigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShocmVm
QXR0cikpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0SHJlZihjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUpOwotfQotCi1TdHJp
bmcgSFRNTExpbmtFbGVtZW50OjpocmVmbGFuZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShocmVmbGFuZ0F0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0SHJl
ZmxhbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZmxhbmdB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6Om1lZGlhKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExp
bmtFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6cmVs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJlbEF0dHIpOwotfQotCi12b2lk
IEhUTUxMaW5rRWxlbWVudDo6c2V0UmVsKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHJlbEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6
cmV2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJldkF0dHIpOwotfQotCi12
b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0UmV2KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKHJldkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVu
dDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIp
OwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxMaW5rRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQo
RG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChtZXRhVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxN
ZXRhRWxlbWVudDo6fkhUTUxNZXRhRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBodHRwX2VxdWl2QXR0cikgewotICAgICAgICBtX2VxdWl2ID0g
YXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGNvbnRlbnRBdHRyKSB7Ci0gICAgICAgIG1fY29udGVudCA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBu
YW1lQXR0cikgewotICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgIH0gZWxzZQotICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1l
dGFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxNZXRh
RWxlbWVudDo6cHJvY2VzcygpCi17Ci0gICAgLy8gR2V0IHRoZSBkb2N1bWVudCB0byBwcm9jZXNz
IHRoZSB0YWcsIGJ1dCBvbmx5IGlmIHdlJ3JlIGFjdHVhbGx5IHBhcnQgb2YgRE9NIHRyZWUgKGNo
YW5naW5nIGEgbWV0YSB0YWcgd2hpbGUKLSAgICAvLyBpdCdzIG5vdCBpbiB0aGUgdHJlZSBzaG91
bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBkb2N1bWVudCkKLSAgICBpZiAoaW5Eb2N1bWVu
dCgpICYmICFtX2VxdWl2LmlzTnVsbCgpICYmICFtX2NvbnRlbnQuaXNOdWxsKCkpCi0gICAgICAg
IGRvY3VtZW50KCktPnByb2Nlc3NIdHRwRXF1aXYobV9lcXVpdixtX2NvbnRlbnQpOwotfQotCi1T
dHJpbmcgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldENv
bnRlbnQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29udGVudEF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MTWV0YUVsZW1lbnQ6OnNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRN
TE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxNZXRhRWxlbWVudDo6c2NoZW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHNjaGVtZUF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0U2NoZW1l
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNjaGVtZUF0dHIsIHZh
bHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MU2NyaXB0RWxlbWVudDo6SFRN
TFNjcmlwdEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHNjcmlwdFRh
ZywgZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9l
dmFsdWF0ZWQoZmFsc2UpCi17Ci19Ci0KLUhUTUxTY3JpcHRFbGVtZW50Ojp+SFRNTFNjcmlwdEVs
ZW1lbnQoKQotewotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAgbV9jYWNoZWRTY3Jp
cHQtPmRlcmVmKHRoaXMpOwotfQotCi1ib29sIEhUTUxTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9
PSBzcmNBdHRyOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
KQotewotICAgIC8vIElmIGEgbm9kZSBpcyBpbnNlcnRlZCBhcyBhIGNoaWxkIG9mIHRoZSBzY3Jp
cHQgZWxlbWVudAotICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0
ZWQgaW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gd2UgZXZhbHVhdGUgdGhlIHNjcmlwdC4KLSAgICBp
ZiAoIW1fY3JlYXRlZEJ5UGFyc2VyICYmIGluRG9jdW1lbnQoKSAmJiBmaXJzdENoaWxkKCkpCi0g
ICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPlVSTCgpLCB0ZXh0KCkpOwotfQotCi12
b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCi17Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5u
YW1lKCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IHNyY0F0dHIpIHsKLSAgICAgICAgaWYgKG1fZXZh
bHVhdGVkIHx8IG1fY2FjaGVkU2NyaXB0IHx8IG1fY3JlYXRlZEJ5UGFyc2VyIHx8ICFpbkRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gRklYTUU6IEV2YWx1YXRl
IHNjcmlwdHMgaW4gdmlld2xlc3MgZG9jdW1lbnRzLgotICAgICAgICAvLyBTZWUgaHR0cDovL2J1
Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3Ci0gICAgICAgIGlmICgh
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmwgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hhcnNldCA9IGdl
dEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICAgICAg
bV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1
cmwsIGNoYXJzZXQpOwotICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlZih0aGlzKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25sb2FkQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZQotICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQg
SFRNTFNjcmlwdEVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQotewotICAgIC8vIFRoZSBwYXJzZXIg
anVzdCByZWFjaGVkIDwvc2NyaXB0Pi4gSWYgd2UgaGF2ZSBubyBzcmMgYW5kIG5vIHRleHQsCi0g
ICAgLy8gYWxsb3cgZHluYW1pYyBsb2FkaW5nIGxhdGVyLgotICAgIGlmIChnZXRBdHRyaWJ1dGUo
c3JjQXR0cikuaXNFbXB0eSgpICYmIHRleHQoKS5pc0VtcHR5KCkpCi0gICAgICAgIHNldENyZWF0
ZWRCeVBhcnNlcihmYWxzZSk7Ci0gICAgSFRNTEVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKTsKLX0K
LQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAg
IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotCi0gICAgYXNzZXJ0KCFtX2Nh
Y2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAobV9jcmVhdGVkQnlQYXJzZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUg
c2NyaXB0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byBhIAotICAgIC8vIHZpZXdsZXNzIGRvY3Vt
ZW50IGJ1dCB0aGlzJ2xsIGRvIGZvciBub3cuCi0gICAgLy8gU2VlIGh0dHA6Ly9idWd6aWxsYS5v
cGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwotICAgIGlmICghZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dXJsID0gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewot
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNoYXJzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0
dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVu
dCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1cmwsIGNoYXJzZXQpOwotICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+cmVmKHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hvdWxkbid0IGV2YWx1YXRl
IHRoZSBzY3JpcHQKLSAgICAvLyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlzIGluc2VydGVkIGFmdGVy
d2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRleHQpCi0gICAgLy8gaXQgc2hvdWxkIGJl
IGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9u
Y2UuCi0gICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IHRleHQoKTsgICAgCi0gICAgaWYgKCFzY3Jp
cHRTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBldmFsdWF0ZVNjcmlwdChkb2N1bWVudCgpLT5V
UkwoKSwgc2NyaXB0U3RyaW5nKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKLQotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+
ZGVyZWYodGhpcyk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKLSAgICB9Ci19Ci0KLXZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZE9iamVjdCogbykKLXsK
LSAgICBDYWNoZWRTY3JpcHQgKmNzID0gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0ICo+KG8pOwot
Ci0gICAgYXNzZXJ0KGNzID09IG1fY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChjcy0+ZXJyb3JP
Y2N1cnJlZCgpKQotICAgICAgICBkaXNwYXRjaEhUTUxFdmVudChlcnJvckV2ZW50LCB0cnVlLCBm
YWxzZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGNzLT51cmwoKSwgY3Mt
PnNjcmlwdCgpKTsKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQobG9hZEV2ZW50LCBmYWxzZSwg
ZmFsc2UpOwotICAgIH0KLQotICAgIGNzLT5kZXJlZih0aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlw
dCA9IDA7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0KGNvbnN0
IFN0cmluZyYgVVJMLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAobV9ldmFsdWF0
ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpOwotICAgIGlmIChmcmFtZSkgewotICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBm
cmFtZS0+alNjcmlwdCgpOwotICAgICAgICBpZiAocHJveHkpIHsKLSAgICAgICAgICAgIG1fZXZh
bHVhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByb3h5LT5ldmFsdWF0ZShVUkwsIDAsIHNjcmlw
dCwgMCk7Ci0gICAgICAgICAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6dGV4dCgp
IGNvbnN0Ci17Ci0gICAgU3RyaW5nIHZhbCA9ICIiOwotICAgIAotICAgIGZvciAoTm9kZSAqbiA9
IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG4t
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG4p
LT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwot
ICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA9PSAxICYmIGZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHQgKj4oZmlyc3RDaGlsZCgpKS0+c2V0RGF0
YSh2YWx1ZSwgZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChudW1D
aGlsZHJlbiA+IDApIHsKLSAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICB9Ci0gICAgCi0g
ICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodmFsdWUuaW1wbCgpKSwg
ZWMpOwotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6Omh0bWxGb3IoKSBjb25zdAotewot
ICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0SHRtbEZvcihj
b25zdCBTdHJpbmcgJi8qdmFsdWUqLykKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNl
cnZlZCBmb3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpldmVu
dCgpIGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50
OjpzZXRFdmVudChjb25zdCBTdHJpbmcgJi8qdmFsdWUqLykKLXsKLSAgICAvLyBET00gTGV2ZWwg
MSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRF
bGVtZW50OjpjaGFyc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJz
ZXRBdHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwot
fQotCi1ib29sIEhUTUxTY3JpcHRFbGVtZW50OjpkZWZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFnZXRBdHRyaWJ1dGUoZGVmZXJBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0
RWxlbWVudDo6c2V0RGVmZXIoYm9vbCBkZWZlcikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVmZXJB
dHRyLCBkZWZlciA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6c3Jj
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKHNyY0F0dHIpKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0U3JjKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0
VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwg
dmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxTdHlsZUVsZW1lbnQ6OkhU
TUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChzdHlsZVRhZywgZG9j
KQotewotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotfQotCi0vLyBvdGhlciBzdHVmZi4uLgotdm9p
ZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikKLSAgICAgICAgbV90
eXBlID0gYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKS5sb3dlcigpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCi0gICAgICAgIG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgp
LmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwotICAgIGVsc2UKLSAgICAgICAgSFRNTEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkKLSAgICAgICAgZG9jdW1lbnQoKS0+dXBk
YXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7
Ci0gICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0
b3IoKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKQotewot
ICAgIFN0cmluZyB0ZXh0ID0gIiI7Ci0KLSAgICBmb3IgKE5vZGUqIGMgPSBmaXJzdENoaWxkKCk7
IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBU
RVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDREFUQV9TRUNUSU9OX05PREUgfHwgYy0+bm9k
ZVR5cGUoKSA9PSBDT01NRU5UX05PREUpCi0gICAgICAgICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1
ZSgpOwotCi0gICAgaWYgKG1fc2hlZXQpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpKQotICAgICAgICAgICAgZG9j
dW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOyAvLyBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhl
IHNoZWV0IGxpc3QuCi0gICAgICAgIG1fc2hlZXQgPSAwOwotICAgIH0KLQotICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwotICAgIGlmICgobV90eXBlLmlzRW1wdHkoKSB8fCBtX3R5cGUgPT0gInRleHQv
Y3NzIikgLy8gVHlwZSBtdXN0IGJlIGVtcHR5IG9yIENTUwotICAgICAgICAgJiYgKG1fbWVkaWEu
aXNOdWxsKCkgfHwgbV9tZWRpYS5jb250YWlucygic2NyZWVuIikgfHwgbV9tZWRpYS5jb250YWlu
cygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlucygicHJpbnQiKSkpIHsKLSAgICAgICAgZG9jdW1l
bnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAg
ICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzKTsKLSAgICAgICAgbV9zaGVldC0+
cGFyc2VTdHJpbmcodGV4dCwgIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKLSAgICAgICAg
TWVkaWFMaXN0ICptZWRpYSA9IG5ldyBNZWRpYUxpc3QobV9zaGVldC5nZXQoKSwgbV9tZWRpYSk7
Ci0gICAgICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlhKTsKLSAgICAgICAgbV9sb2FkaW5nID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0KQotICAgICAg
ICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci19Ci0KLWJvb2wgSFRNTFN0eWxlRWxl
bWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobV9sb2FkaW5nKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0LmdldCgpKS0+aXNM
b2FkaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2hlZXRMb2FkZWQoKQotewot
ICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2Fk
ZWQoKTsKLX0KLQotYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKS5pc051bGwoKTsKLX0KLQotdm9p
ZCBIVE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQotewotICAgIHNl
dEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKLX0KLQotU3RyaW5n
IEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKG1lZGlhQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2V0TWVkaWEoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWVkaWFBdHRyLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBIVE1MU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojpz
ZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRy
LCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRpdGxlRWxlbWVudDo6
SFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGl0bGVU
YWcsIGRvYyksIG1fdGl0bGUoIiIpCitIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50
KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0aXRsZVRhZywgZG9jKQorICAgICwg
bV90aXRsZSgiIikKIHsKIH0KIApAQCAtODQ0LDcgKzcxLDcgQEAgU3RyaW5nIEhUTUxUaXRsZUVs
ZW1lbnQ6OnRleHQoKSBjb25zdAogICAgIAogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUo
KSkKLSAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG4pLT5kYXRhKCk7Cisg
ICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pLT5kYXRhKCk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiB2YWw7CkBAIC04NTUsMTIgKzgyLDExIEBAIHZvaWQgSFRNTFRpdGxl
RWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHIKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwogICAgIAotICAgIGlmIChudW1D
aGlsZHJlbiA9PSAxICYmIGZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PFRleHQgKj4oZmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh2YWx1ZSwgZWMpOwotICAg
IH0gZWxzZSB7ICAKLSAgICAgICAgaWYgKG51bUNoaWxkcmVuID4gMCkgeworICAgIGlmIChudW1D
aGlsZHJlbiA9PSAxICYmIGZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBzdGF0
aWNfY2FzdDxUZXh0Kj4oZmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh2YWx1ZSwgZWMpOworICAgIGVs
c2UgeyAgCisgICAgICAgIGlmIChudW1DaGlsZHJlbiA+IDApCiAgICAgICAgICAgICByZW1vdmVD
aGlsZHJlbigpOwotICAgICAgICB9CiAgICAgCiAgICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50
KCktPmNyZWF0ZVRleHROb2RlKHZhbHVlLmltcGwoKSksIGVjKTsKICAgICB9CkluZGV4OiBodG1s
L0hUTUxNZXRhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MTWV0YUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNDMyNSkKKysrIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMzgyICsyMSwxOCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCiAgKi8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgImh0bWxfaGVhZGltcGwuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUVs
ZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJD
YWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNs
dWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0
aW1wbC5oIgotI2luY2x1ZGUgImNzc2hlbHBlci5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgImtqc19wcm94eS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKLQotSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoRG9jdW1l
bnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGJhc2VUYWcsIGRvYykKLXsKLX0KLQotSFRNTEJh
c2VFbGVtZW50Ojp+SFRNTEJhc2VFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1faHJlZiA9IHBhcnNlVVJM
KGF0dHItPnZhbHVlKCkpOwotICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewotICAgICAgICBtX3RhcmdldCA9IGF0dHItPnZhbHVl
KCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpOwotICAgIHByb2Nlc3MoKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KCk7Ci0KLSAgICAvLyBTaW5jZSB0aGUgZG9jdW1lbnQgZG9lc24ndCBoYXZlIGEgYmFzZSBl
bGVtZW50Li4uCi0gICAgLy8gKFRoaXMgd2lsbCBicmVhayBpbiB0aGUgY2FzZSBvZiBtdWx0aXBs
ZSBiYXNlIGVsZW1lbnRzLCBidXQgdGhhdCdzIG5vdCB2YWxpZCBhbnl3YXkgKD8pKQotICAgIGRv
Y3VtZW50KCktPnNldEJhc2VVUkwoIERlcHJlY2F0ZWRTdHJpbmc6Om51bGwgKTsKLSAgICBkb2N1
bWVudCgpLT5zZXRCYXNlVGFyZ2V0KCBEZXByZWNhdGVkU3RyaW5nOjpudWxsICk7Ci19Ci0KLXZv
aWQgSFRNTEJhc2VFbGVtZW50Ojpwcm9jZXNzKCkKLXsKLSAgICBpZiAoIWluRG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYoIW1faHJlZi5pc0VtcHR5KCkgJiYgZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0QmFzZVVSTCggS1VSTCggZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+dXJsKCksIG1faHJlZi5kZXByZWNhdGVkU3RyaW5nKCkgKS51cmwoKSAp
OwotCi0gICAgaWYoIW1fdGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0
QmFzZVRhcmdldCggbV90YXJnZXQuZGVwcmVjYXRlZFN0cmluZygpICk7Ci0KLSAgICAvLyAjIyMg
c2hvdWxkIGNoYW5naW5nIGEgZG9jdW1lbnQncyBiYXNlIFVSTCBkeW5hbWljYWxseSBhdXRvbWF0
aWNhbGx5IHVwZGF0ZSBhbGwgaW1hZ2VzLCBzdHlsZXNoZWV0cyBldGM/Ci19Ci0KLXZvaWQgSFRN
TEJhc2VFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpzZXRU
YXJnZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0
ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxMaW5rRWxlbWVudDo6
SFRNTExpbmtFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChsaW5rVGFn
LCBkb2MpCi17Ci0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgbV9jYWNoZWRTaGVldCA9IDA7
Ci0gICAgbV9pc1N0eWxlU2hlZXQgPSBtX2lzSWNvbiA9IG1fYWx0ZXJuYXRlID0gZmFsc2U7Ci0g
ICAgbV9kaXNhYmxlZFN0YXRlID0gMDsKLX0KLQotSFRNTExpbmtFbGVtZW50Ojp+SFRNTExpbmtF
bGVtZW50KCkKLXsKLSAgICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgbV9jYWNoZWRTaGVl
dC0+ZGVyZWYodGhpcyk7Ci19CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0
YXRlKGJvb2wgX2Rpc2FibGVkKQotewotICAgIGludCBvbGREaXNhYmxlZFN0YXRlID0gbV9kaXNh
YmxlZFN0YXRlOwotICAgIG1fZGlzYWJsZWRTdGF0ZSA9IF9kaXNhYmxlZCA/IDIgOiAxOwotICAg
IGlmIChvbGREaXNhYmxlZFN0YXRlICE9IG1fZGlzYWJsZWRTdGF0ZSkgewotICAgICAgICAvLyBJ
ZiB3ZSBjaGFuZ2UgdGhlIGRpc2FibGVkIHN0YXRlIHdoaWxlIHRoZSBzaGVldCBpcyBzdGlsbCBs
b2FkaW5nLCB0aGVuIHdlIGhhdmUgdG8KLSAgICAgICAgLy8gcGVyZm9ybSB0aHJlZSBjaGVja3M6
Ci0gICAgICAgIGlmIChpc0xvYWRpbmcoKSkgewotICAgICAgICAgICAgLy8gQ2hlY2sgIzE6IElm
IHRoZSBzaGVldCBiZWNvbWVzIGRpc2FibGVkIHdoaWxlIGl0IHdhcyBsb2FkaW5nLCBhbmQgaWYg
aXQgd2FzIGVpdGhlcgotICAgICAgICAgICAgLy8gYSBtYWluIHNoZWV0IG9yIGEgc2hlZXQgdGhh
dCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHZpYSBzY3JpcHQsIHRoZW4gd2UgbmVlZAotICAgICAg
ICAgICAgLy8gdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgcGVuZGluZyBzaGVldHMuCi0g
ICAgICAgICAgICBpZiAobV9kaXNhYmxlZFN0YXRlID09IDIgJiYgKCFtX2FsdGVybmF0ZSB8fCBv
bGREaXNhYmxlZFN0YXRlID09IDEpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnN0eWxl
c2hlZXRMb2FkZWQoKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgIzI6IEFuIGFsdGVybmF0ZSBz
aGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUgaXQgaXMgc3RpbGwgbG9hZGluZy4KLSAgICAgICAg
ICAgIGlmIChtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKLQotICAgICAgICAgICAgLy8gQ2hl
Y2sgIzM6IEEgbWFpbiBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGxv
YWRpbmcgYW5kCi0gICAgICAgICAgICAvLyBhZnRlciBpdCB3YXMgZGlzYWJsZWQgdmlhIHNjcmlw
dC4gIEl0IHRha2VzIHJlYWxseSB0ZXJyaWJsZSBjb2RlIHRvIG1ha2UgdGhpcwotICAgICAgICAg
ICAgLy8gaGFwcGVuIChhIGRvdWJsZSB0b2dnbGUgZm9yIG5vIHJlYXNvbiBlc3NlbnRpYWxseSku
ICBUaGlzIGhhcHBlbnMgb24KLSAgICAgICAgICAgIC8vIHZpcnR1YWxwbGFzdGljLm5ldCwgd2hp
Y2ggbWFuYWdlcyB0byBkbyBhYm91dCAxMiBlbmFibGUvZGlzYWJsZXMgb24gb25seSAzCi0gICAg
ICAgICAgICAvLyBzaGVldHMuIDopCi0gICAgICAgICAgICBpZiAoIW1fYWx0ZXJuYXRlICYmIG1f
ZGlzYWJsZWRTdGF0ZSA9PSAxICYmIG9sZERpc2FibGVkU3RhdGUgPT0gMikKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKLQotICAgICAgICAgICAgLy8gSWYg
dGhlIHNoZWV0IGlzIGFscmVhZHkgbG9hZGluZyBqdXN0IGJhaWwuCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBMb2FkIHRoZSBzaGVldCwgc2luY2UgaXQncyBu
ZXZlciBiZWVuIGxvYWRlZCBiZWZvcmUuCi0gICAgICAgIGlmICghbV9zaGVldCAmJiBtX2Rpc2Fi
bGVkU3RhdGUgPT0gMSkKLSAgICAgICAgICAgIHByb2Nlc3MoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOyAvLyBVcGRhdGUgdGhl
IHN0eWxlIHNlbGVjdG9yLgotICAgIH0KLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHJlbEF0dHIpIHsKLSAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+
dmFsdWUoKSk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBocmVmQXR0cikgewotICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9IGF0dHIt
PnZhbHVlKCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBtZWRpYUF0dHIpIHsKLSAgICAgICAgbV9tZWRpYSA9IGF0dHItPnZhbHVlKCkuZGVwcmVj
YXRlZFN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKLSAgICAgICAgc2V0RGlzYWJsZWRTdGF0
ZSghYXR0ci0+aXNOdWxsKCkpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tl
bml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0cikKLXsKLSAgICBtX2lz
U3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxzZTsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHJlbCA9IHJlbFN0ci5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIoKTsKLSAgICBp
ZiAocmVsID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSB0cnVlOwot
ICAgIGVsc2UgaWYgKHJlbCA9PSAiaWNvbiIgfHwgcmVsID09ICJzaG9ydGN1dCBpY29uIikKLSAg
ICAgICAgbV9pc0ljb24gPSB0cnVlOwotICAgIGVsc2UgaWYgKHJlbCA9PSAiYWx0ZXJuYXRlIHN0
eWxlc2hlZXQiIHx8IHJlbCA9PSAic3R5bGVzaGVldCBhbHRlcm5hdGUiKQotICAgICAgICBtX2lz
U3R5bGVTaGVldCA9IG1fYWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8g
VG9rZW5pemUgdGhlIHJlbCBhdHRyaWJ1dGUgYW5kIHNldCBiaXRzIGJhc2VkIG9uIHNwZWNpZmlj
IGtleXdvcmRzIHRoYXQgd2UgZmluZC4KLSAgICAgICAgcmVsLnJlcGxhY2UoJ1xuJywgJyAnKTsK
LSAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbGlzdCA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0
OjpzcGxpdCgnICcsIHJlbCk7ICAgICAgICAKLSAgICAgICAgZm9yIChEZXByZWNhdGVkU3RyaW5n
TGlzdDo6SXRlcmF0b3IgaSA9IGxpc3QuYmVnaW4oKTsgaSAhPSBsaXN0LmVuZCgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICgqaSA9PSAic3R5bGVzaGVldCIpCi0gICAgICAgICAgICAgICAgbV9p
c1N0eWxlU2hlZXQgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoKmkgPT0gImFsdGVybmF0
ZSIpCi0gICAgICAgICAgICAgICAgbV9hbHRlcm5hdGUgPSB0cnVlOwotICAgICAgICAgICAgZWxz
ZSBpZiAoKmkgPT0gImljb24iKQotICAgICAgICAgICAgICAgIG1faXNJY29uID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQotewot
ICAgIGlmICghaW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgdHlw
ZSA9IG1fdHlwZS5sb3dlcigpOwotICAgIAotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCk7Ci0KLSAgICAvLyBJRSBleHRlbnNpb246IGxvY2F0aW9uIG9mIHNtYWxsIGljb24g
Zm9yIGxvY2F0aW9uYmFyIC8gYm9va21hcmtzCi0gICAgaWYgKGZyYW1lICYmIG1faXNJY29uICYm
ICFtX3VybC5pc0VtcHR5KCkgJiYgIWZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7Ci0gICAgICAg
IGlmICghdHlwZS5pc0VtcHR5KCkpIC8vIE1vemlsbGEgZXh0ZW5zaW9uIHRvIElFIGV4dGVuc2lv
bjogaWNvbiBzcGVjaWZpZWQgd2l0aCB0eXBlCi0gICAgICAgICAgICBmcmFtZS0+YnJvd3NlckV4
dGVuc2lvbigpLT5zZXRUeXBlZEljb25VUkwoS1VSTChtX3VybC5kZXByZWNhdGVkU3RyaW5nKCkp
LCB0eXBlKTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIGZyYW1lLT5icm93c2VyRXh0ZW5z
aW9uKCktPnNldEljb25VUkwoS1VSTChtX3VybC5kZXByZWNhdGVkU3RyaW5nKCkpKTsKLSAgICB9
Ci0KLSAgICAvLyBTdHlsZXNoZWV0Ci0gICAgLy8gVGhpcyB3YXMgYnVnZ3kgYW5kIHdvdWxkIGlu
Y29ycmVjdGx5IG1hdGNoIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIj4sIHdoaWNoIGhhcyBhIGRpZmZl
cmVudCBzcGVjaWZpZWQgbWVhbmluZy4gLWR3aAotICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgIT0g
MiAmJiAodHlwZS5jb250YWlucygidGV4dC9jc3MiKSB8fCBtX2lzU3R5bGVTaGVldCkgJiYgZG9j
dW1lbnQoKS0+ZnJhbWUoKSkgewotICAgICAgICAvLyBubyBuZWVkIHRvIGxvYWQgc3R5bGUgc2hl
ZXRzIHdoaWNoIGFyZW4ndCBmb3IgdGhlIHNjcmVlbiBvdXRwdXQKLSAgICAgICAgLy8gIyMjIHRo
ZXJlIG1heSBiZSBpbiBzb21lIHNpdHVhdGlvbnMgZS5nLiBmb3IgYW4gZWRpdG9yIG9yIHNjcmlw
dCB0byBtYW5pcHVsYXRlCi0gICAgICAgIC8vIGFsc28sIGRvbid0IGxvYWQgc3R5bGUgc2hlZXRz
IGZvciBzdGFuZGFsb25lIGRvY3VtZW50cwotICAgICAgICBpZiAobV9tZWRpYS5pc051bGwoKSB8
fCBtX21lZGlhLmNvbnRhaW5zKCJzY3JlZW4iKSB8fCBtX21lZGlhLmNvbnRhaW5zKCJhbGwiKSB8
fCBtX21lZGlhLmNvbnRhaW5zKCJwcmludCIpKSB7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBvdXJz
ZWx2ZXMgYXMgYSBwZW5kaW5nIHNoZWV0LCBidXQgb25seSBpZiB3ZSBhcmVuJ3QgYW4gYWx0ZXJu
YXRlIAotICAgICAgICAgICAgLy8gc3R5bGVzaGVldC4gIEFsdGVybmF0ZSBzdHlsZXNoZWV0cyBk
b24ndCBob2xkIHVwIHJlbmRlciB0cmVlIGNvbnN0cnVjdGlvbi4KLSAgICAgICAgICAgIGlmICgh
aXNBbHRlcm5hdGUoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hl
ZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjaHNldCA9
IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICAg
ICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9sb2FkaW5nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhp
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U3R5
bGVTaGVldChtX3VybCwgY2hzZXQpOwotICAgICAgICAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCi0g
ICAgICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGVsc2UgaWYgKG1fc2hlZXQpIHsKLSAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIGNvbnRh
aW4gYSBzdHlsZXNoZWV0LCBlLmcuIHBlcmhhcHMgcmVsIG9yIHR5cGUgd2FzIGNoYW5nZWQKLSAg
ICAgICAgbV9zaGVldCA9IDA7Ci0gICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0
b3IoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAg
cHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBwcm9j
ZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0
cmluZyAmdXJsLCBjb25zdCBTdHJpbmcgJnNoZWV0U3RyKQotewotICAgIG1fc2hlZXQgPSBuZXcg
Q1NTU3R5bGVTaGVldCh0aGlzLCB1cmwpOwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0
U3RyLCAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwotCi0gICAgTWVkaWFMaXN0ICptZWRp
YSA9IG5ldyBNZWRpYUxpc3QobV9zaGVldC5nZXQoKSwgbV9tZWRpYSk7Ci0gICAgbV9zaGVldC0+
c2V0TWVkaWEobWVkaWEpOwotCi0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0KLSAgICAvLyBUZWxs
IHRoZSBkb2MgYWJvdXQgdGhlIHNoZWV0LgotICAgIGlmICghaXNMb2FkaW5nKCkgJiYgbV9zaGVl
dCAmJiAhaXNEaXNhYmxlZCgpICYmICFpc0FsdGVybmF0ZSgpKQotICAgICAgICBkb2N1bWVudCgp
LT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci19Ci0KLWJvb2wgSFRNTExpbmtFbGVtZW50Ojppc0xvYWRp
bmcoKSBjb25zdAotewotICAgIGlmIChtX2xvYWRpbmcpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmICghbV9zaGVldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0ICo+KG1fc2hlZXQuZ2V0KCkpLT5pc0xvYWRpbmcoKTsKLX0K
LQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0TG9hZGVkKCkKLXsKLSAgICBpZiAoIWlzTG9h
ZGluZygpICYmICFpc0Rpc2FibGVkKCkgJiYgIWlzQWx0ZXJuYXRlKCkpCi0gICAgICAgIGRvY3Vt
ZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MTGlua0VsZW1lbnQ6Omlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKLXsKLSAgICByZXR1cm4gYXR0ci0+
bmFtZSgpID09IGhyZWZBdHRyOwotfQotCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6ZGlzYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGRpc2FibGVkQXR0cikuaXNOdWxs
KCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVk
KQotewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsK
LX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50
OjpzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNo
YXJzZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OmhyZWYoKSBj
b25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUo
aHJlZkF0dHIpKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6aHJlZmxhbmcoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoaHJlZmxhbmdBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dEhyZWZsYW5nKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhyZWZs
YW5nQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjptZWRpYSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOwotfQotCi12b2lkIEhU
TUxMaW5rRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUobWVkaWFBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6
OnJlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyZWxBdHRyKTsKLX0KLQot
dm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFJlbChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShyZWxBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0VsZW1l
bnQ6OnJldigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyZXZBdHRyKTsKLX0K
LQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFJldihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShyZXZBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0Vs
ZW1lbnQ6OnRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRB
dHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBIVE1MTGlua0VsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0VHlwZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxNZXRhRWxlbWVudDo6SFRNTE1ldGFFbGVt
ZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQobWV0YVRhZywgZG9jKQorSFRNTE1ldGFF
bGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50
KG1ldGFUYWcsIGRvYykKIHsKIH0KIApAQCAtNDA0LDcgKzQwLDcgQEAgSFRNTE1ldGFFbGVtZW50
Ojp+SFRNTE1ldGFFbGVtZW50KCkKIHsKIH0KIAotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgSFRNTE1ldGFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBodHRwX2VxdWl2QXR0cikgewogICAgICAgICBtX2VxdWl2ID0g
YXR0ci0+dmFsdWUoKTsKQEAgLTQyOSw3ICs2NSw3IEBAIHZvaWQgSFRNTE1ldGFFbGVtZW50Ojpw
cm9jZXNzKCkKICAgICAvLyBHZXQgdGhlIGRvY3VtZW50IHRvIHByb2Nlc3MgdGhlIHRhZywgYnV0
IG9ubHkgaWYgd2UncmUgYWN0dWFsbHkgcGFydCBvZiBET00gdHJlZSAoY2hhbmdpbmcgYSBtZXRh
IHRhZyB3aGlsZQogICAgIC8vIGl0J3Mgbm90IGluIHRoZSB0cmVlIHNob3VsZG4ndCBoYXZlIGFu
eSBlZmZlY3Qgb24gdGhlIGRvY3VtZW50KQogICAgIGlmIChpbkRvY3VtZW50KCkgJiYgIW1fZXF1
aXYuaXNOdWxsKCkgJiYgIW1fY29udGVudC5pc051bGwoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
cHJvY2Vzc0h0dHBFcXVpdihtX2VxdWl2LG1fY29udGVudCk7CisgICAgICAgIGRvY3VtZW50KCkt
PnByb2Nlc3NIdHRwRXF1aXYobV9lcXVpdiwgbV9jb250ZW50KTsKIH0KIAogU3RyaW5nIEhUTUxN
ZXRhRWxlbWVudDo6Y29udGVudCgpIGNvbnN0CkBAIC00MzcsNyArNzMsNyBAQCBTdHJpbmcgSFRN
TE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNv
bnRlbnRBdHRyKTsKIH0KIAotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldENvbnRlbnQoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXRDb250ZW50KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyLCB2YWx1ZSk7CiB9
CkBAIC00NDcsNyArODMsNyBAQCBTdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpodHRwRXF1aXYoKSBj
b25zCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0cik7CiB9CiAKLXZvaWQg
SFRNTE1ldGFFbGVtZW50OjpzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQg
SFRNTE1ldGFFbGVtZW50OjpzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAg
ICBzZXRBdHRyaWJ1dGUoaHR0cF9lcXVpdkF0dHIsIHZhbHVlKTsKIH0KQEAgLTQ1Nyw3ICs5Myw3
IEBAIFN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Om5hbWUoKSBjb25zdAogICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUobmFtZUF0dHIpOwogfQogCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0TmFtZShj
b25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldE5hbWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKIH0K
QEAgLTQ3MiwzOTggKzEwOCw0IEBAIHZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXRTY2hlbWUoY29u
c3QgU3QKICAgICBzZXRBdHRyaWJ1dGUoc2NoZW1lQXR0ciwgdmFsdWUpOwogfQogCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChEb2N1
bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoc2NyaXB0VGFnLCBkb2MpLCBtX2NhY2hlZFNj
cmlwdCgwKSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKLXsK
LX0KLQotSFRNTFNjcmlwdEVsZW1lbnQ6On5IVE1MU2NyaXB0RWxlbWVudCgpCi17Ci0gICAgaWYg
KG1fY2FjaGVkU2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7Ci19
Ci0KLWJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0
cikgY29uc3QKLXsKLSAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHI7Ci19Ci0KLXZv
aWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgLy8gSWYgYSBu
b2RlIGlzIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgdGhlIHNjcmlwdCBlbGVtZW50Ci0gICAgLy8g
YW5kIHRoZSBzY3JpcHQgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnQK
LSAgICAvLyB3ZSBldmFsdWF0ZSB0aGUgc2NyaXB0LgotICAgIGlmICghbV9jcmVhdGVkQnlQYXJz
ZXIgJiYgaW5Eb2N1bWVudCgpICYmIGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgZXZhbHVhdGVTY3Jp
cHQoZG9jdW1lbnQoKS0+VVJMKCksIHRleHQoKSk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gc3JjQXR0cikgewotICAgICAgICBpZiAobV9ldmFsdWF0ZWQgfHwgbV9jYWNoZWRT
Y3JpcHQgfHwgbV9jcmVhdGVkQnlQYXJzZXIgfHwgIWluRG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAvLyBGSVhNRTogRXZhbHVhdGUgc2NyaXB0cyBpbiB2aWV3bGVz
cyBkb2N1bWVudHMuCi0gICAgICAgIC8vIFNlZSBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTU3MjcKLSAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHVybCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRB
dHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IGRv
Y3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHVybCwgY2hhcnNldCk7Ci0gICAg
ICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVmKHRoaXMpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChhdHRyTmFtZSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3Rl
bmVyKGxvYWRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6
Y2xvc2VSZW5kZXJlcigpCi17Ci0gICAgLy8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9zY3Jp
cHQ+LiBJZiB3ZSBoYXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKLSAgICAvLyBhbGxvdyBkeW5hbWlj
IGxvYWRpbmcgbGF0ZXIuCi0gICAgaWYgKGdldEF0dHJpYnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkg
JiYgdGV4dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q3JlYXRlZEJ5UGFyc2VyKGZhbHNlKTsK
LSAgICBIVE1MRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpOwotfQotCi12b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCk7Ci0KLSAgICBhc3NlcnQoIW1fY2FjaGVkU2NyaXB0KTsKLQotICAg
IGlmIChtX2NyZWF0ZWRCeVBhcnNlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJ
WE1FOiBFdmVudHVhbGx5IHdlJ2QgbGlrZSB0byBldmFsdWF0ZSBzY3JpcHRzIHdoaWNoIGFyZSBp
bnNlcnRlZCBpbnRvIGEgCi0gICAgLy8gdmlld2xlc3MgZG9jdW1lbnQgYnV0IHRoaXMnbGwgZG8g
Zm9yIG5vdy4KLSAgICAvLyBTZWUgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD01NzI3Ci0gICAgaWYgKCFkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmwgPSBnZXRBdHRyaWJ1dGUo
c3JjQXR0cik7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuZGVwcmVjYXRlZFN0cmlu
ZygpOwotICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5y
ZXF1ZXN0U2NyaXB0KHVybCwgY2hhcnNldCk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZWYo
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFuIGVt
cHR5IHNjcmlwdCBub2RlLCB3ZSBzaG91bGRuJ3QgZXZhbHVhdGUgdGhlIHNjcmlwdAotICAgIC8v
IGJlY2F1c2UgaWYgYSBzY3JpcHQgaXMgaW5zZXJ0ZWQgYWZ0ZXJ3YXJkcyAoYnkgc2V0dGluZyB0
ZXh0IG9yIGlubmVyVGV4dCkKLSAgICAvLyBpdCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgZXZh
bHVhdGVTY3JpcHQgb25seSBldmFsdWF0ZXMgYSBzY3JpcHQgb25jZS4KLSAgICBTdHJpbmcgc2Ny
aXB0U3RyaW5nID0gdGV4dCgpOyAgICAKLSAgICBpZiAoIXNjcmlwdFN0cmluZy5pc0VtcHR5KCkp
Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGRvY3VtZW50KCktPlVSTCgpLCBzY3JpcHRTdHJpbmcp
OwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsK
LSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgaWYgKG1fY2Fj
aGVkU2NyaXB0KSB7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKLSAgICAg
ICAgbV9jYWNoZWRTY3JpcHQgPSAwOwotICAgIH0KLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVu
dDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0KiBvKQotewotICAgIENhY2hlZFNjcmlwdCAq
Y3MgPSBzdGF0aWNfY2FzdDxDYWNoZWRTY3JpcHQgKj4obyk7Ci0KLSAgICBhc3NlcnQoY3MgPT0g
bV9jYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGNzLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAg
IGRpc3BhdGNoSFRNTEV2ZW50KGVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgZXZhbHVhdGVTY3JpcHQoY3MtPnVybCgpLCBjcy0+c2NyaXB0KCkpOwotICAgICAg
ICBkaXNwYXRjaEhUTUxFdmVudChsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgY3MtPmRlcmVmKHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKLX0KLQotdm9pZCBI
VE1MU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nJiBVUkwsIGNvbnN0
IFN0cmluZyYgc2NyaXB0KQotewotICAgIGlmIChtX2V2YWx1YXRlZCkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIEtKU1Byb3h5ICpwcm94eSA9IGZyYW1lLT5qU2NyaXB0KCk7Ci0g
ICAgICAgIGlmIChwcm94eSkgewotICAgICAgICAgICAgbV9ldmFsdWF0ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgcHJveHktPmV2YWx1YXRlKFVSTCwgMCwgc2NyaXB0LCAwKTsKLSAgICAgICAgICAg
IERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJp
bmcgdmFsID0gIiI7Ci0gICAgCi0gICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBu
ID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQotICAg
ICAgICAgICAgdmFsICs9IHN0YXRpY19jYXN0PFRleHQgKj4obiktPmRhdGEoKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHZhbDsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VGV4
dChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZUNvdW50KCk7Ci0gICAgCi0gICAgaWYgKG51bUNo
aWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8VGV4dCAqPihmaXJzdENoaWxkKCkpLT5zZXREYXRhKHZhbHVlLCBlYyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID4gMCkgewotICAg
ICAgICByZW1vdmVDaGlsZHJlbigpOwotICAgIH0KLSAgICAKLSAgICBhcHBlbmRDaGlsZChkb2N1
bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5pbXBsKCkpLCBlYyk7Ci19Ci0KLVN0cmluZyBI
VE1MU2NyaXB0RWxlbWVudDo6aHRtbEZvcigpIGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEg
c2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQot
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyAmLyp2YWx1
ZSovKQotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNl
LgotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmV2ZW50KCkgY29uc3QKLXsKLSAgICAv
LyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEV2ZW50KGNvbnN0IFN0
cmluZyAmLyp2YWx1ZSovKQotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZv
ciBmdXR1cmUgdXNlLgotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmNoYXJzZXQoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwotfQotCi12b2lk
IEhUTUxTY3JpcHRFbGVtZW50OjpzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSFRNTFNjcmlw
dEVsZW1lbnQ6OmRlZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWZl
ckF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXREZWZlcihi
b29sIGRlZmVyKQotewotICAgIHNldEF0dHJpYnV0ZShkZWZlckF0dHIsIGRlZmVyID8gIiIgOiAw
KTsKLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpzcmMoKSBjb25zdAotewotICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwotfQot
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFNjcmlw
dEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0
dHIpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChEb2N1
bWVudCAqZG9jKSA6IEhUTUxFbGVtZW50KHN0eWxlVGFnLCBkb2MpCi17Ci0gICAgbV9sb2FkaW5n
ID0gZmFsc2U7Ci19Ci0KLS8vIG90aGVyIHN0dWZmLi4uCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAo
YXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKQotICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgp
LmRvbVN0cmluZygpLmxvd2VyKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1lZGlh
QXR0cikKLSAgICAgICAgbV9tZWRpYSA9IGF0dHItPnZhbHVlKCkuZGVwcmVjYXRlZFN0cmluZygp
Lmxvd2VyKCk7Ci0gICAgZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAg
IGlmIChtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7
Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0g
ICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkK
LSAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi12b2lkIEhU
TUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgU3RyaW5nIHRleHQgPSAi
IjsKLQotICAgIGZvciAoTm9kZSogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09IFRFWFRfTk9ERSB8fCBjLT5ub2Rl
VHlwZSgpID09IENEQVRBX1NFQ1RJT05fTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IENPTU1FTlRf
Tk9ERSkKLSAgICAgICAgICAgIHRleHQgKz0gYy0+bm9kZVZhbHVlKCk7Ci0KLSAgICBpZiAobV9z
aGVldCkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0
LmdldCgpKS0+aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0
TG9hZGVkKCk7IC8vIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2hlZXQgbGlzdC4KLSAgICAg
ICAgbV9zaGVldCA9IDA7Ci0gICAgfQotCi0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgaWYg
KChtX3R5cGUuaXNFbXB0eSgpIHx8IG1fdHlwZSA9PSAidGV4dC9jc3MiKSAvLyBUeXBlIG11c3Qg
YmUgZW1wdHkgb3IgQ1NTCi0gICAgICAgICAmJiAobV9tZWRpYS5pc051bGwoKSB8fCBtX21lZGlh
LmNvbnRhaW5zKCJzY3JlZW4iKSB8fCBtX21lZGlhLmNvbnRhaW5zKCJhbGwiKSB8fCBtX21lZGlh
LmNvbnRhaW5zKCJwcmludCIpKSkgewotICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hl
ZXQoKTsKLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgbV9zaGVldCA9IG5ldyBD
U1NTdHlsZVNoZWV0KHRoaXMpOwotICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCAh
ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwotICAgICAgICBNZWRpYUxpc3QgKm1lZGlhID0g
bmV3IE1lZGlhTGlzdChtX3NoZWV0LmdldCgpLCBtX21lZGlhKTsKLSAgICAgICAgbV9zaGVldC0+
c2V0TWVkaWEobWVkaWEpOwotICAgICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWlzTG9hZGluZygpICYmIG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50KCktPnN0eWxl
c2hlZXRMb2FkZWQoKTsKLX0KLQotYm9vbCBIVE1MU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBj
b25zdAotewotICAgIGlmIChtX2xvYWRpbmcpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICghbV9zaGVldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0ICo+KG1fc2hlZXQuZ2V0KCkpLT5pc0xvYWRpbmcoKTsKLX0KLQotdm9p
ZCBIVE1MU3R5bGVFbGVtZW50OjpzaGVldExvYWRlZCgpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmco
KSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29sIEhU
TUxTdHlsZUVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJp
YnV0ZShkaXNhYmxlZEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVk
QXR0ciwgZGlzYWJsZWQgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTFN0eWxlRWxlbWVudDo6
bWVkaWEoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKLX0K
LQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxT
dHlsZUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlw
ZUF0dHIpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KERv
Y3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0aXRsZVRhZywgZG9jKSwgbV90aXRsZSgi
IikKLXsKLX0KLQotSFRNTFRpdGxlRWxlbWVudDo6fkhUTUxUaXRsZUVsZW1lbnQoKQotewotfQot
Ci12b2lkIEhUTUxUaXRsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKLXsKLSAgICBI
VE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLT5zZXRU
aXRsZShtX3RpdGxlLCB0aGlzKTsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwotICAgIGRvY3VtZW50KCktPnJlbW92ZVRpdGxlKHRoaXMpOwotfQotCi12b2lkIEhUTUxUaXRs
ZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZCgpOwotICAgIG1fdGl0bGUgPSAiIjsKLSAgICBmb3IgKE5vZGUqIGMgPSBmaXJzdENo
aWxkKCk7IGMgIT0gMDsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjLT5ub2Rl
VHlwZSgpID09IFRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IENEQVRBX1NFQ1RJT05fTk9E
RSkKLSAgICAgICAgICAgIG1fdGl0bGUgKz0gYy0+bm9kZVZhbHVlKCk7Ci0gICAgaWYgKGluRG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUobV90aXRsZSwgdGhpcyk7Ci19
Ci0KLVN0cmluZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcg
dmFsID0gIiI7Ci0gICAgCi0gICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQotICAgICAg
ICAgICAgdmFsICs9IHN0YXRpY19jYXN0PFRleHQgKj4obiktPmRhdGEoKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHZhbDsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0KGNv
bnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50
IG51bUNoaWxkcmVuID0gY2hpbGROb2RlQ291bnQoKTsKLSAgICAKLSAgICBpZiAobnVtQ2hpbGRy
ZW4gPT0gMSAmJiBmaXJzdENoaWxkKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBzdGF0aWNf
Y2FzdDxUZXh0ICo+KGZpcnN0Q2hpbGQoKSktPnNldERhdGEodmFsdWUsIGVjKTsKLSAgICB9IGVs
c2UgeyAgCi0gICAgICAgIGlmIChudW1DaGlsZHJlbiA+IDApIHsKLSAgICAgICAgICAgIHJlbW92
ZUNoaWxkcmVuKCk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1l
bnQoKS0+Y3JlYXRlVGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZWMpOwotICAgIH0KLX0KLQogfQpJ
bmRleDogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAkocmV2aXNpb24gMTQzMjUpCisrKyBodG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwMSArMjEsMzAgQEAKICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2hlYWRpbXBsLmgiCisjaW5jbHVkZSAi
SFRNTExpbmtFbGVtZW50LmgiCiAKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAi
VGV4dC5oIgotI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5oIgotI2luY2x1ZGUgImNzc2hl
bHBlci5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKLSNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIK
KyNpbmNsdWRlICJjc3NoZWxwZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KLUhUTUxC
YXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxl
bWVudChiYXNlVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxCYXNlRWxlbWVudDo6fkhUTUxCYXNlRWxl
bWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBocmVm
QXR0cikgewotICAgICAgICBtX2hyZWYgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKLSAgICAg
ICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIp
IHsKLSAgICAgICAgbV90YXJnZXQgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBwcm9jZXNzKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkK
LXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBwcm9jZXNz
KCk7Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKLXsK
LSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgLy8gU2luY2Ug
dGhlIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBhIGJhc2UgZWxlbWVudC4uLgotICAgIC8vIChUaGlz
IHdpbGwgYnJlYWsgaW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgYmFzZSBlbGVtZW50cywgYnV0IHRo
YXQncyBub3QgdmFsaWQgYW55d2F5ICg/KSkKLSAgICBkb2N1bWVudCgpLT5zZXRCYXNlVVJMKCBE
ZXByZWNhdGVkU3RyaW5nOjpudWxsICk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0QmFzZVRhcmdldCgg
RGVwcmVjYXRlZFN0cmluZzo6bnVsbCApOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6cHJv
Y2VzcygpCi17Ci0gICAgaWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmKCFtX2hyZWYuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIGRv
Y3VtZW50KCktPnNldEJhc2VVUkwoIEtVUkwoIGRvY3VtZW50KCktPmZyYW1lKCktPnVybCgpLCBt
X2hyZWYuZGVwcmVjYXRlZFN0cmluZygpICkudXJsKCkgKTsKLQotICAgIGlmKCFtX3RhcmdldC5p
c0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VUYXJnZXQoIG1fdGFyZ2V0LmRl
cHJlY2F0ZWRTdHJpbmcoKSApOwotCi0gICAgLy8gIyMjIHNob3VsZCBjaGFuZ2luZyBhIGRvY3Vt
ZW50J3MgYmFzZSBVUkwgZHluYW1pY2FsbHkgYXV0b21hdGljYWxseSB1cGRhdGUgYWxsIGltYWdl
cywgc3R5bGVzaGVldHMgZXRjPwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0SHJlZihj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUp
OwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChEb2N1bWVu
dCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQobGlua1RhZywgZG9jKQorICAgICwgbV9jYWNoZWRT
aGVldCgwKQorICAgICwgbV9kaXNhYmxlZFN0YXRlKDApCisgICAgLCBtX2xvYWRpbmcoZmFsc2Up
CisgICAgLCBtX2FsdGVybmF0ZShmYWxzZSkKKyAgICAsIG1faXNTdHlsZVNoZWV0KGZhbHNlKQor
ICAgICwgbV9pc0ljb24oZmFsc2UpCiB7Ci0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgbV9j
YWNoZWRTaGVldCA9IDA7Ci0gICAgbV9pc1N0eWxlU2hlZXQgPSBtX2lzSWNvbiA9IG1fYWx0ZXJu
YXRlID0gZmFsc2U7Ci0gICAgbV9kaXNhYmxlZFN0YXRlID0gMDsKIH0KIAogSFRNTExpbmtFbGVt
ZW50Ojp+SFRNTExpbmtFbGVtZW50KCkKQEAgLTIxNCw3ICsxNDMsNyBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6cHJvY2VzcygpCiAKICAgICBTdHJpbmcgdHlwZSA9IG1fdHlwZS5sb3dlcigpOwog
ICAgIAotICAgIEZyYW1lICpmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAogICAgIC8vIElFIGV4dGVuc2lvbjogbG9j
YXRpb24gb2Ygc21hbGwgaWNvbiBmb3IgbG9jYXRpb25iYXIgLyBib29rbWFya3MKICAgICBpZiAo
ZnJhbWUgJiYgbV9pc0ljb24gJiYgIW1fdXJsLmlzRW1wdHkoKSAmJiAhZnJhbWUtPnRyZWUoKS0+
cGFyZW50KCkpIHsKQEAgLTI0OSw4ICsxNzgsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJv
Y2VzcygpCiAgICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKICAgICAgICAgICAgICAgICBt
X2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAo
bV9zaGVldCkgeworICAgIH0gZWxzZSBpZiAobV9zaGVldCkgewogICAgICAgICAvLyB3ZSBubyBs
b25nZXIgY29udGFpbiBhIHN0eWxlc2hlZXQsIGUuZy4gcGVyaGFwcyByZWwgb3IgdHlwZSB3YXMg
Y2hhbmdlZAogICAgICAgICBtX3NoZWV0ID0gMDsKICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
U3R5bGVTZWxlY3RvcigpOwpAQCAtMzk0LDQ3NiArMzIyLDQgQEAgdm9pZCBIVE1MTGlua0VsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaQogICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUp
OwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxNZXRhRWxlbWVudDo6SFRNTE1ldGFF
bGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQobWV0YVRhZywgZG9jKQotewotfQot
Ci1IVE1MTWV0YUVsZW1lbnQ6On5IVE1MTWV0YUVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxN
ZXRhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQot
ewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaHR0cF9lcXVpdkF0dHIpIHsKLSAgICAgICAgbV9l
cXVpdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBjb250ZW50QXR0cikgewotICAgICAgICBtX2NvbnRlbnQgPSBhdHRy
LT52YWx1ZSgpOwotICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gbmFtZUF0dHIpIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICB9IGVsc2UKLSAg
ICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi12b2lk
IEhUTUxNZXRhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHByb2Nlc3MoKTsKLX0KLQotdm9pZCBI
VE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKQotewotICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgdG8g
cHJvY2VzcyB0aGUgdGFnLCBidXQgb25seSBpZiB3ZSdyZSBhY3R1YWxseSBwYXJ0IG9mIERPTSB0
cmVlIChjaGFuZ2luZyBhIG1ldGEgdGFnIHdoaWxlCi0gICAgLy8gaXQncyBub3QgaW4gdGhlIHRy
ZWUgc2hvdWxkbid0IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgZG9jdW1lbnQpCi0gICAgaWYgKGlu
RG9jdW1lbnQoKSAmJiAhbV9lcXVpdi5pc051bGwoKSAmJiAhbV9jb250ZW50LmlzTnVsbCgpKQot
ICAgICAgICBkb2N1bWVudCgpLT5wcm9jZXNzSHR0cEVxdWl2KG1fZXF1aXYsbV9jb250ZW50KTsK
LX0KLQotU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6Y29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShjb250ZW50QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50
OjpzZXRDb250ZW50KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNv
bnRlbnRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Omh0dHBFcXVp
digpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0cik7Ci19
Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHR0cF9lcXVpdkF0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxNZXRhRWxlbWVudDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShuYW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXROYW1lKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6OnNjaGVtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShzY2hlbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNl
dFNjaGVtZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzY2hlbWVB
dHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFNjcmlwdEVsZW1l
bnQ6OkhUTUxTY3JpcHRFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChz
Y3JpcHRUYWcsIGRvYyksIG1fY2FjaGVkU2NyaXB0KDApLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxz
ZSksIG1fZXZhbHVhdGVkKGZhbHNlKQotewotfQotCi1IVE1MU2NyaXB0RWxlbWVudDo6fkhUTUxT
Y3JpcHRFbGVtZW50KCkKLXsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKLX0KLQotYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAotewotICAgIHJldHVybiBhdHRyLT5u
YW1lKCkgPT0gc3JjQXR0cjsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6Y2hpbGRyZW5D
aGFuZ2VkKCkKLXsKLSAgICAvLyBJZiBhIG5vZGUgaXMgaW5zZXJ0ZWQgYXMgYSBjaGlsZCBvZiB0
aGUgc2NyaXB0IGVsZW1lbnQKLSAgICAvLyBhbmQgdGhlIHNjcmlwdCBlbGVtZW50IGhhcyBiZWVu
IGluc2VydGVkIGluIHRoZSBkb2N1bWVudAotICAgIC8vIHdlIGV2YWx1YXRlIHRoZSBzY3JpcHQu
Ci0gICAgaWYgKCFtX2NyZWF0ZWRCeVBhcnNlciAmJiBpbkRvY3VtZW50KCkgJiYgZmlyc3RDaGls
ZCgpKQotICAgICAgICBldmFsdWF0ZVNjcmlwdChkb2N1bWVudCgpLT5VUkwoKSwgdGV4dCgpKTsK
LX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQotewotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0g
YXR0ci0+bmFtZSgpOwotICAgIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKSB7Ci0gICAgICAgIGlm
IChtX2V2YWx1YXRlZCB8fCBtX2NhY2hlZFNjcmlwdCB8fCBtX2NyZWF0ZWRCeVBhcnNlciB8fCAh
aW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIEZJWE1FOiBF
dmFsdWF0ZSBzY3JpcHRzIGluIHZpZXdsZXNzIGRvY3VtZW50cy4KLSAgICAgICAgLy8gU2VlIGh0
dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcyNwotICAgICAg
ICBpZiAoIWRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAg
aWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGNoYXJz
ZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAg
ICAgICAgIG1fY2FjaGVkU2NyaXB0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RT
Y3JpcHQodXJsLCBjaGFyc2V0KTsKLSAgICAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZWYodGhp
cyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IG9ubG9hZEF0dHIpIHsK
LSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQot
Ci12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKLXsKLSAgICAvLyBUaGUg
cGFyc2VyIGp1c3QgcmVhY2hlZCA8L3NjcmlwdD4uIElmIHdlIGhhdmUgbm8gc3JjIGFuZCBubyB0
ZXh0LAotICAgIC8vIGFsbG93IGR5bmFtaWMgbG9hZGluZyBsYXRlci4KLSAgICBpZiAoZ2V0QXR0
cmlidXRlKHNyY0F0dHIpLmlzRW1wdHkoKSAmJiB0ZXh0KCkuaXNFbXB0eSgpKQotICAgICAgICBz
ZXRDcmVhdGVkQnlQYXJzZXIoZmFsc2UpOwotICAgIEhUTUxFbGVtZW50OjpjbG9zZVJlbmRlcmVy
KCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkK
LXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLQotICAgIGFzc2Vy
dCghbV9jYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKG1fY3JlYXRlZEJ5UGFyc2VyKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGV2
YWx1YXRlIHNjcmlwdHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8gYSAKLSAgICAvLyB2aWV3bGVz
cyBkb2N1bWVudCBidXQgdGhpcydsbCBkbyBmb3Igbm93LgotICAgIC8vIFNlZSBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTU3MjcKLSAgICBpZiAoIWRvY3Vt
ZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHVybCA9IGdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLSAgICBpZiAoIXVybC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNo
YXJzZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgIG1fY2FjaGVkU2NyaXB0ID0g
ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQodXJsLCBjaGFyc2V0KTsKLSAg
ICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlZih0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIElmIHRoZXJlJ3MgYW4gZW1wdHkgc2NyaXB0IG5vZGUsIHdlIHNob3VsZG4ndCBl
dmFsdWF0ZSB0aGUgc2NyaXB0Ci0gICAgLy8gYmVjYXVzZSBpZiBhIHNjcmlwdCBpcyBpbnNlcnRl
ZCBhZnRlcndhcmRzIChieSBzZXR0aW5nIHRleHQgb3IgaW5uZXJUZXh0KQotICAgIC8vIGl0IHNo
b3VsZCBiZSBldmFsdWF0ZWQsIGFuZCBldmFsdWF0ZVNjcmlwdCBvbmx5IGV2YWx1YXRlcyBhIHNj
cmlwdCBvbmNlLgotICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSB0ZXh0KCk7ICAgIAotICAgIGlm
ICghc2NyaXB0U3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgZXZhbHVhdGVTY3JpcHQoZG9jdW1l
bnQoKS0+VVJMKCksIHNjcmlwdFN0cmluZyk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0KLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpIHsKLSAgICAgICAgbV9jYWNoZWRT
Y3JpcHQtPmRlcmVmKHRoaXMpOwotICAgICAgICBtX2NhY2hlZFNjcmlwdCA9IDA7Ci0gICAgfQot
fQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3Qq
IG8pCi17Ci0gICAgQ2FjaGVkU2NyaXB0ICpjcyA9IHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCAq
PihvKTsKLQotICAgIGFzc2VydChjcyA9PSBtX2NhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAoY3Mt
PmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoZXJyb3JFdmVudCwg
dHJ1ZSwgZmFsc2UpOwotICAgIGVsc2UgewotICAgICAgICBldmFsdWF0ZVNjcmlwdChjcy0+dXJs
KCksIGNzLT5zY3JpcHQoKSk7Ci0gICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KGxvYWRFdmVudCwg
ZmFsc2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBjcy0+ZGVyZWYodGhpcyk7Ci0gICAgbV9jYWNo
ZWRTY3JpcHQgPSAwOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlw
dChjb25zdCBTdHJpbmcmIFVSTCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCi17Ci0gICAgaWYgKG1f
ZXZhbHVhdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgRnJhbWUgKmZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgS0pTUHJveHkgKnBy
b3h5ID0gZnJhbWUtPmpTY3JpcHQoKTsKLSAgICAgICAgaWYgKHByb3h5KSB7Ci0gICAgICAgICAg
ICBtX2V2YWx1YXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBwcm94eS0+ZXZhbHVhdGUoVVJMLCAw
LCBzY3JpcHQsIDApOwotICAgICAgICAgICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRl
cmluZygpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6
OnRleHQoKSBjb25zdAotewotICAgIFN0cmluZyB2YWwgPSAiIjsKLSAgICAKLSAgICBmb3IgKE5v
ZGUgKm4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChuLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4
dCAqPihuKS0+ZGF0YSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdmFsOwotfQotCi12b2lk
IEhUTUxTY3JpcHRFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IG51bUNoaWxkcmVuID0gY2hpbGROb2RlQ291
bnQoKTsKLSAgICAKLSAgICBpZiAobnVtQ2hpbGRyZW4gPT0gMSAmJiBmaXJzdENoaWxkKCktPmlz
VGV4dE5vZGUoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUZXh0ICo+KGZpcnN0Q2hpbGQoKSkt
PnNldERhdGEodmFsdWUsIGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobnVtQ2hpbGRyZW4gPiAwKSB7Ci0gICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgfQot
ICAgIAotICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHZhbHVlLmlt
cGwoKSksIGVjKTsKLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpodG1sRm9yKCkgY29u
c3QKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4K
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEh0
bWxGb3IoY29uc3QgU3RyaW5nICYvKnZhbHVlKi8pCi17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5
czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVu
dDo6ZXZlbnQoKSBjb25zdAotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZv
ciBmdXR1cmUgdXNlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0
RWxlbWVudDo6c2V0RXZlbnQoY29uc3QgU3RyaW5nICYvKnZhbHVlKi8pCi17Ci0gICAgLy8gRE9N
IExldmVsIDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi19Ci0KLVN0cmluZyBIVE1M
U2NyaXB0RWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShjaGFyc2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldENoYXJzZXQo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIsIHZh
bHVlKTsKLX0KLQotYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6ZGVmZXIoKSBjb25zdAotewotICAg
IHJldHVybiAhZ2V0QXR0cmlidXRlKGRlZmVyQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRN
TFNjcmlwdEVsZW1lbnQ6OnNldERlZmVyKGJvb2wgZGVmZXIpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGRlZmVyQXR0ciwgZGVmZXIgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdl
dEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFNy
Yyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MU3R5bGVFbGVt
ZW50OjpIVE1MU3R5bGVFbGVtZW50KERvY3VtZW50ICpkb2MpIDogSFRNTEVsZW1lbnQoc3R5bGVU
YWcsIGRvYykKLXsKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLX0KLQotLy8gb3RoZXIgc3R1ZmYu
Li4KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpCi0gICAg
ICAgIG1fdHlwZSA9IGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKQotICAgICAgICBtX21lZGlhID0gYXR0ci0+
dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIEhU
TUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MU3R5
bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50
KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwotICAgIGlmIChtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHls
ZVNlbGVjdG9yKCk7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KCkKLXsKLSAgICBTdHJpbmcgdGV4dCA9ICIiOwotCi0gICAgZm9yIChOb2RlKiBjID0gZmlyc3RD
aGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKGMtPm5vZGVUeXBl
KCkgPT0gVEVYVF9OT0RFIHx8IGMtPm5vZGVUeXBlKCkgPT0gQ0RBVEFfU0VDVElPTl9OT0RFIHx8
IGMtPm5vZGVUeXBlKCkgPT0gQ09NTUVOVF9OT0RFKQotICAgICAgICAgICAgdGV4dCArPSBjLT5u
b2RlVmFsdWUoKTsKLQotICAgIGlmIChtX3NoZWV0KSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0ICo+KG1fc2hlZXQuZ2V0KCkpLT5pc0xvYWRpbmcoKSkKLSAgICAgICAg
ICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsgLy8gUmVtb3ZlIG91cnNlbHZlcyBm
cm9tIHRoZSBzaGVldCBsaXN0LgotICAgICAgICBtX3NoZWV0ID0gMDsKLSAgICB9Ci0KLSAgICBt
X2xvYWRpbmcgPSBmYWxzZTsKLSAgICBpZiAoKG1fdHlwZS5pc0VtcHR5KCkgfHwgbV90eXBlID09
ICJ0ZXh0L2NzcyIpIC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKLSAgICAgICAgICYmICht
X21lZGlhLmlzTnVsbCgpIHx8IG1fbWVkaWEuY29udGFpbnMoInNjcmVlbiIpIHx8IG1fbWVkaWEu
Y29udGFpbnMoImFsbCIpIHx8IG1fbWVkaWEuY29udGFpbnMoInByaW50IikpKSB7Ci0gICAgICAg
IGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwotICAgICAgICBtX2xvYWRpbmcgPSB0cnVl
OwotICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcyk7Ci0gICAgICAgIG1f
c2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsICFkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0g
ICAgICAgIE1lZGlhTGlzdCAqbWVkaWEgPSBuZXcgTWVkaWFMaXN0KG1fc2hlZXQuZ2V0KCksIG1f
bWVkaWEpOwotICAgICAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYSk7Ci0gICAgICAgIG1fbG9h
ZGluZyA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNMb2FkaW5nKCkgJiYgbV9zaGVldCkK
LSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwotfQotCi1ib29sIEhUTUxT
dHlsZUVsZW1lbnQ6OmlzTG9hZGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbG9hZGluZykKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX3NoZWV0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQo
KSktPmlzTG9hZGluZygpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNoZWV0TG9hZGVk
KCkKLXsKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNo
ZWV0TG9hZGVkKCk7Ci19Ci0KLWJvb2wgSFRNTFN0eWxlRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25z
dAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGRpc2FibGVkQXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBkaXNhYmxlZCA/ICIiIDogMCk7Ci19Ci0K
LVN0cmluZyBIVE1MU3R5bGVFbGVtZW50OjptZWRpYSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShtZWRpYUF0dHIpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldE1l
ZGlhKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG1lZGlhQXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFN0eWxlRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0
eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxUaXRsZUVs
ZW1lbnQ6OkhUTUxUaXRsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
KHRpdGxlVGFnLCBkb2MpLCBtX3RpdGxlKCIiKQotewotfQotCi1IVE1MVGl0bGVFbGVtZW50Ojp+
SFRNTFRpdGxlRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTFRpdGxlRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwotICAgIGRvY3VtZW50KCktPnNldFRpdGxlKG1fdGl0bGUsIHRoaXMpOwotfQotCi12b2lk
IEhUTUxUaXRsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlVGl0bGUo
dGhpcyk7Ci19Ci0KLXZvaWQgSFRNTFRpdGxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLXsK
LSAgICBIVE1MRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgbV90aXRsZSA9ICIiOwot
ICAgIGZvciAoTm9kZSogYyA9IGZpcnN0Q2hpbGQoKTsgYyAhPSAwOyBjID0gYy0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgaWYgKGMtPm5vZGVUeXBlKCkgPT0gVEVYVF9OT0RFIHx8IGMtPm5vZGVU
eXBlKCkgPT0gQ0RBVEFfU0VDVElPTl9OT0RFKQotICAgICAgICAgICAgbV90aXRsZSArPSBjLT5u
b2RlVmFsdWUoKTsKLSAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5z
ZXRUaXRsZShtX3RpdGxlLCB0aGlzKTsKLX0KLQotU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRl
eHQoKSBjb25zdAotewotICAgIFN0cmluZyB2YWwgPSAiIjsKLSAgICAKLSAgICBmb3IgKE5vZGUg
Km4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlm
IChuLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dCAq
PihuKS0+ZGF0YSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdmFsOwotfQotCi12b2lkIEhU
TUxUaXRsZUVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgp
OwotICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA9PSAxICYmIGZpcnN0Q2hpbGQoKS0+aXNUZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHQgKj4oZmlyc3RDaGlsZCgpKS0+c2V0
RGF0YSh2YWx1ZSwgZWMpOwotICAgIH0gZWxzZSB7ICAKLSAgICAgICAgaWYgKG51bUNoaWxkcmVu
ID4gMCkgewotICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgfQotICAgIAot
ICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5pbXBs
KCkpLCBlYyk7Ci0gICAgfQotfQotCiB9CkluZGV4OiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzI1
KQorKysgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNjg3
ICsyMSwyMCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Imh0bWxfaGVhZGltcGwuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAKLSNpbmNs
dWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0j
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2lu
Y2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRl
ICJjc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0K
LUhUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudChiYXNlVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxCYXNlRWxlbWVudDo6fkhUTUxC
YXNlRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBocmVmQXR0cikgewotICAgICAgICBtX2hyZWYgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsK
LSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdl
dEF0dHIpIHsKLSAgICAgICAgbV90YXJnZXQgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBwcm9j
ZXNzKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKLX0KLQotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBw
cm9jZXNzKCk7Ci19Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50
KCkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgLy8g
U2luY2UgdGhlIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBhIGJhc2UgZWxlbWVudC4uLgotICAgIC8v
IChUaGlzIHdpbGwgYnJlYWsgaW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgYmFzZSBlbGVtZW50cywg
YnV0IHRoYXQncyBub3QgdmFsaWQgYW55d2F5ICg/KSkKLSAgICBkb2N1bWVudCgpLT5zZXRCYXNl
VVJMKCBEZXByZWNhdGVkU3RyaW5nOjpudWxsICk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0QmFzZVRh
cmdldCggRGVwcmVjYXRlZFN0cmluZzo6bnVsbCApOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVu
dDo6cHJvY2VzcygpCi17Ci0gICAgaWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmKCFtX2hyZWYuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAg
ICAgIGRvY3VtZW50KCktPnNldEJhc2VVUkwoIEtVUkwoIGRvY3VtZW50KCktPmZyYW1lKCktPnVy
bCgpLCBtX2hyZWYuZGVwcmVjYXRlZFN0cmluZygpICkudXJsKCkgKTsKLQotICAgIGlmKCFtX3Rh
cmdldC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VUYXJnZXQoIG1fdGFy
Z2V0LmRlcHJlY2F0ZWRTdHJpbmcoKSApOwotCi0gICAgLy8gIyMjIHNob3VsZCBjaGFuZ2luZyBh
IGRvY3VtZW50J3MgYmFzZSBVUkwgZHluYW1pY2FsbHkgYXV0b21hdGljYWxseSB1cGRhdGUgYWxs
IGltYWdlcywgc3R5bGVzaGVldHMgZXRjPwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0
SHJlZihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwg
dmFsdWUpOwotfQotCi12b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChE
b2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQobGlua1RhZywgZG9jKQotewotICAgIG1f
bG9hZGluZyA9IGZhbHNlOwotICAgIG1fY2FjaGVkU2hlZXQgPSAwOwotICAgIG1faXNTdHlsZVNo
ZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVybmF0ZSA9IGZhbHNlOwotICAgIG1fZGlzYWJsZWRTdGF0
ZSA9IDA7Ci19Ci0KLUhUTUxMaW5rRWxlbWVudDo6fkhUTUxMaW5rRWxlbWVudCgpCi17Ci0gICAg
aWYgKG1fY2FjaGVkU2hlZXQpCi0gICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwot
fQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxl
ZCkKLXsKLSAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0ZTsKLSAgICBt
X2Rpc2FibGVkU3RhdGUgPSBfZGlzYWJsZWQgPyAyIDogMTsKLSAgICBpZiAob2xkRGlzYWJsZWRT
dGF0ZSAhPSBtX2Rpc2FibGVkU3RhdGUpIHsKLSAgICAgICAgLy8gSWYgd2UgY2hhbmdlIHRoZSBk
aXNhYmxlZCBzdGF0ZSB3aGlsZSB0aGUgc2hlZXQgaXMgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBo
YXZlIHRvCi0gICAgICAgIC8vIHBlcmZvcm0gdGhyZWUgY2hlY2tzOgotICAgICAgICBpZiAoaXNM
b2FkaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIENoZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21l
cyBkaXNhYmxlZCB3aGlsZSBpdCB3YXMgbG9hZGluZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKLSAg
ICAgICAgICAgIC8vIGEgbWFpbiBzaGVldCBvciBhIHNoZWV0IHRoYXQgd2FzIHByZXZpb3VzbHkg
ZW5hYmxlZCB2aWEgc2NyaXB0LCB0aGVuIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIHJlbW92
ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgaWYgKG1f
ZGlzYWJsZWRTdGF0ZSA9PSAyICYmICghbV9hbHRlcm5hdGUgfHwgb2xkRGlzYWJsZWRTdGF0ZSA9
PSAxKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci0K
LSAgICAgICAgICAgIC8vIENoZWNrICMyOiBBbiBhbHRlcm5hdGUgc2hlZXQgYmVjb21lcyBlbmFi
bGVkIHdoaWxlIGl0IGlzIHN0aWxsIGxvYWRpbmcuCi0gICAgICAgICAgICBpZiAobV9hbHRlcm5h
dGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+
YWRkUGVuZGluZ1NoZWV0KCk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrICMzOiBBIG1haW4gc2hl
ZXQgYmVjb21lcyBlbmFibGVkIHdoaWxlIGl0IHdhcyBzdGlsbCBsb2FkaW5nIGFuZAotICAgICAg
ICAgICAgLy8gYWZ0ZXIgaXQgd2FzIGRpc2FibGVkIHZpYSBzY3JpcHQuICBJdCB0YWtlcyByZWFs
bHkgdGVycmlibGUgY29kZSB0byBtYWtlIHRoaXMKLSAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBk
b3VibGUgdG9nZ2xlIGZvciBubyByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9u
Ci0gICAgICAgICAgICAvLyB2aXJ0dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8g
YWJvdXQgMTIgZW5hYmxlL2Rpc2FibGVzIG9uIG9ubHkgMwotICAgICAgICAgICAgLy8gc2hlZXRz
LiA6KQotICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0g
MSAmJiBvbGREaXNhYmxlZFN0YXRlID09IDIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+
YWRkUGVuZGluZ1NoZWV0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBzaGVldCBpcyBhbHJl
YWR5IGxvYWRpbmcganVzdCBiYWlsLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gTG9hZCB0aGUgc2hlZXQsIHNpbmNlIGl0J3MgbmV2ZXIgYmVlbiBsb2FkZWQg
YmVmb3JlLgotICAgICAgICBpZiAoIW1fc2hlZXQgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEpCi0g
ICAgICAgICAgICBwcm9jZXNzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50
KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsgLy8gVXBkYXRlIHRoZSBzdHlsZSBzZWxlY3Rvci4K
LSAgICB9Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSByZWxBdHRy
KSB7Ci0gICAgICAgIHRva2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCkpOwotICAgICAg
ICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsK
LSAgICAgICAgbV91cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52
YWx1ZSgpKSk7Ci0gICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSB0eXBlQXR0cikgewotICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpOwotICAgICAg
ICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKSB7
Ci0gICAgICAgIG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dl
cigpOwotICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
ZGlzYWJsZWRBdHRyKSB7Ci0gICAgICAgIHNldERpc2FibGVkU3RhdGUoIWF0dHItPmlzTnVsbCgp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nJiByZWxTdHIpCi17Ci0gICAgbV9pc1N0eWxlU2hlZXQgPSBtX2lz
SWNvbiA9IG1fYWx0ZXJuYXRlID0gZmFsc2U7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZWwgPSBy
ZWxTdHIuZGVwcmVjYXRlZFN0cmluZygpLmxvd2VyKCk7Ci0gICAgaWYgKHJlbCA9PSAic3R5bGVz
aGVldCIpCi0gICAgICAgIG1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChyZWwg
PT0gImljb24iIHx8IHJlbCA9PSAic2hvcnRjdXQgaWNvbiIpCi0gICAgICAgIG1faXNJY29uID0g
dHJ1ZTsKLSAgICBlbHNlIGlmIChyZWwgPT0gImFsdGVybmF0ZSBzdHlsZXNoZWV0IiB8fCByZWwg
PT0gInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikKLSAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSBtX2Fs
dGVybmF0ZSA9IHRydWU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFRva2VuaXplIHRoZSByZWwg
YXR0cmlidXRlIGFuZCBzZXQgYml0cyBiYXNlZCBvbiBzcGVjaWZpYyBrZXl3b3JkcyB0aGF0IHdl
IGZpbmQuCi0gICAgICAgIHJlbC5yZXBsYWNlKCdcbicsICcgJyk7Ci0gICAgICAgIERlcHJlY2F0
ZWRTdHJpbmdMaXN0IGxpc3QgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCByZWwp
OyAgICAgICAgCi0gICAgICAgIGZvciAoRGVwcmVjYXRlZFN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGkg
PSBsaXN0LmJlZ2luKCk7IGkgIT0gbGlzdC5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
KmkgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICAgICAgICAgIG1faXNTdHlsZVNoZWV0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCppID09ICJhbHRlcm5hdGUiKQotICAgICAgICAgICAg
ICAgIG1fYWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCppID09ICJpY29u
IikKLSAgICAgICAgICAgICAgICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKLXsKLSAgICBpZiAoIWluRG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIHR5cGUgPSBtX3R5cGUubG93ZXIo
KTsKLSAgICAKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotCi0gICAg
Ly8gSUUgZXh0ZW5zaW9uOiBsb2NhdGlvbiBvZiBzbWFsbCBpY29uIGZvciBsb2NhdGlvbmJhciAv
IGJvb2ttYXJrcwotICAgIGlmIChmcmFtZSAmJiBtX2lzSWNvbiAmJiAhbV91cmwuaXNFbXB0eSgp
ICYmICFmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGUuaXNFbXB0
eSgpKSAvLyBNb3ppbGxhIGV4dGVuc2lvbiB0byBJRSBleHRlbnNpb246IGljb24gc3BlY2lmaWVk
IHdpdGggdHlwZQotICAgICAgICAgICAgZnJhbWUtPmJyb3dzZXJFeHRlbnNpb24oKS0+c2V0VHlw
ZWRJY29uVVJMKEtVUkwobV91cmwuZGVwcmVjYXRlZFN0cmluZygpKSwgdHlwZSk7Ci0gICAgICAg
IGVsc2UgCi0gICAgICAgICAgICBmcmFtZS0+YnJvd3NlckV4dGVuc2lvbigpLT5zZXRJY29uVVJM
KEtVUkwobV91cmwuZGVwcmVjYXRlZFN0cmluZygpKSk7Ci0gICAgfQotCi0gICAgLy8gU3R5bGVz
aGVldAotICAgIC8vIFRoaXMgd2FzIGJ1Z2d5IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8
bGluayByZWw9ImFsdGVybmF0ZSI+LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1l
YW5pbmcuIC1kd2gKLSAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IDIgJiYgKHR5cGUuY29udGFp
bnMoInRleHQvY3NzIikgfHwgbV9pc1N0eWxlU2hlZXQpICYmIGRvY3VtZW50KCktPmZyYW1lKCkp
IHsKLSAgICAgICAgLy8gbm8gbmVlZCB0byBsb2FkIHN0eWxlIHNoZWV0cyB3aGljaCBhcmVuJ3Qg
Zm9yIHRoZSBzY3JlZW4gb3V0cHV0Ci0gICAgICAgIC8vICMjIyB0aGVyZSBtYXkgYmUgaW4gc29t
ZSBzaXR1YXRpb25zIGUuZy4gZm9yIGFuIGVkaXRvciBvciBzY3JpcHQgdG8gbWFuaXB1bGF0ZQot
ICAgICAgICAvLyBhbHNvLCBkb24ndCBsb2FkIHN0eWxlIHNoZWV0cyBmb3Igc3RhbmRhbG9uZSBk
b2N1bWVudHMKLSAgICAgICAgaWYgKG1fbWVkaWEuaXNOdWxsKCkgfHwgbV9tZWRpYS5jb250YWlu
cygic2NyZWVuIikgfHwgbV9tZWRpYS5jb250YWlucygiYWxsIikgfHwgbV9tZWRpYS5jb250YWlu
cygicHJpbnQiKSkgewotCi0gICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIGFzIGEgcGVuZGlu
ZyBzaGVldCwgYnV0IG9ubHkgaWYgd2UgYXJlbid0IGFuIGFsdGVybmF0ZSAKLSAgICAgICAgICAg
IC8vIHN0eWxlc2hlZXQuICBBbHRlcm5hdGUgc3R5bGVzaGVldHMgZG9uJ3QgaG9sZCB1cCByZW5k
ZXIgdHJlZSBjb25zdHJ1Y3Rpb24uCi0gICAgICAgICAgICBpZiAoIWlzQWx0ZXJuYXRlKCkpCi0g
ICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hzZXQgPSBnZXRBdHRyaWJ1dGUoY2hh
cnNldEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChtX2NhY2hlZFNo
ZWV0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGluZykgewotICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY2FjaGVkU2hl
ZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFN0eWxlU2hlZXQobV91cmwsIGNo
c2V0KTsKLSAgICAgICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICAgICAgICAgIG1f
Y2FjaGVkU2hlZXQtPnJlZih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICht
X3NoZWV0KSB7Ci0gICAgICAgIC8vIHdlIG5vIGxvbmdlciBjb250YWluIGEgc3R5bGVzaGVldCwg
ZS5nLiBwZXJoYXBzIHJlbCBvciB0eXBlIHdhcyBjaGFuZ2VkCi0gICAgICAgIG1fc2hlZXQgPSAw
OwotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Ci0gICAgfQotfQot
Ci12b2lkIEhUTUxMaW5rRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHByb2Nlc3MoKTsKLX0KLQot
dm9pZCBIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQotewotICAgIEhUTUxF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lk
IEhUTUxMaW5rRWxlbWVudDo6c2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwgY29uc3Qg
U3RyaW5nICZzaGVldFN0cikKLXsKLSAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhp
cywgdXJsKTsKLSAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldFN0ciwgIWRvY3VtZW50KCkt
PmluQ29tcGF0TW9kZSgpKTsKLQotICAgIE1lZGlhTGlzdCAqbWVkaWEgPSBuZXcgTWVkaWFMaXN0
KG1fc2hlZXQuZ2V0KCksIG1fbWVkaWEpOwotICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlhKTsK
LQotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotCi0gICAgLy8gVGVsbCB0aGUgZG9jIGFib3V0IHRo
ZSBzaGVldC4KLSAgICBpZiAoIWlzTG9hZGluZygpICYmIG1fc2hlZXQgJiYgIWlzRGlzYWJsZWQo
KSAmJiAhaXNBbHRlcm5hdGUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRl
ZCgpOwotfQotCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6aXNMb2FkaW5nKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9sb2FkaW5nKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW1fc2hlZXQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCk7Ci19Ci0KLXZvaWQgSFRNTExpbmtF
bGVtZW50OjpzaGVldExvYWRlZCgpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhaXNEaXNh
YmxlZCgpICYmICFpc0FsdGVybmF0ZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0
TG9hZGVkKCk7Ci19Ci0KLWJvb2wgSFRNTExpbmtFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGUgKmF0dHIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBocmVmQXR0
cjsKLX0KLQotYm9vbCBIVE1MTGlua0VsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIWdldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhU
TUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoZGlzYWJsZWRBdHRyLCBkaXNhYmxlZCA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1M
TGlua0VsZW1lbnQ6OmNoYXJzZXQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
Y2hhcnNldEF0dHIpOwotfQotCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q2hhcnNldChjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7Ci19Ci0K
LXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTGlua0Vs
ZW1lbnQ6OmhyZWZsYW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhyZWZs
YW5nQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmbGFuZyhjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmbGFuZ0F0dHIsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6bWVkaWEoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNl
dE1lZGlhKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG1lZGlhQXR0
ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZWwoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmVsQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVt
ZW50OjpzZXRSZWwoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocmVs
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZXYoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmV2QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtF
bGVtZW50OjpzZXRSZXYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
cmV2QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0YXJnZXQoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7Ci19CiAKLXZvaWQg
SFRNTExpbmtFbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK0hUTUxTdHls
ZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVt
ZW50KHN0eWxlVGFnLCBkb2MpCisgICAgLCBtX2xvYWRpbmcoZmFsc2UpCiB7Ci0gICAgc2V0QXR0
cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6
dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoRG9jdW1lbnQgKmRvYykgOiBI
VE1MRWxlbWVudChtZXRhVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxNZXRhRWxlbWVudDo6fkhUTUxN
ZXRhRWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBodHRwX2VxdWl2QXR0cikgewotICAgICAgICBtX2VxdWl2ID0gYXR0ci0+dmFsdWUoKTsKLSAg
ICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbnRlbnRB
dHRyKSB7Ci0gICAgICAgIG1fY29udGVudCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIHByb2Nl
c3MoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAg
ICAvLyBEbyBub3RoaW5nLgotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCk7Ci0gICAgcHJvY2VzcygpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2Vzcygp
Ci17Ci0gICAgLy8gR2V0IHRoZSBkb2N1bWVudCB0byBwcm9jZXNzIHRoZSB0YWcsIGJ1dCBvbmx5
IGlmIHdlJ3JlIGFjdHVhbGx5IHBhcnQgb2YgRE9NIHRyZWUgKGNoYW5naW5nIGEgbWV0YSB0YWcg
d2hpbGUKLSAgICAvLyBpdCdzIG5vdCBpbiB0aGUgdHJlZSBzaG91bGRuJ3QgaGF2ZSBhbnkgZWZm
ZWN0IG9uIHRoZSBkb2N1bWVudCkKLSAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFtX2VxdWl2Lmlz
TnVsbCgpICYmICFtX2NvbnRlbnQuaXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnByb2Nl
c3NIdHRwRXF1aXYobV9lcXVpdixtX2NvbnRlbnQpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVt
ZW50Ojpjb250ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvbnRlbnRB
dHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldENvbnRlbnQoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29udGVudEF0dHIsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6
OnNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSho
dHRwX2VxdWl2QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpuYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MTWV0YUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxNZXRhRWxlbWVu
dDo6c2NoZW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNjaGVtZUF0dHIp
OwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0U2NoZW1lKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNjaGVtZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1IVE1MU2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoRG9j
dW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHNjcmlwdFRhZywgZG9jKSwgbV9jYWNoZWRT
Y3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFsc2UpCi17
Ci19Ci0KLUhUTUxTY3JpcHRFbGVtZW50Ojp+SFRNTFNjcmlwdEVsZW1lbnQoKQotewotICAgIGlm
IChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmRlcmVmKHRoaXMpOwot
fQotCi1ib29sIEhUTUxTY3JpcHRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0
dHIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyOwotfQotCi12
b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKQotewotICAgIC8vIElmIGEg
bm9kZSBpcyBpbnNlcnRlZCBhcyBhIGNoaWxkIG9mIHRoZSBzY3JpcHQgZWxlbWVudAotICAgIC8v
IGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50
Ci0gICAgLy8gd2UgZXZhbHVhdGUgdGhlIHNjcmlwdC4KLSAgICBpZiAoIW1fY3JlYXRlZEJ5UGFy
c2VyICYmIGluRG9jdW1lbnQoKSAmJiBmaXJzdENoaWxkKCkpCi0gICAgICAgIGV2YWx1YXRlU2Ny
aXB0KGRvY3VtZW50KCktPlVSTCgpLCB0ZXh0KCkpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IHNyY0F0dHIpIHsKLSAgICAgICAgaWYgKG1fZXZhbHVhdGVkIHx8IG1fY2FjaGVk
U2NyaXB0IHx8IG1fY3JlYXRlZEJ5UGFyc2VyIHx8ICFpbkRvY3VtZW50KCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gRklYTUU6IEV2YWx1YXRlIHNjcmlwdHMgaW4gdmlld2xl
c3MgZG9jdW1lbnRzLgotICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4u
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzI3Ci0gICAgICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB1cmwgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0
QXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBk
b2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCh1cmwsIGNoYXJzZXQpOwotICAg
ICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlZih0aGlzKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gb25sb2FkQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6
OmNsb3NlUmVuZGVyZXIoKQotewotICAgIC8vIFRoZSBwYXJzZXIganVzdCByZWFjaGVkIDwvc2Ny
aXB0Pi4gSWYgd2UgaGF2ZSBubyBzcmMgYW5kIG5vIHRleHQsCi0gICAgLy8gYWxsb3cgZHluYW1p
YyBsb2FkaW5nIGxhdGVyLgotICAgIGlmIChnZXRBdHRyaWJ1dGUoc3JjQXR0cikuaXNFbXB0eSgp
ICYmIHRleHQoKS5pc0VtcHR5KCkpCi0gICAgICAgIHNldENyZWF0ZWRCeVBhcnNlcihmYWxzZSk7
Ci0gICAgSFRNTEVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQotewotICAgIEhUTUxFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpOwotCi0gICAgYXNzZXJ0KCFtX2NhY2hlZFNjcmlwdCk7Ci0KLSAg
ICBpZiAobV9jcmVhdGVkQnlQYXJzZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBG
SVhNRTogRXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gZXZhbHVhdGUgc2NyaXB0cyB3aGljaCBhcmUg
aW5zZXJ0ZWQgaW50byBhIAotICAgIC8vIHZpZXdsZXNzIGRvY3VtZW50IGJ1dCB0aGlzJ2xsIGRv
IGZvciBub3cuCi0gICAgLy8gU2VlIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTcyNwotICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0gZ2V0QXR0cmlidXRl
KHNyY0F0dHIpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBEZXByZWNhdGVk
U3RyaW5nIGNoYXJzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKLSAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+
cmVxdWVzdFNjcmlwdCh1cmwsIGNoYXJzZXQpOwotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVm
KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUncyBhbiBl
bXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hvdWxkbid0IGV2YWx1YXRlIHRoZSBzY3JpcHQKLSAgICAv
LyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlzIGluc2VydGVkIGFmdGVyd2FyZHMgKGJ5IHNldHRpbmcg
dGV4dCBvciBpbm5lclRleHQpCi0gICAgLy8gaXQgc2hvdWxkIGJlIGV2YWx1YXRlZCwgYW5kIGV2
YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVhdGVzIGEgc2NyaXB0IG9uY2UuCi0gICAgU3RyaW5nIHNj
cmlwdFN0cmluZyA9IHRleHQoKTsgICAgCi0gICAgaWYgKCFzY3JpcHRTdHJpbmcuaXNFbXB0eSgp
KQotICAgICAgICBldmFsdWF0ZVNjcmlwdChkb2N1bWVudCgpLT5VUkwoKSwgc2NyaXB0U3RyaW5n
KTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17
Ci0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAgIGlmIChtX2Nh
Y2hlZFNjcmlwdCkgewotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7Ci0gICAg
ICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZE9iamVjdCogbykKLXsKLSAgICBDYWNoZWRTY3JpcHQg
KmNzID0gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0ICo+KG8pOwotCi0gICAgYXNzZXJ0KGNzID09
IG1fY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChjcy0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAg
ICBkaXNwYXRjaEhUTUxFdmVudChlcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGV2YWx1YXRlU2NyaXB0KGNzLT51cmwoKSwgY3MtPnNjcmlwdCgpKTsKLSAgICAg
ICAgZGlzcGF0Y2hIVE1MRXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwotICAgIH0KLQot
ICAgIGNzLT5kZXJlZih0aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlwdCA9IDA7Ci19Ci0KLXZvaWQg
SFRNTFNjcmlwdEVsZW1lbnQ6OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgVVJMLCBjb25z
dCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAobV9ldmFsdWF0ZWQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlm
IChmcmFtZSkgewotICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBmcmFtZS0+alNjcmlwdCgpOwot
ICAgICAgICBpZiAocHJveHkpIHsKLSAgICAgICAgICAgIG1fZXZhbHVhdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHByb3h5LT5ldmFsdWF0ZShVUkwsIDAsIHNjcmlwdCwgMCk7Ci0gICAgICAgICAg
ICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgU3Ry
aW5nIHZhbCA9ICIiOwotICAgIAotICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAg
ICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG4pLT5kYXRhKCk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRl
eHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwotICAgIAotICAgIGlmIChudW1D
aGlsZHJlbiA9PSAxICYmIGZpcnN0Q2hpbGQoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PFRleHQgKj4oZmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh2YWx1ZSwgZWMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChudW1DaGlsZHJlbiA+IDApIHsKLSAg
ICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICB9Ci0gICAgCi0gICAgYXBwZW5kQ2hpbGQoZG9j
dW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZWMpOwotfQotCi1TdHJpbmcg
SFRNTFNjcmlwdEVsZW1lbnQ6Omh0bWxGb3IoKSBjb25zdAotewotICAgIC8vIERPTSBMZXZlbCAx
IHNheXM6IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0SHRtbEZvcihjb25zdCBTdHJpbmcgJi8qdmFs
dWUqLykKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVz
ZS4KLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpldmVudCgpIGNvbnN0Ci17Ci0gICAg
Ly8gRE9NIExldmVsIDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRFdmVudChjb25zdCBT
dHJpbmcgJi8qdmFsdWUqLykKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBm
b3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpjaGFyc2V0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUpOwotfQotCi1ib29sIEhUTUxTY3Jp
cHRFbGVtZW50OjpkZWZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZGVm
ZXJBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0RGVmZXIo
Ym9vbCBkZWZlcikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVmZXJBdHRyLCBkZWZlciA/ICIiIDog
MCk7Ci19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6c3JjKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKLX0K
LQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxTY3Jp
cHRFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVB
dHRyKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcg
JnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9j
dW1lbnQgKmRvYykgOiBIVE1MRWxlbWVudChzdHlsZVRhZywgZG9jKQotewotICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwogfQogCiAvLyBvdGhlciBzdHVmZi4uLgpAQCAtODA0LDY2ICsxMzcsNCBAQCB2
b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyCiAgICAgc2V0QXR0cmlidXRl
KHR5cGVBdHRyLCB2YWx1ZSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFRpdGxl
RWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnQodGl0bGVUYWcsIGRvYyksIG1fdGl0bGUoIiIpCi17Ci19Ci0KLUhUTUxUaXRsZUVsZW1lbnQ6
On5IVE1MVGl0bGVFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUobV90aXRsZSwgdGhpcyk7Ci19Ci0KLXZv
aWQgSFRNTFRpdGxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCi17Ci0gICAgSFRNTEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLT5yZW1vdmVUaXRs
ZSh0aGlzKTsKLX0KLQotdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKQot
ewotICAgIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICBtX3RpdGxlID0gIiI7
Ci0gICAgZm9yIChOb2RlKiBjID0gZmlyc3RDaGlsZCgpOyBjICE9IDA7IGMgPSBjLT5uZXh0U2li
bGluZygpKQotICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUgfHwgYy0+bm9k
ZVR5cGUoKSA9PSBDREFUQV9TRUNUSU9OX05PREUpCi0gICAgICAgICAgICBtX3RpdGxlICs9IGMt
Pm5vZGVWYWx1ZSgpOwotICAgIGlmIChpbkRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCkt
PnNldFRpdGxlKG1fdGl0bGUsIHRoaXMpOwotfQotCi1TdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6
dGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHZhbCA9ICIiOwotICAgIAotICAgIGZvciAoTm9k
ZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbCArPSBzdGF0aWNfY2FzdDxUZXh0
ICo+KG4pLT5kYXRhKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQg
SFRNTFRpdGxlRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZUNvdW50
KCk7Ci0gICAgCi0gICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCAqPihmaXJzdENoaWxkKCkpLT5z
ZXREYXRhKHZhbHVlLCBlYyk7Ci0gICAgfSBlbHNlIHsgIAotICAgICAgICBpZiAobnVtQ2hpbGRy
ZW4gPiAwKSB7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0gICAg
Ci0gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHZhbHVlLmlt
cGwoKSksIGVjKTsKLSAgICB9Ci19Ci0KIH0KSW5kZXg6IGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDE0MzI1
KQorKysgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNjMg
KzIxLDE2IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5k
ZWYgSFRNTF9IRUFESU1QTF9ICi0jZGVmaW5lIEhUTUxfSEVBRElNUExfSAorI2lmbmRlZiBIVE1M
U2NyaXB0RWxlbWVudF9ICisjZGVmaW5lIEhUTUxTY3JpcHRFbGVtZW50X0gKIAogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBTdHJpbmc7Ci1jbGFzcyBGcmFt
ZVZpZXc7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBTdHlsZVNoZWV0OwogCi1jbGFz
cyBIVE1MQmFzZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBI
VE1MQmFzZUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0gICAgfkhUTUxCYXNlRWxlbWVudCgpOwot
Ci0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJu
IG1faHJlZjsgfQotICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAgIHZvaWQgcHJvY2Vzcygp
OwotICAgIAotICAgIHZvaWQgc2V0SHJlZihjb25zdCBTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRU
YXJnZXQoY29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1faHJlZjsK
LSAgICBTdHJpbmcgbV90YXJnZXQ7Ci19OwotCi0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJsaWMgV2ViQ29yZTo6Q2FjaGVkT2JqZWN0Q2xpZW50
LCBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTGlua0VsZW1lbnQoRG9j
dW1lbnQgKmRvYyk7Ci0gICAgfkhUTUxMaW5rRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9y
YmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KLSAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChi
b29sKTsKLQotICAgIFN0cmluZyBjaGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0
KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRIcmVmKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBocmVmbGFuZygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0SHJlZmxhbmcoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIG1lZGlh
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNZWRpYShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJp
bmcgcmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWwoY29uc3QgU3RyaW5nICYpOwotCi0gICAg
U3RyaW5nIHJldigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmV2KGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJp
bmcgJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25z
dCBTdHJpbmcgJik7Ci0KLSAgICBTdHlsZVNoZWV0KiBzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hlZXQuZ2V0KCk7IH0KLQotICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnQKLSAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsK
LQotICAgIHZvaWQgcHJvY2VzcygpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAg
IC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hl
ZXQoY29uc3QgV2ViQ29yZTo6U3RyaW5nICZ1cmwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmc2hl
ZXQpOwotICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzaGVldExvYWRlZCgp
OwotCi0gICAgYm9vbCBpc0FsdGVybmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0
ZSA9PSAwICYmIG1fYWx0ZXJuYXRlOyB9Ci0gICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDI7IH0KLSAgICBib29sIGlzRW5hYmxlZFZpYVNjcmlw
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAxOyB9Ci0KLSAgICBpbnQgZGlz
YWJsZWRTdGF0ZSgpIHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZTsgfQotICAgIHZvaWQgc2V0RGlz
YWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHRva2VuaXplUmVs
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsKTsKLQotcHJvdGVjdGVkOgotICAgIFdl
YkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQgKm1fY2FjaGVkU2hlZXQ7Ci0gICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAgU3RyaW5nIG1fdXJsOwotICAgIFN0cmluZyBtX3R5
cGU7Ci0gICAgU3RyaW5nIG1fbWVkaWE7Ci0gICAgaW50IG1fZGlzYWJsZWRTdGF0ZTsgLy8gMD11
bnNldChkZWZhdWx0KSwgMT1lbmFibGVkIHZpYSBzY3JpcHQsIDI9ZGlzYWJsZWQKLSAgICBib29s
IG1fbG9hZGluZyA6IDE7Ci0gICAgYm9vbCBtX2FsdGVybmF0ZSA6IDE7Ci0gICAgYm9vbCBtX2lz
U3R5bGVTaGVldCA6IDE7Ci0gICAgYm9vbCBtX2lzSWNvbiA6IDE7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNZXRhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAot
ewotcHVibGljOgotICAgIEhUTUxNZXRhRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRN
TE1ldGFFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0K
LSAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudChjb25zdCBT
dHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHR0cEVxdWl2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRI
dHRwRXF1aXYoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHNjaGVtZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFN0cmluZyAmKTsKLQotcHJvdGVjdGVkOgot
ICAgIFN0cmluZyBtX2VxdWl2OwotICAgIFN0cmluZyBtX2NvbnRlbnQ7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxTY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50LCBwdWJsaWMgV2ViQ29yZTo6Q2FjaGVkT2JqZWN0Q2xpZW50CitjbGFzcyBIVE1MU2NyaXB0
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAog
ewogcHVibGljOgogICAgIEhUTUxTY3JpcHRFbGVtZW50KERvY3VtZW50ICpkb2MpOwpAQCAtMTkw
LDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9E
b2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKFdlYkNvcmU6OkNhY2hlZE9iamVjdCAqZmluaXNo
ZWRPYmopOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3QgKmZp
bmlzaGVkT2JqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKIApAQCAt
MjAyLDkxICs1NSwzMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBT
dHJpbmcgJlVSTCwgY29uc3QgU3RyaW5nICZzY3JpcHQpOwogCiAgICAgU3RyaW5nIHRleHQoKSBj
b25zdDsKLSAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nICYpOworICAgIHZvaWQgc2V0VGV4
dChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBodG1sRm9yKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldEh0bWxGb3IoY29uc3Qg
U3RyaW5nJik7CiAKICAgICBTdHJpbmcgZXZlbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldEV2ZW50
KGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldEV2ZW50KGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3Ry
aW5nICYpOworICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wg
ZGVmZXIoKSBjb25zdDsKICAgICB2b2lkIHNldERlZmVyKGJvb2wpOwogCiAgICAgU3RyaW5nIHNy
YygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNl
dFNyYyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkU2NyaXB0ICptX2NhY2hlZFNjcmlw
dDsKKyAgICBDYWNoZWRTY3JpcHQqIG1fY2FjaGVkU2NyaXB0OwogICAgIGJvb2wgbV9jcmVhdGVk
QnlQYXJzZXI7CiAgICAgYm9vbCBtX2V2YWx1YXRlZDsKIH07CiAKLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVi
bGljOgotICAgIEhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0KLSAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gMTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkg
eyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQotCi0gICAgU3R5bGVTaGVldCAqc2hl
ZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0LmdldCgpOyB9Ci0KLSAgICAvLyBvdmVybG9hZCBm
cm9tIEhUTUxFbGVtZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0
OwotICAgIHZvaWQgc2hlZXRMb2FkZWQoKTsKLQotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsK
LSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgU3RyaW5nIG1lZGlhKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRNZWRpYShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3RlZDoK
LSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBib29sIG1fbG9hZGluZzsK
LSAgICBTdHJpbmcgbV90eXBlOwotICAgIFN0cmluZyBtX21lZGlhOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MVGl0bGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+
SFRNTFRpdGxlRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsK
LQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmlu
ZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX3RpdGxlOwotfTsKLQogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IGh0bWwvaHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvaHRtbF9oZWFkaW1wbC5oCShyZXZpc2lvbiAxNDMyNSkKKysrIGh0bWwvaHRtbF9oZWFk
aW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0jaWZuZGVmIEhUTUxfSEVBRElNUExfSAotI2RlZmlu
ZSBIVE1MX0hFQURJTVBMX0gKLQotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAi
Y3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NT
U3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDYWNoZWRTY3Jp
cHQ7Ci1jbGFzcyBTdHJpbmc7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBIVE1MRm9ybUVsZW1l
bnQ7Ci1jbGFzcyBTdHlsZVNoZWV0OwotCi1jbGFzcyBIVE1MQmFzZUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MQmFzZUVsZW1lbnQoRG9jdW1lbnQgKmRv
Yyk7Ci0gICAgfkhUTUxCYXNlRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9
Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAg
ICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1faHJlZjsgfQotICAgIFN0cmluZyB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKLQotICAgIHZvaWQgcHJvY2VzcygpOwotICAgIAotICAgIHZvaWQgc2V0SHJlZihj
b25zdCBTdHJpbmcgJik7Ci0gICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nICYpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1faHJlZjsKLSAgICBTdHJpbmcgbV90YXJnZXQ7Ci19Owot
Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJs
aWMgV2ViQ29yZTo6Q2FjaGVkT2JqZWN0Q2xpZW50LCBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1
YmxpYzoKLSAgICBIVE1MTGlua0VsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0gICAgfkhUTUxMaW5r
RWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBib29sIGRpc2FibGVkKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLQotICAgIFN0cmluZyBjaGFyc2V0
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0
cmluZyBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIFN0cmluZyBocmVmbGFuZygpIGNvbnN0OwotICAgIHZvaWQgc2V0SHJlZmxhbmcoY29uc3Qg
U3RyaW5nICYpOwotCi0gICAgU3RyaW5nIG1lZGlhKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNZWRp
YShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgcmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRSZWwoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHJldigpIGNvbnN0OwotICAgIHZv
aWQgc2V0UmV2KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdDsK
LSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHlsZVNo
ZWV0KiBzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXQuZ2V0KCk7IH0KLQotICAgIC8vIG92
ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLQotICAgIHZvaWQgcHJvY2VzcygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLQotICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50
Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgV2ViQ29yZTo6U3RyaW5nICZ1
cmwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmc2hlZXQpOwotICAgIGJvb2wgaXNMb2FkaW5nKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzaGVldExvYWRlZCgpOwotCi0gICAgYm9vbCBpc0FsdGVybmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAwICYmIG1fYWx0ZXJuYXRlOyB9Ci0g
ICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDI7
IH0KLSAgICBib29sIGlzRW5hYmxlZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWRTdGF0ZSA9PSAxOyB9Ci0KLSAgICBpbnQgZGlzYWJsZWRTdGF0ZSgpIHsgcmV0dXJuIG1fZGlz
YWJsZWRTdGF0ZTsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcmVsKTsKLQotcHJvdGVjdGVkOgotICAgIFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQg
Km1fY2FjaGVkU2hlZXQ7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAg
U3RyaW5nIG1fdXJsOwotICAgIFN0cmluZyBtX3R5cGU7Ci0gICAgU3RyaW5nIG1fbWVkaWE7Ci0g
ICAgaW50IG1fZGlzYWJsZWRTdGF0ZTsgLy8gMD11bnNldChkZWZhdWx0KSwgMT1lbmFibGVkIHZp
YSBzY3JpcHQsIDI9ZGlzYWJsZWQKLSAgICBib29sIG1fbG9hZGluZyA6IDE7Ci0gICAgYm9vbCBt
X2FsdGVybmF0ZSA6IDE7Ci0gICAgYm9vbCBtX2lzU3R5bGVTaGVldCA6IDE7Ci0gICAgYm9vbCBt
X2lzSWNvbiA6IDE7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNZXRh
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxNZXRhRWxl
bWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTE1ldGFFbGVtZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0KLSAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q29udGVudChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgaHR0
cEVxdWl2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIdHRwRXF1aXYoY29uc3QgU3RyaW5nICYpOwot
Ci0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
ICYpOwotCi0gICAgU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2NoZW1lKGNv
bnN0IFN0cmluZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX2VxdWl2OwotICAgIFN0
cmluZyBtX2NvbnRlbnQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxT
Y3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgV2ViQ29yZTo6Q2FjaGVk
T2JqZWN0Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnQoRG9jdW1lbnQg
KmRvYyk7Ci0gICAgfkhUTUxTY3JpcHRFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4g
bmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2Vy
dGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoV2ViQ29yZTo6Q2FjaGVkT2JqZWN0
ICpmaW5pc2hlZE9iaik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdDsK
LQotICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1f
Y3JlYXRlZEJ5UGFyc2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNs
b3NlUmVuZGVyZXIoKTsKLQotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHQoY29uc3QgU3RyaW5nICZV
UkwsIGNvbnN0IFN0cmluZyAmc2NyaXB0KTsKLQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBodG1sRm9yKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmlu
ZyBldmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RXZlbnQoY29uc3QgU3RyaW5nICYpOwotCi0g
ICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3Ry
aW5nICYpOwotCi0gICAgYm9vbCBkZWZlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVmZXIoYm9v
bCk7Ci0KLSAgICBTdHJpbmcgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3Ry
aW5nICYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nICYpOwotCi1wcml2YXRlOgotICAgIFdlYkNvcmU6OkNhY2hlZFNjcmlwdCAqbV9j
YWNoZWRTY3JpcHQ7Ci0gICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKLSAgICBib29sIG1fZXZh
bHVhdGVkOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MU3R5bGVFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTFN0eWxlRWxlbWVu
dChEb2N1bWVudCAqZG9jKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBib29s
IGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0
Tm9kZSgpOyB9Ci0KLSAgICBTdHlsZVNoZWV0ICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hl
ZXQuZ2V0KCk7IH0KLQotICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnQKLSAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKLQotICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzaGVldExvYWRlZCgp
OwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9v
bCk7Ci0KLSAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0
IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBl
KGNvbnN0IFN0cmluZyAmKTsKLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiBtX3NoZWV0OwotICAgIGJvb2wgbV9sb2FkaW5nOwotICAgIFN0cmluZyBtX3R5cGU7Ci0gICAg
U3RyaW5nIG1fbWVkaWE7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxU
aXRsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MVGl0
bGVFbGVtZW50KERvY3VtZW50ICpkb2MpOwotICAgIH5IVE1MVGl0bGVFbGVtZW50KCk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9E
b2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotCi0gICAgU3RyaW5nIHRleHQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
U3RyaW5nIG1fdGl0bGU7Ci19OwotCi19IC8vbmFtZXNwYWNlCi0KLSNlbmRpZgpJbmRleDogaHRt
bC9IVE1MQmFzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxCYXNlRWxlbWVudC5o
CShyZXZpc2lvbiAxNDMyNSkKKysrIGh0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDI2ICsyMSwxNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
KgogICovCi0jaWZuZGVmIEhUTUxfSEVBRElNUExfSAotI2RlZmluZSBIVE1MX0hFQURJTVBMX0gK
KyNpZm5kZWYgSFRNTEJhc2VFbGVtZW50X0gKKyNkZWZpbmUgSFRNTEJhc2VFbGVtZW50X0gKIAog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENh
Y2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBTdHJpbmc7Ci1j
bGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBTdHlsZVNoZWV0
OwotCiBjbGFzcyBIVE1MQmFzZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MQmFzZUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7CisgICAgSFRNTEJhc2VFbGVt
ZW50KERvY3VtZW50Kik7CiAgICAgfkhUTUxCYXNlRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
Rm9yYmlkZGVuOyB9CkBAIC00OSwyNDQgKzQwLDIwIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgaHJl
ZigpIGNvbnN0IHsgcmV0dXJuIG1faHJlZjsgfQogICAgIFN0cmluZyB0YXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAK
ICAgICB2b2lkIHByb2Nlc3MoKTsKICAgICAKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5n
ICYpOwotICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmKTsKKyAgICB2b2lkIHNldEhy
ZWYoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7CiAK
IHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9ocmVmOwogICAgIFN0cmluZyBtX3RhcmdldDsKIH07
CiAKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1
YmxpYyBXZWJDb3JlOjpDYWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBIVE1MRWxlbWVudAotewot
cHVibGljOgotICAgIEhUTUxMaW5rRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTExp
bmtFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGJvb2wgZGlzYWJsZWQo
KSBjb25zdDsKLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgU3RyaW5nIGNoYXJz
ZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nICYpOwotCi0gICAg
U3RyaW5nIGhyZWYoKSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nICYpOwot
Ci0gICAgU3RyaW5nIGhyZWZsYW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmbGFuZyhjb25z
dCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1l
ZGlhKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyByZWwoKSBjb25zdDsKLSAgICB2b2lk
IHNldFJlbChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgcmV2KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRSZXYoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0eXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0eWxl
U2hlZXQqIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQotCi0gICAgLy8g
b3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0gICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBXZWJDb3JlOjpTdHJpbmcg
JnVybCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nICZzaGVldCk7Ci0gICAgYm9vbCBpc0xvYWRpbmco
KSBjb25zdDsKLSAgICB2b2lkIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICBib29sIGlzQWx0ZXJuYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDAgJiYgbV9hbHRlcm5hdGU7IH0K
LSAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0g
MjsgfQotICAgIGJvb2wgaXNFbmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNh
YmxlZFN0YXRlID09IDE7IH0KLQotICAgIGludCBkaXNhYmxlZFN0YXRlKCkgeyByZXR1cm4gbV9k
aXNhYmxlZFN0YXRlOyB9Ci0gICAgdm9pZCBzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVk
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNv
bnN0OwotICAgIAotICAgIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3Ry
aW5nJiByZWwpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVl
dCAqbV9jYWNoZWRTaGVldDsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAg
ICBTdHJpbmcgbV91cmw7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV9tZWRpYTsK
LSAgICBpbnQgbV9kaXNhYmxlZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQg
dmlhIHNjcmlwdCwgMj1kaXNhYmxlZAotICAgIGJvb2wgbV9sb2FkaW5nIDogMTsKLSAgICBib29s
IG1fYWx0ZXJuYXRlIDogMTsKLSAgICBib29sIG1faXNTdHlsZVNoZWV0IDogMTsKLSAgICBib29s
IG1faXNJY29uIDogMTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE1l
dGFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTE1ldGFF
bGVtZW50KERvY3VtZW50ICpkb2MpOwotICAgIH5IVE1MTWV0YUVsZW1lbnQoKTsKLQotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0KLSAgICB2b2lkIHByb2Nlc3MoKTsKLQotICAgIFN0cmluZyBjb250ZW50KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBo
dHRwRXF1aXYoKSBjb25zdDsKLSAgICB2b2lkIHNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcgJik7
Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcgJik7Ci0KLSAgICBTdHJpbmcgc2NoZW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY2hlbWUo
Y29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fZXF1aXY7Ci0gICAg
U3RyaW5nIG1fY29udGVudDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRN
TFNjcmlwdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpDYWNo
ZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MU2NyaXB0RWxlbWVudChEb2N1bWVu
dCAqZG9jKTsKLSAgICB+SFRNTFNjcmlwdEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9
Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVy
biBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChXZWJDb3JlOjpDYWNoZWRPYmpl
Y3QgKmZpbmlzaGVkT2JqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0
OwotCi0gICAgdm9pZCBzZXRDcmVhdGVkQnlQYXJzZXIoYm9vbCBjcmVhdGVkQnlQYXJzZXIpIHsg
bV9jcmVhdGVkQnlQYXJzZXIgPSBjcmVhdGVkQnlQYXJzZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VSZW5kZXJlcigpOwotCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBTdHJpbmcg
JlVSTCwgY29uc3QgU3RyaW5nICZzY3JpcHQpOwotCi0gICAgU3RyaW5nIHRleHQoKSBjb25zdDsK
LSAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGh0bWxGb3Io
KSBjb25zdDsKLSAgICB2b2lkIHNldEh0bWxGb3IoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3Ry
aW5nIGV2ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRFdmVudChjb25zdCBTdHJpbmcgJik7Ci0K
LSAgICBTdHJpbmcgY2hhcnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBT
dHJpbmcgJik7Ci0KLSAgICBib29sIGRlZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZlcihi
b29sKTsKLQotICAgIFN0cmluZyBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBT
dHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShj
b25zdCBTdHJpbmcgJik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkU2NyaXB0ICpt
X2NhY2hlZFNjcmlwdDsKLSAgICBib29sIG1fY3JlYXRlZEJ5UGFyc2VyOwotICAgIGJvb2wgbV9l
dmFsdWF0ZWQ7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxTdHlsZUVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MU3R5bGVFbGVt
ZW50KERvY3VtZW50ICpkb2MpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1Rl
eHROb2RlKCk7IH0KLQotICAgIFN0eWxlU2hlZXQgKnNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9z
aGVldC5nZXQoKTsgfQotCi0gICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAotICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZCgpOwotCi0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNoZWV0TG9hZGVk
KCk7Ci0KLSAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChi
b29sKTsKLQotICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29u
c3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5
cGUoY29uc3QgU3RyaW5nICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hl
ZXQ+IG1fc2hlZXQ7Ci0gICAgYm9vbCBtX2xvYWRpbmc7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAg
ICBTdHJpbmcgbV9tZWRpYTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRN
TFRpdGxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxU
aXRsZUVsZW1lbnQoRG9jdW1lbnQgKmRvYyk7Ci0gICAgfkhUTUxUaXRsZUVsZW1lbnQoKTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4g
bmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBTdHJpbmcgbV90aXRsZTsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBo
dG1sL0hUTUxUaXRsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUaXRsZUVsZW1l
bnQuaAkocmV2aXNpb24gMTQzMjUpCisrKyBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMjU3ICsyMSwxNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCiAgKgogICovCi0jaWZuZGVmIEhUTUxfSEVBRElNUExfSAotI2RlZmluZSBIVE1MX0hFQURJ
TVBMX0gKKyNpZm5kZWYgSFRNTFRpdGxlRWxlbWVudF9ICisjZGVmaW5lIEhUTUxUaXRsZUVsZW1l
bnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJjc3Nfc3R5bGVzaGVl
dGltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZVNoZWV0Owot
Y2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZFNjcmlwdDsKLWNsYXNzIFN0
cmluZzsKLWNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIFN0
eWxlU2hlZXQ7Ci0KLWNsYXNzIEhUTUxCYXNlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAot
ewotcHVibGljOgotICAgIEhUTUxCYXNlRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRN
TEJhc2VFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIFN0cmluZyBocmVm
KCkgY29uc3QgeyByZXR1cm4gbV9ocmVmOyB9Ci0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotCi0g
ICAgdm9pZCBwcm9jZXNzKCk7Ci0gICAgCi0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyAm
KTsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcgJik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBTdHJpbmcgbV9ocmVmOwotICAgIFN0cmluZyBtX3RhcmdldDsKLX07Ci0KLQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxMaW5rRWxlbWVudCA6IHB1YmxpYyBXZWJDb3JlOjpD
YWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhU
TUxMaW5rRWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+SFRNTExpbmtFbGVtZW50KCk7Ci0K
LSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKLSAgICB2
b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGhyZWYoKSBj
b25zdDsKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGhy
ZWZsYW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmbGFuZyhjb25zdCBTdHJpbmcgJik7Ci0K
LSAgICBTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0cmlu
ZyAmKTsKLQotICAgIFN0cmluZyByZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbChjb25zdCBT
dHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgcmV2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZXYoY29u
c3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
VGFyZ2V0KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0eWxlU2hlZXQqIHNoZWV0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQotCi0gICAgLy8gb3ZlcmxvYWQgZnJvbSBI
VE1MRWxlbWVudAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwotCi0gICAgdm9pZCBwcm9jZXNzKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21E
b2N1bWVudCgpOwotCi0gICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGllbnQKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnVybCwgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nICZzaGVldCk7Ci0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLSAgICB2
b2lkIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICBib29sIGlzQWx0ZXJuYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNhYmxlZFN0YXRlID09IDAgJiYgbV9hbHRlcm5hdGU7IH0KLSAgICBib29sIGlzRGlz
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMjsgfQotICAgIGJvb2wg
aXNFbmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDE7
IH0KLQotICAgIGludCBkaXNhYmxlZFN0YXRlKCkgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlOyB9
Ci0gICAgdm9pZCBzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0OwotICAgIAotICAg
IHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldCAqbV9jYWNoZWRTaGVl
dDsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBTdHJpbmcgbV91cmw7
Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV9tZWRpYTsKLSAgICBpbnQgbV9kaXNh
YmxlZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlhIHNjcmlwdCwgMj1k
aXNhYmxlZAotICAgIGJvb2wgbV9sb2FkaW5nIDogMTsKLSAgICBib29sIG1fYWx0ZXJuYXRlIDog
MTsKLSAgICBib29sIG1faXNTdHlsZVNoZWV0IDogMTsKLSAgICBib29sIG1faXNJY29uIDogMTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTE1ldGFFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTE1ldGFFbGVtZW50KERvY3VtZW50
ICpkb2MpOwotICAgIH5IVE1MTWV0YUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0KLSAgICB2
b2lkIHByb2Nlc3MoKTsKLQotICAgIFN0cmluZyBjb250ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb250ZW50KGNvbnN0IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBodHRwRXF1aXYoKSBjb25z
dDsKLSAgICB2b2lkIHNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBT
dHJpbmcgc2NoZW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY2hlbWUoY29uc3QgU3RyaW5nICYp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fZXF1aXY7Ci0gICAgU3RyaW5nIG1fY29udGVu
dDsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFNjcmlwdEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpDYWNoZWRPYmplY3RDbGllbnQK
LXsKLXB1YmxpYzoKLSAgICBIVE1MU2NyaXB0RWxlbWVudChEb2N1bWVudCAqZG9jKTsKLSAgICB+
SFRNTFNjcmlwdEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBi
b29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlGaW5pc2hlZChXZWJDb3JlOjpDYWNoZWRPYmplY3QgKmZpbmlzaGVkT2Jq
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXRDcmVhdGVkQnlQYXJzZXIoYm9vbCBjcmVhdGVkQnlQYXJzZXIpIHsgbV9jcmVhdGVkQnlQYXJz
ZXIgPSBjcmVhdGVkQnlQYXJzZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigp
OwotCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdChjb25zdCBTdHJpbmcgJlVSTCwgY29uc3QgU3Ry
aW5nICZzY3JpcHQpOwotCi0gICAgU3RyaW5nIHRleHQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRl
eHQoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGh0bWxGb3IoKSBjb25zdDsKLSAgICB2
b2lkIHNldEh0bWxGb3IoY29uc3QgU3RyaW5nICYpOwotCi0gICAgU3RyaW5nIGV2ZW50KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRFdmVudChjb25zdCBTdHJpbmcgJik7Ci0KLSAgICBTdHJpbmcgY2hh
cnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBTdHJpbmcgJik7Ci0KLSAg
ICBib29sIGRlZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZlcihib29sKTsKLQotICAgIFN0
cmluZyBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcgJik7Ci0KLSAg
ICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcgJik7
Ci0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q2FjaGVkU2NyaXB0ICptX2NhY2hlZFNjcmlwdDsK
LSAgICBib29sIG1fY3JlYXRlZEJ5UGFyc2VyOwotICAgIGJvb2wgbV9ldmFsdWF0ZWQ7Ci19Owot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxTdHlsZUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MU3R5bGVFbGVtZW50KERvY3VtZW50ICpk
b2MpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29u
c3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0KLQot
ICAgIFN0eWxlU2hlZXQgKnNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQot
Ci0gICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAotICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwotICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotCi0gICAgYm9v
bCBpc0xvYWRpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNoZWV0TG9hZGVkKCk7Ci0KLSAgICBib29s
IGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLQotICAgIFN0
cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgU3RyaW5nICYpOwot
Ci0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5n
ICYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0g
ICAgYm9vbCBtX2xvYWRpbmc7Ci0gICAgU3RyaW5nIG1fdHlwZTsKLSAgICBTdHJpbmcgbV9tZWRp
YTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogY2xhc3MgSFRNTFRpdGxlRWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgotICAgIEhUTUxUaXRsZUVsZW1lbnQoRG9j
dW1lbnQgKmRvYyk7CisgICAgSFRNTFRpdGxlRWxlbWVudChEb2N1bWVudCopOwogICAgIH5IVE1M
VGl0bGVFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSog
bmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0KQEAgLTI4MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAKICAg
ICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcgJik7
CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgU3Ry
aW5nIG1fdGl0bGU7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gMTQzMjUpCisr
KyByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVDb2wuaCIKLSNpbmNsdWRlICJodG1sX3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW5jbHVkZSAiS1dR
VGV4dFN0cmVhbS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNjYsNyArNjYsNyBAQCB2
b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBkYXRlRnJvbUVsZW1lbnQoCiAgICAgaW50IG9sZENTcGFu
ID0gY1NwYW47CiAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsKICAgICBpZiAobm9kZSAmJiAo
bm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0aFRhZykpKSB7Ci0g
ICAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50ICp0YyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50ICo+KG5vZGUpOworICAgICAgICBIVE1MVGFibGVDZWxsRWxlbWVudCogdGMgPSBz
dGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KG5vZGUpOwogICAgICAgICBjU3BhbiA9
IHRjLT5jb2xTcGFuKCk7CiAgICAgICAgIHJTcGFuID0gdGMtPnJvd1NwYW4oKTsKICAgICB9Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDE0MzI1KQorKysgcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAKLSNpbmNsdWRlICJodG1s
X3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUYWJs
ZUNvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJv
bUVsZW1lbnQoKQogICAgIGludCBvbGRTcGFuID0gbV9zcGFuOwogICAgIE5vZGUqIG5vZGUgPSBl
bGVtZW50KCk7CiAgICAgaWYgKG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUoY29sVGFnKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKGNvbGdyb3VwVGFnKSkpIHsKLSAgICAgICAgSFRNTFRhYmxlQ29sRWxl
bWVudCAqdGMgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50ICo+KG5vZGUpOworICAg
ICAgICBIVE1MVGFibGVDb2xFbGVtZW50KiB0YyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVs
ZW1lbnQqPihub2RlKTsKICAgICAgICAgbV9zcGFuID0gdGMtPnNwYW4oKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9zcGFuID0gIShzdHlsZSgpICYmIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBUQUJM
RV9DT0xVTU5fR1JPVVApOwpJbmRleDogZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBk
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNDMyNSkKKysrIGRvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDEwIEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0VkaXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCkBAIC02Miw3ICs2NCw2
IEBACiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRz
aW1wbC5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9oZWFkaW1w
bC5oIgogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAia2pzX2JpbmRpbmcu
aCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKSW5kZXg6IGRvbS94bWxfdG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBkb20veG1sX3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDE0MzI1KQorKysg
ZG9tL3htbF90b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTEgQEAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1
ZGUgIktXUUxvYWRlci5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCi0jaW5jbHVkZSAiaHRt
bF9oZWFkaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4
bWwvcGFyc2VySW50ZXJuYWxzLmg+CkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNDMzMSkKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw2IEBACiAJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFC
QyAvKiBodG1sX2Jsb2NraW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyM0EwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfYmxvY2tpbXBsLmgg
Ki87IH07CiAJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNDMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLzsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAw
MUU5QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAq
LzsgfTsKLQkJOTNGMTk4RTgwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaGVhZGltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQzMDJERTQz
OTYwMTg2MzVDQSAvKiBodG1sX2hlYWRpbXBsLmggKi87IH07CiAJCTkzRjE5OEU5MDgyNDVFNTkw
MDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2Vp
bXBsLmggKi87IH07CiAJCTkzRjE5OEVBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2lubGluZWlt
cGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MjQ3MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2lubGluZWltcGwuaCAqLzsgfTsKIAkJOTNGMTk4
RUIwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ5MDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX2xpc3RpbXBsLmggKi87IH07CkBAIC01MjAsNyArNTE5LDYgQEAKIAkJOTNGMTlBOTAwODI0
NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjM5MDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2Jsb2NraW1wbC5jcHAgKi87IH07CiAJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1M
RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUyM0QyM0IwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5jcHAgKi87IH07CiAJ
CTkzRjE5QTkyMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1
Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovOyB9OwotCQk5M0YxOUE5NDA4MjQ1RTU5MDAxRTlBQkMg
LyogaHRtbF9oZWFkaW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDI0MjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9oZWFkaW1wbC5jcHAg
Ki87IH07CiAJCTkzRjE5QTk1MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0NDAy
REU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5NjA4
MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbmxpbmVpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ2MDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX2lubGluZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5NzA4MjQ1RTU5MDAxRTlBQkMgLyog
aHRtbF9saXN0aW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDI0ODAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9saXN0aW1wbC5jcHAgKi87
IH07CkBAIC02NzEsNiArNjY5LDE4IEBACiAJCUE4NzFEQjMwMEExNTBCRDYwMEIxMkE2OCAvKiBI
VE1MVGFibGVSb3dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NzFEQjIyMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVSb3dFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJQTg3MURCMzEwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZVJv
d0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NzFEQjIzMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVSb3dFbGVtZW50LmggKi87IH07
CiAJCUE4NzFEQjMyMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREIy
NDBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwICovOyB9Owor
CQlBODcxREMxRjBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREMxMzBBMTUyMDU3MDBC
MTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmggKi87IH07CisJCUE4NzFEQzIwMEExNTIwNTcwMEIx
MkE2OCAvKiBIVE1MTGlua0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NzFEQzE0MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTGlua0VsZW1l
bnQuaCAqLzsgfTsKKwkJQTg3MURDMjEwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcx
REMxNTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTExpbmtFbGVtZW50LmNwcCAqLzsgfTsKKwkJQTg3
MURDMjIwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxTY3JpcHRFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFEQzE2MEExNTIwNTcwMEIx
MkE2OCAvKiBIVE1MU2NyaXB0RWxlbWVudC5jcHAgKi87IH07CisJCUE4NzFEQzIzMEExNTIwNTcw
MEIxMkE2OCAvKiBIVE1MU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODcxREMxNzBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFN0eWxl
RWxlbWVudC5oICovOyB9OworCQlBODcxREMyNDBBMTUyMDU3MDBCMTJBNjggLyogSFRNTE1ldGFF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODcxREMxODBBMTUyMDU3MDBCMTJBNjggLyogSFRNTE1ldGFFbGVtZW50LmggKi87IH07CisJCUE4
NzFEQzI1MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURDMTkwQTE1MjA1NzAwQjEy
QTY4IC8qIEhUTUxTY3JpcHRFbGVtZW50LmggKi87IH07CisJCUE4NzFEQzI2MEExNTIwNTcwMEIx
MkE2OCAvKiBIVE1MU3R5bGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFEQzFBMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU3R5bGVF
bGVtZW50LmNwcCAqLzsgfTsKKwkJQTg3MURDMjcwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxNZXRh
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODcxREMxQjBBMTUyMDU3MDBCMTJBNjggLyogSFRNTE1ldGFFbGVtZW50LmNwcCAqLzsgfTsK
KwkJQTg3MURDMjgwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxUaXRsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFEQzFDMEExNTIwNTcw
MEIxMkE2OCAvKiBIVE1MVGl0bGVFbGVtZW50LmggKi87IH07CisJCUE4NzFEQzI5MEExNTIwNTcw
MEIxMkE2OCAvKiBIVE1MVGl0bGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFEQzFEMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MVGl0
bGVFbGVtZW50LmNwcCAqLzsgfTsKKwkJQTg3MURDMkEwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxC
YXNlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODcxREMxRTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVtZW50LmNwcCAqLzsg
fTsKIAkJQTg4QUQzODYwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNTQwODk3
MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2UuY3BwICovOyB9OwogCQlBODhBRDM4NzA5
NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNTUwODk3MDFGNzAwQkE1MTE0IC8qIEtS
ZW5kZXJpbmdEZXZpY2UuaCAqLzsgfTsKIAkJQTg4QUQzODgwOTUyNDg2RDAwMUREMTk2IC8qIEtS
ZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEMwRkI1OTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0ZpbGxQ
YWludGVyLmNwcCAqLzsgfTsKQEAgLTIwMjUsNiArMjAzNSwxOCBAQAogCQlBODcxREIyMjBBMTUw
QkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlUm93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRhYmxlUm93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4NzFEQjIzMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVS
b3dFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MVGFibGVS
b3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFEQjI0MEExNTBC
RDYwMEIxMkE2OCAvKiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcxREMxMzBBMTUyMDU3MDBCMTJBNjggLyogSFRN
TEJhc2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQmFz
ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg3MURDMTQwQTE1MjA1
NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSFRNTExpbmtFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4NzFEQzE1MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTGlua0VsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxMaW5rRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NzFEQzE2MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1M
U2NyaXB0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRNTFNjcmlwdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcx
REMxNzBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFN0eWxlRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFN0eWxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBODcxREMxODBBMTUyMDU3MDBCMTJBNjggLyogSFRNTE1ldGFFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTWV0YUVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg3MURDMTkwQTE1MjA1NzAwQjEyQTY4IC8q
IEhUTUxTY3JpcHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
VE1MU2NyaXB0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcxREMx
QTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFN0eWxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFN0eWxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE4NzFEQzFCMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTWV0YUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxNZXRh
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NzFEQzFDMEExNTIw
NTcwMEIxMkE2OCAvKiBIVE1MVGl0bGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MVGl0bGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE4NzFEQzFEMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MVGl0bGVFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MVGl0bGVFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg3MURDMUUwQTE1MjA1NzAwQjEyQTY4IC8q
IEhUTUxCYXNlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTEJhc2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg4
NDI4MzgwOTMwOEMxQzAwQjZENDYxIC8qIFNWR05hbWVzV3JhcHBlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR05hbWVzV3JhcHBl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlBODg0MjgzOTA5MzA4QzFDMDBCNkQ0NjEgLyogU1ZHRWxlbWVudEZhY3RvcnlXcmFw
cGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHRWxlbWVudEZhY3RvcnlXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4ODQyODNEMDkzMDhDMUMwMEI2
RDQ2MSAvKiBET01MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTI2MjYsOCArMjY0OCw2IEBACiAJCUY1MjNEMjNDMDJE
RTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRTAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyM0Yw
MkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDI0MjAyREU0
Mzk2MDE4NjM1Q0EgLyogaHRtbF9oZWFkaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBodG1sX2hlYWRpbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNE
MjQzMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2hlYWRpbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfaGVhZGltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNE
MjQ0MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2ltYWdlaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBodG1sX2ltYWdlaW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNTIzRDI0NTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gaHRtbF9pbWFnZWlt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUY1MjNEMjQ2MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2lubGluZWltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaHRt
bF9pbmxpbmVpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC0zMjUzLDggKzMyNzMsNiBAQAogCQkJCUY1MjNEMjM4MDJERTQz
OTYwMTg2MzVDQSAvKiBodG1sX2Jhc2VpbXBsLmggKi8sCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBIC8qIGh0bWxfYmxvY2tpbXBsLmNwcCAqLywKIAkJCQlGNTIzRDIzQTAyREU0Mzk2MDE4
NjM1Q0EgLyogaHRtbF9ibG9ja2ltcGwuaCAqLywKLQkJCQlGNTIzRDI0MjAyREU0Mzk2MDE4NjM1
Q0EgLyogaHRtbF9oZWFkaW1wbC5jcHAgKi8sCi0JCQkJRjUyM0QyNDMwMkRFNDM5NjAxODYzNUNB
IC8qIGh0bWxfaGVhZGltcGwuaCAqLywKIAkJCQlGNTIzRDI0NDAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9pbWFnZWltcGwuY3BwICovLAogCQkJCUY1MjNEMjQ1MDJERTQzOTYwMTg2MzVDQSAvKiBo
dG1sX2ltYWdlaW1wbC5oICovLAogCQkJCUY1MjNEMjQ2MDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2lubGluZWltcGwuY3BwICovLApAQCAtMzI2Myw2ICszMjgxLDggQEAKIAkJCQlGNTIzRDI0OTAy
REU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9saXN0aW1wbC5oICovLAogCQkJCUE4NzFENDU0MEExMjdD
QkMwMEIxMkE2OCAvKiBIVE1MQXBwbGV0RWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MUQ0NTMwQTEy
N0NCQzAwQjEyQTY4IC8qIEhUTUxBcHBsZXRFbGVtZW50LmggKi8sCisJCQkJQTg3MURDMUUwQTE1
MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5jcHAgKi8sCisJCQkJQTg3MURDMTMwQTE1
MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5oICovLAogCQkJCUE4REYzRkNCMDk3RkEw
RkIwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50LmNwcCAqLywKIAkJCQlBOERGM0ZDQTA5
N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTEJhc2VGb250RWxlbWVudC5oICovLAogCQkJCUE4MTM2OUI3
MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MQnV0dG9uRWxlbWVudC5jcHAgKi8sCkBAIC0zMzAwLDYg
KzMzMjAsMTAgQEAKIAkJCQlBODEzNjlDNjA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTExhYmVsRWxl
bWVudC5oICovLAogCQkJCUE4MTM2OUM1MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MTGVnZW5kRWxl
bWVudC5jcHAgKi8sCiAJCQkJQTgxMzY5QzQwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxMZWdlbmRF
bGVtZW50LmggKi8sCisJCQkJQTg3MURDMTUwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxl
bWVudC5jcHAgKi8sCisJCQkJQTg3MURDMTQwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxl
bWVudC5oICovLAorCQkJCUE4NzFEQzFCMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTWV0YUVsZW1l
bnQuY3BwICovLAorCQkJCUE4NzFEQzE4MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTWV0YUVsZW1l
bnQuaCAqLywKIAkJCQlBOERGM0ZDRDA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcCAqLywKIAkJCQlBOERGM0ZDQzA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xs
ZWN0aW9uLmggKi8sCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2IC8qIEhUTUxOYW1lcy5j
cHAgKi8sCkBAIC0zMzE4LDggKzMzNDIsMTIgQEAKIAkJCQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1
Q0EgLyogSFRNTFBhcnNlci5oICovLAogCQkJCUE4NzFENDREMEExMjdDQkMwMEIxMkE2OCAvKiBI
VE1MUGx1Z0luRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MUQ0NEMwQTEyN0NCQzAwQjEyQTY4IC8q
IEhUTUxQbHVnSW5FbGVtZW50LmggKi8sCisJCQkJQTg3MURDMTYwQTE1MjA1NzAwQjEyQTY4IC8q
IEhUTUxTY3JpcHRFbGVtZW50LmNwcCAqLywKKwkJCQlBODcxREMxOTBBMTUyMDU3MDBCMTJBNjgg
LyogSFRNTFNjcmlwdEVsZW1lbnQuaCAqLywKIAkJCQlBODEzNjlCRDA5NzM3NEY1MDBENzQ0NjMg
LyogSFRNTFNlbGVjdEVsZW1lbnQuY3BwICovLAogCQkJCUE4MTM2OUJDMDk3Mzc0RjUwMEQ3NDQ2
MyAvKiBIVE1MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCUE4NzFEQzFBMEExNTIwNTcwMEIxMkE2
OCAvKiBIVE1MU3R5bGVFbGVtZW50LmNwcCAqLywKKwkJCQlBODcxREMxNzBBMTUyMDU3MDBCMTJB
NjggLyogSFRNTFN0eWxlRWxlbWVudC5oICovLAogCQkJCUE4NzFEQjI0MEExNTBCRDYwMEIxMkE2
OCAvKiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MURCMUQwQTE1MEJE
NjAwQjEyQTY4IC8qIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi8sCiAJCQkJQTg3MURCMjAw
QTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZUNlbGxFbGVtZW50LmNwcCAqLywKQEAgLTMzMzgs
NiArMzM2Niw4IEBACiAJCQkJQTgxMzY5QkEwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxUZXh0QXJl
YUVsZW1lbnQuaCAqLywKIAkJCQlBQjIzQTMxMDA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRG
aWVsZElubmVyRWxlbWVudC5jcHAgKi8sCiAJCQkJQUIyM0EzMTEwOUJCQTc3NjAwNjdDQzUzIC8q
IEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnQuaCAqLywKKwkJCQlBODcxREMxRDBBMTUyMDU3MDBC
MTJBNjggLyogSFRNTFRpdGxlRWxlbWVudC5jcHAgKi8sCisJCQkJQTg3MURDMUMwQTE1MjA1NzAw
QjEyQTY4IC8qIEhUTUxUaXRsZUVsZW1lbnQuaCAqLywKIAkJCQlGNTIzRDI1MjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTFRva2VuaXplci5jcHAgKi8sCiAJCQkJRjUyM0QyNTMwMkRFNDM5NjAxODYz
NUNBIC8qIEhUTUxUb2tlbml6ZXIuaCAqLywKIAkJCSk7CkBAIC00NTA0LDcgKzQ1MzQsNiBAQAog
CQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2Jsb2NraW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOThFODA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9o
ZWFkaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTkwODI0NUU1OTAwMUU5QUJDIC8q
IGh0bWxfaW1hZ2VpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFQTA4MjQ1RTU5MDAx
RTlBQkMgLyogaHRtbF9pbmxpbmVpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFQjA4
MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9saXN0aW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC01MTE0
LDYgKzUxNDMsMTIgQEAKIAkJCQlBODcxREIyQzBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxl
UGFydEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFEQjJGMEExNTBCRDYwMEIxMkE2
OCAvKiBIVE1MVGFibGVDb2xFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREIzMTBB
MTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlUm93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTg3MURDMUYwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTg3MURDMjAwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTg3MURDMjMwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxTdHls
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4NzFEQzI0MEExNTIwNTcwMEIxMkE2OCAv
KiBIVE1MTWV0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4NzFEQzI1MEExNTIwNTcw
MEIxMkE2OCAvKiBIVE1MU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg3MURD
MjgwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtNTMyOCw3ICs1MzYzLDYgQEAKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRt
bF9ibG9ja2ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTEwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5MjA4MjQ1
RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlB
OTQwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaGVhZGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNGMTlBOTUwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTk2MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2lubGluZWltcGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTcwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxf
bGlzdGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01ODY4LDYgKzU5MDIsMTIgQEAKIAkJCQlB
ODcxREIyRTBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg3MURCMzAwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURCMzIwQTE1MEJENjAwQjEyQTY4IC8q
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NzFEQzIx
MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MTGlua0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTg3MURDMjIwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxTY3JpcHRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUE4NzFEQzI2MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU3R5bGVFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NzFEQzI3MEExNTIwNTcwMEIxMkE2OCAvKiBI
VE1MTWV0YUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg3MURDMjkwQTE1MjA1NzAw
QjEyQTY4IC8qIEhUTUxUaXRsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg3MURD
MkEwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsMTk4IEBACiAyMDA2LTA1
LTEyICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IGh0bWxfaGVhZGltcGwuKiBpbnRv
IHNlcGFyYXRlIGZpbGVzIChvbmUgcGVyIGNsYXNzKQorICAgICAgICBodHRwOi8vYnVnemlsbGEu
b3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzUKKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfY3Nz
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6CisgICAgICAgIChLSlM6
OkpTSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU0hUTUxFbGVtZW50
OjpsaW5rR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUNTUy5tbToKKyAgICAg
ICAgKCtbRE9NQ291bnRlciBfY291bnRlcldpdGg6XSk6CisgICAgICAgICgtW0RPTUNvdW50ZXIg
ZmluYWxpemVdKToKKyAgICAgICAgKC1bRE9NQ291bnRlciBfRE9NU3R5bGVTaGVldF0pOgorICAg
ICAgICAoLVtET01TdHlsZVNoZWV0IF9pbml0V2l0aFN0eWxlU2hlZXQ6XSk6CisgICAgICAgICgt
W0RPTVN0eWxlU2hlZXRMaXN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRE9NU3R5bGVTaGVldExp
c3QgZmluYWxpemVdKToKKyAgICAgICAgKC1bRE9NU3R5bGVTaGVldExpc3QgX3N0eWxlU2hlZXRM
aXN0XSk6CisgICAgICAgICgtW0RPTVN0eWxlU2hlZXRMaXN0IF9pbml0V2l0aFN0eWxlU2hlZXRM
aXN0Ol0pOgorICAgICAgICAoLVtET01DU1NTdHlsZVNoZWV0IF9DU1NTdHlsZVNoZWV0XSk6Cisg
ICAgICAgICgtW0RPTU1lZGlhTGlzdCBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTU1lZGlhTGlz
dCBmaW5hbGl6ZV0pOgorICAgICAgICAoLVtET01NZWRpYUxpc3QgX21lZGlhTGlzdF0pOgorICAg
ICAgICAoLVtET01NZWRpYUxpc3QgX2luaXRXaXRoTWVkaWFMaXN0Ol0pOgorICAgICAgICAoLVtE
T01DU1NSdWxlTGlzdCBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTUNTU1J1bGVMaXN0IGZpbmFs
aXplXSk6CisgICAgICAgICgtW0RPTUNTU1J1bGVMaXN0IF9ydWxlTGlzdF0pOgorICAgICAgICAo
LVtET01DU1NSdWxlTGlzdCBfaW5pdFdpdGhSdWxlTGlzdDpdKToKKyAgICAgICAgKC1bRE9NQ1NT
UnVsZSBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTUNTU1J1bGUgZmluYWxpemVdKToKKyAgICAg
ICAgKC1bRE9NQ1NTUnVsZSBfcnVsZV0pOgorICAgICAgICAoLVtET01DU1NSdWxlIF9pbml0V2l0
aFJ1bGU6XSk6CisgICAgICAgICgtW0RPTUNTU1N0eWxlUnVsZSBfc3R5bGVSdWxlXSk6CisgICAg
ICAgICgtW0RPTUNTU01lZGlhUnVsZSBfbWVkaWFSdWxlXSk6CisgICAgICAgICgtW0RPTUNTU0Zv
bnRGYWNlUnVsZSBfZm9udEZhY2VSdWxlXSk6CisgICAgICAgICgtW0RPTUNTU1BhZ2VSdWxlIF9w
YWdlUnVsZV0pOgorICAgICAgICAoLVtET01DU1NJbXBvcnRSdWxlIF9pbXBvcnRSdWxlXSk6Cisg
ICAgICAgICgtW0RPTUNTU0NoYXJzZXRSdWxlIF9pbXBvcnRSdWxlXSk6CisgICAgICAgICgtW0RP
TUNTU1N0eWxlRGVjbGFyYXRpb24gZGVhbGxvY10pOgorICAgICAgICAoLVtET01DU1NTdHlsZURl
Y2xhcmF0aW9uIGZpbmFsaXplXSk6CisgICAgICAgICgtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24g
X2luaXRXaXRoU3R5bGVEZWNsYXJhdGlvbjpdKToKKyAgICAgICAgKC1bRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiBfc3R5bGVEZWNsYXJhdGlvbl0pOgorICAgICAgICAoLVtET01DU1NWYWx1ZSBkZWFs
bG9jXSk6CisgICAgICAgICgtW0RPTUNTU1ZhbHVlIGZpbmFsaXplXSk6CisgICAgICAgICgtW0RP
TUNTU1ZhbHVlIF92YWx1ZV0pOgorICAgICAgICAoLVtET01DU1NWYWx1ZSBfaW5pdFdpdGhWYWx1
ZTpdKToKKyAgICAgICAgKC1bRE9NQ1NTUHJpbWl0aXZlVmFsdWUgX3ByaW1pdGl2ZVZhbHVlXSk6
CisgICAgICAgICgtW0RPTUNTU1ZhbHVlTGlzdCBfdmFsdWVMaXN0XSk6CisgICAgICAgIChnZXRX
cmFwcGVyRm9yUkdCKToKKyAgICAgICAgKHNldFdyYXBwZXJGb3JSR0IpOgorICAgICAgICAocmVt
b3ZlV3JhcHBlckZvclJHQik6CisgICAgICAgICgtW0RPTVJHQkNvbG9yIF9pbml0V2l0aFJHQjpd
KToKKyAgICAgICAgKC1bRE9NUmVjdCBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTVJlY3QgZmlu
YWxpemVdKToKKyAgICAgICAgKC1bRE9NUmVjdCBfcmVjdF0pOgorICAgICAgICAoLVtET01SZWN0
IF9pbml0V2l0aFJlY3Q6XSk6CisgICAgICAgICgtW0RPTUNvdW50ZXIgZGVhbGxvY10pOgorICAg
ICAgICAoLVtET01Db3VudGVyIF9jb3VudGVyXSk6CisgICAgICAgICgtW0RPTUNvdW50ZXIgX2lu
aXRXaXRoQ291bnRlcjpdKToKKyAgICAgICAgKC1bRE9NT2JqZWN0IHNoZWV0XSk6CisgICAgICAg
ICogYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tOgorICAgICAgICAoLVtET01IVE1MQ29sbGVjdGlv
biBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTUhUTUxDb2xsZWN0aW9uIGZpbmFsaXplXSk6Cisg
ICAgICAgICgtW0RPTUhUTUxDb2xsZWN0aW9uIF9jb2xsZWN0aW9uXSk6CisgICAgICAgICgtW0RP
TUhUTUxDb2xsZWN0aW9uIF9pbml0V2l0aENvbGxlY3Rpb246XSk6CisgICAgICAgICgtW0RPTUhU
TUxPcHRpb25zQ29sbGVjdGlvbiBkZWFsbG9jXSk6CisgICAgICAgICgtW0RPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbiBmaW5hbGl6ZV0pOgorICAgICAgICAoLVtET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24gX2luaXRXaXRoT3B0aW9uc0NvbGxlY3Rpb246XSk6CisgICAgICAgICgtW0RPTUhUTUxPcHRp
b25zQ29sbGVjdGlvbiBfb3B0aW9uc0NvbGxlY3Rpb25dKToKKyAgICAgICAgKCtbRE9NSFRNTEVs
ZW1lbnQgX2VsZW1lbnRXaXRoOl0pOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBfSFRNTEVs
ZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRNTERvY3VtZW50IF9IVE1MRG9jdW1lbnRdKToKKyAg
ICAgICAgKC1bRE9NSFRNTEh0bWxFbGVtZW50IF9IVE1MSHRtbEVsZW1lbnRdKToKKyAgICAgICAg
KC1bRE9NSFRNTEhlYWRFbGVtZW50IF9oZWFkRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1M
TGlua0VsZW1lbnQgX2xpbmtFbGVtZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxUaXRsZUVsZW1l
bnQgX3RpdGxlRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MTWV0YUVsZW1lbnQgX21ldGFF
bGVtZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxCYXNlRWxlbWVudCBfYmFzZUVsZW1lbnRdKToK
KyAgICAgICAgKC1bRE9NSFRNTFN0eWxlRWxlbWVudCBfc3R5bGVFbGVtZW50XSk6CisgICAgICAg
ICgtW0RPTUhUTUxCb2R5RWxlbWVudCBfYm9keUVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRN
TEZvcm1FbGVtZW50IF9mb3JtRWxlbWVudF0pOgorICAgICAgICAoK1tET01IVE1MRm9ybUVsZW1l
bnQgX2Zvcm1FbGVtZW50V2l0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTElzSW5kZXhFbGVtZW50
IF9pc0luZGV4RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBfc2Vs
ZWN0RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MT3B0R3JvdXBFbGVtZW50IF9vcHRHcm91
cEVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRNTE9wdGlvbkVsZW1lbnQgX29wdGlvbkVsZW1l
bnRdKToKKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBfaW5wdXRFbGVtZW50XSk6Cisg
ICAgICAgICgtW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQgX3RleHRBcmVhRWxlbWVudF0pOgorICAg
ICAgICAoLVtET01IVE1MQnV0dG9uRWxlbWVudCBfYnV0dG9uRWxlbWVudF0pOgorICAgICAgICAo
LVtET01IVE1MTGFiZWxFbGVtZW50IF9sYWJlbEVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRN
TExhYmVsRWxlbWVudCBmb3JtXSk6CisgICAgICAgICgtW0RPTUhUTUxGaWVsZFNldEVsZW1lbnQg
X2ZpZWxkU2V0RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MTGVnZW5kRWxlbWVudCBfbGVn
ZW5kRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MVUxpc3RFbGVtZW50IF91TGlzdEVsZW1l
bnRdKToKKyAgICAgICAgKC1bRE9NSFRNTE9MaXN0RWxlbWVudCBfb0xpc3RFbGVtZW50XSk6Cisg
ICAgICAgICgtW0RPTUhUTUxETGlzdEVsZW1lbnQgX2RMaXN0RWxlbWVudF0pOgorICAgICAgICAo
LVtET01IVE1MRGlyZWN0b3J5RWxlbWVudCBfZGlyZWN0b3J5TGlzdEVsZW1lbnRdKToKKyAgICAg
ICAgKC1bRE9NSFRNTE1lbnVFbGVtZW50IF9tZW51TGlzdEVsZW1lbnRdKToKKyAgICAgICAgKC1b
RE9NSFRNTExJRWxlbWVudCBfbGlFbGVtZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxRdW90ZUVs
ZW1lbnQgX3F1b3RlRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MRGl2RWxlbWVudCBfZGl2
RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MUGFyYWdyYXBoRWxlbWVudCBfcGFyYWdyYXBo
RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MSGVhZGluZ0VsZW1lbnQgX2hlYWRpbmdFbGVt
ZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxQcmVFbGVtZW50IF9wcmVFbGVtZW50XSk6CisgICAg
ICAgICgtW0RPTUhUTUxCUkVsZW1lbnQgX0JSRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1M
QmFzZUZvbnRFbGVtZW50IF9iYXNlRm9udEVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRNTEZv
bnRFbGVtZW50IF9mb250RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MSFJFbGVtZW50IF9I
UkVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRNTE1vZEVsZW1lbnQgX21vZEVsZW1lbnRdKToK
KyAgICAgICAgKC1bRE9NSFRNTEFuY2hvckVsZW1lbnQgX2FuY2hvckVsZW1lbnRdKToKKyAgICAg
ICAgKC1bRE9NSFRNTEltYWdlRWxlbWVudCBfaW1hZ2VFbGVtZW50XSk6CisgICAgICAgICgtW0RP
TUhUTUxPYmplY3RFbGVtZW50IF9vYmplY3RFbGVtZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxQ
YXJhbUVsZW1lbnQgX3BhcmFtRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MTWFwRWxlbWVu
dCBfbWFwRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MQXJlYUVsZW1lbnQgX2FyZWFFbGVt
ZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxTY3JpcHRFbGVtZW50IF9zY3JpcHRFbGVtZW50XSk6
CisgICAgICAgICgrW0RPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50IF90YWJsZUNhcHRpb25FbGVt
ZW50V2l0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgX3RhYmxl
Q2FwdGlvbkVsZW1lbnRdKToKKyAgICAgICAgKCtbRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQg
X3RhYmxlU2VjdGlvbkVsZW1lbnRXaXRoOl0pOgorICAgICAgICAoLVtET01IVE1MVGFibGVTZWN0
aW9uRWxlbWVudCBfdGFibGVTZWN0aW9uRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MVGFi
bGVFbGVtZW50IGNyZWF0ZVRIZWFkXSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUVsZW1lbnQg
Y3JlYXRlVEZvb3RdKToKKyAgICAgICAgKC1bRE9NSFRNTFRhYmxlRWxlbWVudCBjcmVhdGVDYXB0
aW9uXSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUVsZW1lbnQgaW5zZXJ0Um93Ol0pOgorICAg
ICAgICAoK1tET01IVE1MVGFibGVFbGVtZW50IF90YWJsZUVsZW1lbnRXaXRoOl0pOgorICAgICAg
ICAoLVtET01IVE1MVGFibGVFbGVtZW50IF90YWJsZUVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9N
SFRNTFRhYmxlQ29sRWxlbWVudCBfdGFibGVDb2xFbGVtZW50XSk6CisgICAgICAgICgtW0RPTUhU
TUxUYWJsZVJvd0VsZW1lbnQgX3RhYmxlUm93RWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1M
VGFibGVSb3dFbGVtZW50IGluc2VydENlbGw6XSk6CisgICAgICAgICgrW0RPTUhUTUxUYWJsZUNl
bGxFbGVtZW50IF90YWJsZUNlbGxFbGVtZW50V2l0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQgX3RhYmxlQ2VsbEVsZW1lbnRdKToKKyAgICAgICAgKC1bRE9NSFRNTEZy
YW1lU2V0RWxlbWVudCBfZnJhbWVTZXRFbGVtZW50XSk6CisgICAgICAgICgtW0RPTUhUTUxGcmFt
ZUVsZW1lbnQgX2ZyYW1lRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MSUZyYW1lRWxlbWVu
dCBfSUZyYW1lRWxlbWVudF0pOgorICAgICAgICAoLVtET01IVE1MRW1iZWRFbGVtZW50IF9lbWJl
ZEVsZW1lbnRdKToKKyAgICAgICAgKHZpZXdGb3JFbGVtZW50KToKKyAgICAgICAgKiBicmlkZ2Uv
bWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnNlYXJjaEZvckxh
YmVsc0Fib3ZlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2VhcmNoRm9yTGFi
ZWxzQmVmb3JlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6Y3JlYXRlRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnBhc3NNb3VzZURvd25FdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTWFjOjpwYXNzU3ViZnJhbWVFdmVudFRvU3Vi
ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnBhc3NXaGVlbEV2ZW50VG9DaGls
ZFdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6ZmlsZVdyYXBwZXJGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omxpc3RQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVNYWM6OmF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6
OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2hvdWxk
RW5kRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2V0TWFya2VkVGV4dFJh
bmdlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS94bWxfdG9r
ZW5pemVyLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxCYXNlRWxlbWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICog
aHRtbC9IVE1MQmFzZUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MRG9jdW1l
bnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDoKKyAgICAgICAg
KiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxNZXRhRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1ldGFFbGVtZW50OjpzZXRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRh
RWxlbWVudDo6c2V0SHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVu
dDo6c2V0TmFtZSk6CisgICAgICAgICogaHRtbC9IVE1MTWV0YUVsZW1lbnQuaDogQWRkZWQuCisg
ICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6
SFRNTFNjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVt
ZW50OjpldmFsdWF0ZVNjcmlwdCk6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hU
TUxUaXRsZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUaXRsZUVs
ZW1lbnQ6OkhUTUxUaXRsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxl
bWVudDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0
KToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgICog
aHRtbC9odG1sX2hlYWRpbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2h0bWxfaGVh
ZGltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q29sOjp1cGRhdGVGcm9tRWxlbWVudCk6CisKKzIwMDYtMDUtMTIgIEVyaWMgU2VpZGVsICA8ZXNl
aWRlbEBhcHBsZS5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgYmV0aC4KIAogICAgICAgICBT
cGxpdCBvdXQgaHRtbF90YWJsZWltcGwuKiBpbnRvIG11bHRpcGxlIGZpbGVzIChvbmUgcGVyIGNs
YXNzKQpJbmRleDogYnJpZGdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2Uv
bWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAxNDMyNSkKKysrIGJyaWRnZS9tYWMvRnJhbWVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKICNpbXBvcnQgIkhUTUxEb2N1bWVu
dC5oIgogI2ltcG9ydCAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MTmFtZXMuaCIKKyNpbXBvcnQgIkhUTUxUYWJsZUNl
bGxFbGVtZW50LmgiCiAjaW1wb3J0ICJLV1FFZGl0Q29tbWFuZC5oIgogI2ltcG9ydCAiS1dRRm9y
bURhdGEuaCIKICNpbXBvcnQgIktXUVBhZ2VTdGF0ZS5oIgpAQCAtNjEsNyArNjMsNiBAQAogI2lt
cG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJEYXNoYm9hcmRSZWdpb24u
aCIKICNpbXBvcnQgImNzc2hlbHBlci5oIgotI2ltcG9ydCAiaHRtbF90YWJsZWltcGwuaCIKICNp
bXBvcnQgImtqc193aW5kb3cuaCIKICNpbXBvcnQgInJlbmRlcl9mcmFtZXMuaCIKICNpbXBvcnQg
InJlbmRlcl9saXN0LmgiCkBAIC0yOTIsMTYgKzI5MywxNiBAQCBSZWd1bGFyRXhwcmVzc2lvbiAq
cmVnRXhwRm9yTGFiZWxzKE5TQXJyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTlNTdHJpbmcg
KkZyYW1lTWFjOjpzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoUmVndWxhckV4cHJlc3Npb24gKnJl
Z0V4cCwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgKmNlbGwpCitOU1N0cmluZyogRnJhbWVNYWM6OnNl
YXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwLCBIVE1MVGFi
bGVDZWxsRWxlbWVudCogY2VsbCkKIHsKLSAgICBSZW5kZXJUYWJsZUNlbGwgKmNlbGxSZW5kZXJl
ciA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCAqPihjZWxsLT5yZW5kZXJlcigpKTsKKyAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGxSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxl
Q2VsbCo+KGNlbGwtPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKGNlbGxSZW5kZXJlciAmJiBjZWxs
UmVuZGVyZXItPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgUmVuZGVyVGFibGVDZWxsICpjZWxs
QWJvdmVSZW5kZXJlciA9IGNlbGxSZW5kZXJlci0+dGFibGUoKS0+Y2VsbEFib3ZlKGNlbGxSZW5k
ZXJlcik7CisgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbEFib3ZlUmVuZGVyZXIgPSBjZWxs
UmVuZGVyZXItPnRhYmxlKCktPmNlbGxBYm92ZShjZWxsUmVuZGVyZXIpOwogCiAgICAgICAgIGlm
IChjZWxsQWJvdmVSZW5kZXJlcikgewogICAgICAgICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQg
KmFib3ZlQ2VsbCA9Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQgKj4oY2VsbEFib3ZlUmVuZGVyZXItPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjZWxsQWJvdmVSZW5kZXJlci0+ZWxl
bWVudCgpKTsKIAogICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAgICAgICAg
IC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91bmQgZm9yIGEgbWF0Y2gKQEAg
LTM0MiwxMiArMzQzLDEyIEBAIE5TU3RyaW5nICpGcmFtZU1hYzo6c2VhcmNoRm9yTGFiZWxzQmVm
b3IKICAgICB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpCiAgICAgICAgICAg
ICB8fCAobi0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQorICAgICAgICAgICAg
ICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50
KCkpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1l
bnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFzdGFydGluZ1Rh
YmxlQ2VsbCkgewotICAgICAgICAgICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVDZWxsRWxlbWVudCAqPihuKTsKKyAgICAgICAgICAgIHN0YXJ0aW5nVGFibGVDZWxs
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihuKTsKICAgICAgICAgfSBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKHRyVGFnKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAg
ICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAs
IHN0YXJ0aW5nVGFibGVDZWxsKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKQEAgLTU4Miw3
ICs1ODMsNyBAQCBGcmFtZSogRnJhbWVNYWM6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmCiAgICAg
aW50IG1hcmdpbldpZHRoID0gLTE7CiAgICAgaW50IG1hcmdpbkhlaWdodCA9IC0xOwogICAgIGlm
IChyZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCByZW5kZXJlci0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgSFRNTEZyYW1lRWxl
bWVudCAqbyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQgKj4ocmVuZGVyZXItPmVsZW1l
bnQoKSk7CisgICAgICAgIEhUTUxGcmFtZUVsZW1lbnQgKm8gPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVFbGVtZW50Kj4ocmVuZGVyZXItPmVsZW1lbnQoKSk7CiAgICAgICAgIGFsbG93c1Njcm9sbGlu
ZyA9IG8tPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxCYXJBbHdheXNPZmY7CiAgICAgICAgIG1h
cmdpbldpZHRoID0gby0+Z2V0TWFyZ2luV2lkdGgoKTsKICAgICAgICAgbWFyZ2luSGVpZ2h0ID0g
by0+Z2V0TWFyZ2luSGVpZ2h0KCk7CkBAIC0xNDM1LDcgKzE0MzYsNyBAQCBib29sIEZyYW1lTWFj
OjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdlCiAgICAgICAgICAgICAgICAgc3VwZXJ2aWV3ID0g
W3N1cGVydmlldyBzdXBlcnZpZXddOwogICAgICAgICAgICAgICAgIEFTU0VSVChzdXBlcnZpZXcp
OwogICAgICAgICAgICAgICAgIGlmIChbc3VwZXJ2aWV3IGlzS2luZE9mQ2xhc3M6W05TQ29udHJv
bCBjbGFzc11dKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TQ29udHJvbCAqY29udHJvbCA9IHN0
YXRpY19jYXN0PE5TQ29udHJvbCAqPihzdXBlcnZpZXcpOworICAgICAgICAgICAgICAgICAgICBO
U0NvbnRyb2wgKmNvbnRyb2wgPSBzdGF0aWNfY2FzdDxOU0NvbnRyb2wqPihzdXBlcnZpZXcpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoW2NvbnRyb2wgY3VycmVudEVkaXRvcl0gPT0gdmlldykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IHN1cGVydmlldzsKICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMTg2MywxMCArMTg2NCwxMCBAQCBib29sIEZyYW1lTWFjOjpwYXNzU3Vi
ZnJhbWVFdmVudFRvU3ViZnJhCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNXaWRnZXQoKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFdpZGdldCAqd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lk
Z2V0ICo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgICAgICAgICBXaWRnZXQgKndpZGdldCA9
IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CiAgICAgICAg
ICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghcGFzc1dpZGdldE1vdXNlRG93bkV2
ZW50VG9XaWRnZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KHJlbmRlcmVyKSkpIHsKKyAg
ICAgICAgICAgIGlmICghcGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoc3RhdGljX2Nh
c3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIF9tb3VzZURvd25XYXNJblN1YmZyYW1l
ID0gdHJ1ZTsKQEAgLTE5MTgsNyArMTkxOSw3IEBAIGJvb2wgRnJhbWVNYWM6OnBhc3NXaGVlbEV2
ZW50VG9DaGlsZFdpZGcKICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBXaWRnZXQgKndpZGdldCA9IHN0
YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyZW5kZXJlciktPndpZGdldCgpOworICAgICAgICBX
aWRnZXQgKndpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKS0+d2lk
Z2V0KCk7CiAgICAgICAgIGlmICghd2lkZ2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgCkBAIC0yMTc0LDcgKzIxNzUsNyBAQCBOU0ZpbGVXcmFwcGVyICpGcmFtZU1h
Yzo6ZmlsZVdyYXBwZXJGb3JFCiAgICAgICAgIHdyYXBwZXIgPSBbX2JyaWRnZSBmaWxlV3JhcHBl
ckZvclVSTDpVUkxdOwogICAgIH0gICAgCiAgICAgaWYgKCF3cmFwcGVyKSB7Ci0gICAgICAgIFJl
bmRlckltYWdlICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlICo+KGUtPnJlbmRl
cmVyKCkpOworICAgICAgICBSZW5kZXJJbWFnZSAqcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJJbWFnZSo+KGUtPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVuZGVyZXItPmNhY2hlZElt
YWdlKCkgJiYgIXJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpLT5pc0Vycm9ySW1hZ2UoKSkgewogICAg
ICAgICAgICAgd3JhcHBlciA9IFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxl
V2l0aENvbnRlbnRzOihOU0RhdGEqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKS0+
Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkpXTsKICAgICAgICAgICAgIFt3cmFwcGVyIHNldFByZWZl
cnJlZEZpbGVuYW1lOkAiaW1hZ2UudGlmZiJdOwpAQCAtMjE5Miw3ICsyMTkzLDcgQEAgTlNGaWxl
V3JhcHBlciAqRnJhbWVNYWM6OmZpbGVXcmFwcGVyRm9yRQogc3RhdGljIEVsZW1lbnQgKmxpc3RQ
YXJlbnQoRWxlbWVudCAqaXRlbSkKIHsKICAgICB3aGlsZSAoIWl0ZW0tPmhhc1RhZ05hbWUodWxU
YWcpICYmICFpdGVtLT5oYXNUYWdOYW1lKG9sVGFnKSkgewotICAgICAgICBpdGVtID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCAqPihpdGVtLT5wYXJlbnROb2RlKCkpOworICAgICAgICBpdGVtID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmICghaXRl
bSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIzNjksNyArMjM3MCw3IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqRnJhbWVNYWM6OmF0dHJpYnV0ZWQKICAgICAgICAgICAgICAgICAgICAg
aGFzTmV3TGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKGxpVGFnKSkgewogICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGxpc3RU
ZXh0OwotICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICppdGVtUGFyZW50ID0gbGlzdFBhcmVu
dChzdGF0aWNfY2FzdDxFbGVtZW50ICo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVu
dCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcbic7CkBAIC0yNDY4LDcgKzI0
NjksNyBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKkZyYW1lTWFjOjphdHRyaWJ1dGVkCiAgICAgICAg
ICAgICAgICAgICAgICAgICBbcGVuZGluZ1N0eWxlZFNwYWNlIHJlbGVhc2VdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcGVuZGluZ1N0eWxlZFNwYWNlID0gbmlsOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyID0g
ZmlsZVdyYXBwZXJGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQgKj4obikpOworICAgICAg
ICAgICAgICAgICAgICBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9y
RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOwogICAgICAgICAgICAgICAgICAgICBO
U1RleHRBdHRhY2htZW50ICphdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBp
bml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXTsKICAgICAgICAgICAgICAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICppU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVk
U3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF07CiAgICAgICAgICAgICAgICAgICAgIFty
ZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogaVN0cmluZ107CkBAIC0zMjAyLDEzICszMjAz
LDEzIEBAIGJvb2wgRnJhbWVNYWM6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKIGJvb2wgRnJh
bWVNYWM6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBSYW5nZSAqcmFuZ2UpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKHJhbmdlKTsKLSAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQmVnaW5FZGl0aW5n
OltET01SYW5nZSBfcmFuZ2VXaXRoOmNvbnN0X2Nhc3Q8UmFuZ2UgKj4ocmFuZ2UpXV07CisgICAg
cmV0dXJuIFtfYnJpZGdlIHNob3VsZEJlZ2luRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aDpj
b25zdF9jYXN0PFJhbmdlKj4ocmFuZ2UpXV07CiB9CiAKIGJvb2wgRnJhbWVNYWM6OnNob3VsZEVu
ZEVkaXRpbmcoY29uc3QgUmFuZ2UgKnJhbmdlKSBjb25zdAogewogICAgIEFTU0VSVChyYW5nZSk7
Ci0gICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZEVuZEVkaXRpbmc6W0RPTVJhbmdlIF9yYW5nZVdp
dGg6Y29uc3RfY2FzdDxSYW5nZSAqPihyYW5nZSldXTsKKyAgICByZXR1cm4gW19icmlkZ2Ugc2hv
dWxkRW5kRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aDpjb25zdF9jYXN0PFJhbmdlKj4ocmFu
Z2UpXV07CiB9CiAKIHZvaWQgRnJhbWVNYWM6OmRpZEJlZ2luRWRpdGluZygpIGNvbnN0CkBAIC0z
MzEzLDcgKzMzMTQsNyBAQCB2b2lkIEZyYW1lTWFjOjpzZXRNYXJrZWRUZXh0UmFuZ2UoY29uc3Qg
CiAgICAgaWYgKHJhbmdlICYmIHJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSkKICAgICAgICAg
bV9tYXJrZWRUZXh0UmFuZ2UgPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9tYXJrZWRUZXh0UmFu
Z2UgPSBjb25zdF9jYXN0PFJhbmdlICo+KHJhbmdlKTsKKyAgICAgICAgbV9tYXJrZWRUZXh0UmFu
Z2UgPSBjb25zdF9jYXN0PFJhbmdlKj4ocmFuZ2UpOwogCiAgICAgaWYgKG1fbWFya2VkVGV4dFJh
bmdlLmdldCgpICYmIGRvY3VtZW50KCkgJiYgbV9tYXJrZWRUZXh0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGV4Y2VwdGlvbiktPnJlbmRlcmVyKCkpCiAgICAgICAgIG1fbWFya2VkVGV4dFJhbmdlLT5z
dGFydENvbnRhaW5lcihleGNlcHRpb24pLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CkluZGV4OiBs
b2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRD
U1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE0MzI1KQorKysgbG9hZGVyL0NhY2hlZENTU1N0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICAgIHBhZ2VzIGZyb20g
dGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgogKi8KIAot
I2lmbmRlZiBLSFRNTF9DYWNoZWRDU1NTdHlsZVNoZWV0X2gKLSNkZWZpbmUgS0hUTUxfQ2FjaGVk
Q1NTU3R5bGVTaGVldF9oCisjaWZuZGVmIENhY2hlZENTU1N0eWxlU2hlZXRfSAorI2RlZmluZSBD
YWNoZWRDU1NTdHlsZVNoZWV0X0gKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgogI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgo=
</data>
<flag name="review"
          id="2321"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>