<?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>8927</bug_id>
          
          <creation_ts>2006-05-15 14:45:38 -0700</creation_ts>
          <short_desc>split html_blockimpl.* into multiple files (one per class)</short_desc>
          <delta_ts>2006-05-15 14:52:37 -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>WebKit 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>42407</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 14:45:38 -0700</bug_when>
    <thetext>happy happy.  joy joy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42408</commentid>
    <comment_count>1</comment_count>
      <attachid>8330</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 14:45:59 -0700</bug_when>
    <thetext>Created attachment 8330
do the splits! (ignoring whitespace changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42409</commentid>
    <comment_count>2</comment_count>
      <attachid>8330</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-05-15 14:51:38 -0700</bug_when>
    <thetext>Comment on attachment 8330
do the splits! (ignoring whitespace changes)

stamped!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8330</attachid>
            <date>2006-05-15 14:45:59 -0700</date>
            <delta_ts>2006-05-15 14:51:38 -0700</delta_ts>
            <desc>do the splits! (ignoring whitespace changes)</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>152885</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9q
cy9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDE0Mzg5KQorKysgYmluZGluZ3MvanMva2pzX2h0bWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpbmNsdWRlICJIVE1MQXBw
bGV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxCYXNlRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQmxvY2txdW90ZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRExpc3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
RGl2RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZpZWxkU2V0RWxlbWVudC5oIgpAQCAtNDAsNiArNDIsOCBAQAogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZGluZ0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MSFJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSXNJbmRleEVsZW1l
bnQuaCIKQEAgLTU2LDcgKzYwLDkgQEAKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxQYXJhbUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUHJlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCkBAIC03NSw3ICs4MSw2IEBACiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgImRvbTJfZXZl
bnRzaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9p
bWFnZWltcGwuaCIKICNpbmNsdWRlICJranNfY3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5o
IgpJbmRleDogYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdz
L29iamMvRE9NSFRNTC5tbQkocmV2aXNpb24gMTQzODkpCisrKyBiaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbXBvcnQgIkhUTUxCUkVs
ZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxCdXR0b25FbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MRGly
ZWN0b3J5RWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTERpdkVsZW1lbnQuaCIKICNpbXBvcnQgIkhU
TUxETGlzdEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxEb2N1bWVudC5oIgogI2ltcG9ydCAiSFRN
TEVtYmVkRWxlbWVudC5oIgpAQCAtNDcsNiArNDgsOCBAQAogI2ltcG9ydCAiSFRNTEZvcm1FbGVt
ZW50LmgiCiAjaW1wb3J0ICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSGVh
ZEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxIZWFkaW5nRWxlbWVudC5oIgorI2ltcG9ydCAiSFRN
TEhSRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
SUZyYW1lRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTElzSW5kZXhFbGVtZW50LmgiCkBAIC02Myw2
ICs2Niw4IEBACiAjaW1wb3J0ICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgiCiAjaW1wb3J0ICJIVE1MUGFyYW1FbGVtZW50LmgiCisjaW1wb3J0
ICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTFByZUVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MU2VsZWN0RWxlbWVudC5o
IgogI2ltcG9ydCAiSFRNTFN0eWxlRWxlbWVudC5oIgpAQCAtNzYsNyArODEsNiBAQAogI2ltcG9y
dCAiSFRNTFRpdGxlRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFVMaXN0RWxlbWVudC5oIgogI2lt
cG9ydCAiTmFtZU5vZGVMaXN0LmgiCi0jaW1wb3J0ICJodG1sX2Jsb2NraW1wbC5oIgogI2ltcG9y
dCAiaHRtbF9pbWFnZWltcGwuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgogI2ltcG9ydCAiUmVuZGVy
VGV4dEZpZWxkLmgiCkluZGV4OiBodG1sL0hUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDE0Mzg5KQorKysgaHRtbC9IVE1MUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEyIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERMaXN0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxIUkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MSXNJbmRleEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQ2LDcgKzQ4
LDYgQEAKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGh0bWwvSFRNTFRleHRGaWVsZElubmVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5oCShy
ZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAgCi0j
aWZuZGVmIEhUTUxfVEVYVEZJRUxESU5ORVJFTEVNRU5USU1QTF9ICi0jZGVmaW5lIEhUTUxfVEVY
VEZJRUxESU5ORVJFTEVNRU5USU1QTF9ICisjaWZuZGVmIEhUTUxUZXh0RmllbGRJbm5lckVsZW1l
bnRfSAorI2RlZmluZSBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50X0gKIAotI2luY2x1ZGUgImh0
bWxfYmxvY2tpbXBsLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBodG1sL0hUTUxIUkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTEhSRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MSFJF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICAqIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxIUkVsZW1lbnQuaCIK
IAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCkBAIC0zNSw3MyArMzIsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Ci1IVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmxvY2txdW90ZVRhZywgZG9jKQotewotfQotCi1IVE1M
QmxvY2txdW90ZUVsZW1lbnQ6On5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKQotewotfQotCi1TdHJp
bmcgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpjaXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNpdGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OnNl
dENpdGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2l0ZUF0dHIs
IHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MRGl2RWxlbWVudDo6SFRN
TERpdkVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGRpdlRhZywgZG9j
KQotewotfQotCi1IVE1MRGl2RWxlbWVudDo6fkhUTUxEaXZFbGVtZW50KCkKLXsKLX0KLQotYm9v
bCBIVE1MRGl2RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVCbG9jazsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0
ck5hbWUsIHJlc3VsdCk7Ci19Ci0gICAgICAgIAotdm9pZCBIVE1MRGl2RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJ
VF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibGVmdCIpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
VEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9SSUdI
VCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIHYpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmluZyBIVE1MRGl2RWxlbWVudDo6YWxp
Z24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQot
dm9pZCBIVE1MRGl2RWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQogSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChEb2N1bWVudCAqZG9jKQogICAgIDog
SFRNTEVsZW1lbnQoaHJUYWcsIGRvYykKIHsKQEAgLTIwOSwyMDQgKzEzOSw0IEBACiAgICAgc2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LUhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2MpCi17Ci19Ci0KLWJvb2wgSFRNTEhlYWRpbmdFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2Rl
KiBuZXdDaGlsZCkKLXsKLSAgICBpZiAobmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDFUYWcpIHx8IG5l
d0NoaWxkLT5oYXNUYWdOYW1lKGgyVGFnKSB8fAotICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFt
ZShoM1RhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDRUYWcpIHx8Ci0gICAgICAgIG5ld0No
aWxkLT5oYXNUYWdOYW1lKGg1VGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShoNlRhZykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbkVpdGhlclRhZ0xpc3QobmV3Q2hp
bGQpOwotfQotCi1TdHJpbmcgSFRNTEhlYWRpbmdFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxIZWFkaW5n
RWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFBh
cmFncmFwaEVsZW1lbnQ6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudChwVGFnLCBkb2MpCi17Ci19Ci0KLWJvb2wgSFRNTFBhcmFncmFwaEVsZW1l
bnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAgIHJldHVybiBpbklubGlu
ZVRhZ0xpc3QobmV3Q2hpbGQpIHx8IChkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSAmJiBuZXdD
aGlsZC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpOwotfQotCi1ib29sIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0
dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUJsb2NrOyAvLyBXZSBjYW4gc2hhcmUgd2l0aCBESVYg
aGVyZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTFBhcmFncmFw
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBTdHJpbmcgdiA9
IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImNlbnRl
ciIpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElH
TiwgQ1NTX1ZBTF9fV0VCS0lUX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfTEVGVCk7Ci0gICAg
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIpKQot
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NT
X1ZBTF9fV0VCS0lUX1JJR0hUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgdik7Ci0gICAgfSBlbHNlCi0gICAgICAg
IEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotU3RyaW5nIEhU
TUxQYXJhZ3JhcGhFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpzZXRBbGln
bihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZh
bHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUHJlRWxlbWVudDo6SFRNTFBy
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVu
dDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRy
IHx8IGF0dHJOYW1lID09IHdyYXBBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVQcmU7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0Vu
dHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxQcmVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5h
bWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHNv
bWUgZGF5LiAgV2lkdGggb24gYSA8cHJlPiBpcyB0aGUgIyBvZiBjaGFyYWN0ZXJzIHRoYXQKLSAg
ICAgICAgLy8gd2Ugc2hvdWxkIHNpemUgdGhlIHByZSB0by4gIFdlIGJhc2ljYWxseSBuZWVkIHRv
IHRha2UgdGhlIHdpZHRoIG9mIGEgc3BhY2UsCi0gICAgICAgIC8vIG11bHRpcGx5IGJ5IHRoZSB2
YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGFuZCB0aGVuIHNldCB0aGF0IGFzIHRoZSB3aWR0aCBDU1MK
LSAgICAgICAgLy8gcHJvcGVydHkuCi0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gd3Jh
cEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQotICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0hJVEVfU1BBQ0UsIENTU19WQUxfUFJF
X1dSQVApOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1pbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoKTsKLX0KLQot
dm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQotewotICAgIHNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci19Ci0KLWJvb2wgSFRNTFBy
ZUVsZW1lbnQ6OndyYXAoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKHdyYXBB
dHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V3JhcChib29sIHdy
YXApCi17Ci0gICAgc2V0QXR0cmlidXRlKHdyYXBBdHRyLCB3cmFwID8gIiIgOiAwKTsKLX0KLSAg
ICAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIC8vIFdpbklFIHVzZXMgNjBtcyBhcyB0aGUgbWlu
aW11bSBkZWxheSBieSBkZWZhdWx0LgotY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2
MDsKLQotSFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQoRG9jdW1lbnQgKmRv
YykKLTogSFRNTEVsZW1lbnQobWFycXVlZVRhZywgZG9jKSwKLSAgbV9taW5pbXVtRGVsYXkoZGVm
YXVsdE1pbmltdW1EZWxheSkKLXsKLX0KLQotYm9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6Om1hcFRv
RW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAotICAg
ICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGJnY29s
b3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0
ck5hbWUgPT0gaHNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzY3JvbGxhbW91bnRB
dHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNjcm9sbGRlbGF5QXR0ciB8fAotICAgICAgICBh
dHRyTmFtZSA9PSBsb29wQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBiZWhhdmlvckF0dHIg
fHwKLSAgICAgICAgYXR0ck5hbWUgPT0gZGlyZWN0aW9uQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlVW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhU
TUxNYXJxdWVlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7Ci0gICAgICAgIGlm
ICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0
ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGhlaWdodEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JBdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2c3BhY2VBdHRyKSB7Ci0gICAgICAg
IGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0
aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fVE9QLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhzcGFjZUF0dHIp
IHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
YWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBhdHRyLT52YWx1ZSgpKTsK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
c2Nyb2xsYW1vdW50QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVF
RV9JTkNSRU1FTlQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHNjcm9sbGRlbGF5QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFS
UVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gbG9vcEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAiaW5maW5pdGUiKSkKLSAgICAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfUkVQRVRJVElPTiwgQ1NTX1ZBTF9J
TkZJTklURSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkQ1NTTGVuZ3Ro
KGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9SRVBFVElUSU9OLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJlaGF2aW9yQXR0
cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1NUWUxFLCBhdHRy
LT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXJlY3Rpb25BdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfRElSRUNUSU9OLCBh
dHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0cnVlc3BlZWRB
dHRyKSB7Ci0gICAgICAgIG1fbWluaW11bURlbGF5ID0gIWF0dHItPmlzTnVsbCgpID8gMCA6IGRl
ZmF1bHRNaW5pbXVtRGVsYXk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQogfQpJbmRleDogaHRtbC9IVE1MUGFyYWdyYXBo
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAkocmV2
aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDk1ICsyMSwxMyBAQAogICoKICAqLwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0j
aWZuZGVmIEhUTUxfQkxPQ0tJTVBMX0gKLSNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAorI2lmbmRl
ZiBIVE1MUGFyYWdyYXBoRWxlbWVudF9ICisjZGVmaW5lIEhUTUxQYXJhZ3JhcGhFbGVtZW50X0gK
IAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU3RyaW5nOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxCbG9ja3F1b3Rl
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxCbG9ja3F1
b3RlRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKTsKLQot
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgU3RyaW5nIGNpdGUoKSBjb25zdDsKLSAgICB2
b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRNTERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1M
RGl2RWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRB
bGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3Mg
SFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxI
UkVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTEhSRWxlbWVudCgpOwotICAgIAotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmlu
ZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBib29sIG5vU2hhZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5vU2hhZGUoYm9vbCk7Ci0KLSAg
ICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3Ry
aW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxIZWFkaW5nRWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1
OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQot
ICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
Jik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50CiB7CiBwdWJsaWM6CkBAIC0xMjYsNDQgKzQ0LDUgQEAK
ICAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwogfTsKIAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1jbGFzcyBIVE1MUHJlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVi
bGljOgotICAgIEhUTUxQcmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFs
aWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgaW50IHdpZHRoKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChpbnQgdyk7Ci0gICAgCi0gICAgYm9vbCB3cmFwKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRXcmFwKGJvb2wgYik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVi
bGljOgotICAgIEhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCopOwotICAgIAotICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAzOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBpbnQgbWluaW11bURl
bGF5KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRGVsYXk7IH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgaW50IG1fbWluaW11bURlbGF5OwotfTsKLQogfTsgLy9uYW1lc3BhY2UKICNlbmRpZgpJbmRl
eDogaHRtbC9IVE1MRGl2RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTERpdkVsZW1l
bnQuaAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxEaXZFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDM1ICsyMSwxMyBAQAogICoKICAqLwogCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0jaWZuZGVmIEhUTUxfQkxPQ0tJTVBMX0gKLSNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAorI2lm
bmRlZiBIVE1MRGl2RWxlbWVudF9ICisjZGVmaW5lIEhUTUxEaXZFbGVtZW50X0gKIAogI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5n
OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxCbG9ja3F1b3RlRWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVu
dChEb2N1bWVudCopOwotICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKTsKLQotICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiA1OyB9Ci0gICAgCi0gICAgU3RyaW5nIGNpdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENp
dGUoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFN0
cmluZzsKLQogY2xhc3MgSFRNTERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1
YmxpYzoKQEAgLTY2LDEwNCArNDQsNSBAQAogICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
Jik7CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxIUkVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MSFJFbGVtZW50KERvY3VtZW50
Kik7Ci0gICAgfkhUTUxIUkVsZW1lbnQoKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47
IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFw
cGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsK
LSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBub1NoYWRlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXROb1NoYWRlKGJvb2wpOwotCi0gICAgU3RyaW5nIHNpemUoKSBj
b25zdDsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgd2lk
dGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7Ci0KLSAgICBTdHJpbmcgYWxpZ24o
KSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotfTsKLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50Kik7
Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gMzsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBO
b2RlKiBuZXdDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFs
aWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBTdHJpbmcg
YWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotfTsKLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUHJlRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxQcmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgbWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsK
LSAgICB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAg
aW50IHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChpbnQgdyk7Ci0gICAgCi0gICAg
Ym9vbCB3cmFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXcmFwKGJvb2wgYik7Ci19OwotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCopOwot
ICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAzOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAg
ICBpbnQgbWluaW11bURlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRGVsYXk7IH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgaW50IG1fbWluaW11bURlbGF5OwotfTsKLQogfTsgLy9uYW1lc3Bh
Y2UKICNlbmRpZgpJbmRleDogaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9odG1sX2Js
b2NraW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEyICswLDAgQEAKLS8qKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
Ci0KLUhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KERvY3VtZW50
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChibG9ja3F1b3RlVGFnLCBkb2MpCi17Ci19Ci0KLUhU
TUxCbG9ja3F1b3RlRWxlbWVudDo6fkhUTUxCbG9ja3F1b3RlRWxlbWVudCgpCi17Ci19Ci0KLVN0
cmluZyBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OmNpdGUoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoY2l0ZUF0dHIpOwotfQotCi12b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6
c2V0Q2l0ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaXRlQXR0
ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxEaXZFbGVtZW50OjpI
VE1MRGl2RWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoZGl2VGFnLCBk
b2MpCi17Ci19Ci0KLUhUTUxEaXZFbGVtZW50Ojp+SFRNTERpdkVsZW1lbnQoKQotewotfQotCi1i
b29sIEhUTUxEaXZFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRy
TmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUJsb2NrOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShh
dHRyTmFtZSwgcmVzdWx0KTsKLX0KLSAgICAgICAgCi12b2lkIEhUTUxEaXZFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgU3RyaW5nIHYgPSBhdHRyLT52YWx1ZSgp
OwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJjZW50ZXIiKSkKLSAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VC
S0lUX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZh
bHVlKCksICJsZWZ0IikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfTEVGVCk7Ci0gICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIpKQotICAgICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX1JJ
R0hUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfVEVYVF9BTElHTiwgdik7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotU3RyaW5nIEhUTUxEaXZFbGVtZW50Ojph
bGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQot
Ci12b2lkIEhUTUxEaXZFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1IVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudChoclRhZywgZG9jKQotewotfQotCi1IVE1MSFJFbGVtZW50Ojp+SFRNTEhS
RWxlbWVudCgpCi17Ci19Ci0KLWJvb2wgSFRNTEhSRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1l
ID09IHdpZHRoQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBjb2xvckF0dHIgfHwKLSAgICAg
ICAgYXR0ck5hbWUgPT0gc2l6ZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gbm9zaGFkZUF0
dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUhSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsK
LX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKLSAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpIHsKLSAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCAiMCIp
OwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hU
LCBDU1NfVkFMX0FVVE8pOwotICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJyaWdodCIpKSB7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgIjAiKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9M
RUZULCBDU1NfVkFMX0FVVE8pOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfTUFSR0lOX1JJR0hULCBDU1NfVkFMX0FVVE8pOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAg
ICAgIGludCB2ID0gYXR0ci0+dmFsdWUoKS5pbXBsKCktPnRvSW50KCZvayk7Ci0gICAgICAgIGlm
KG9rICYmICF2KQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX1dJRFRI
LCAiMSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NT
X1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGNvbG9yQXR0cikgewotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9C
T1JERVJfVE9QX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NT
X1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRF
Ul9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwg
Q1NTX1BST1BfQk9SREVSX0NPTE9SLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgYWRkQ1NTQ29s
b3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbm9zaGFkZUF0dHIpIHsKLSAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7
Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlM
RSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0g
ICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JPUkRFUl9DT0xPUiwgU3RyaW5nKCJn
cmV5IikpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NP
TE9SLCBTdHJpbmcoImdyZXkiKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6
ZUF0dHIpIHsKLSAgICAgICAgU3RyaW5nSW1wbCogc2kgPSBhdHRyLT52YWx1ZSgpLmltcGwoKTsK
LSAgICAgICAgaW50IHNpemUgPSBzaS0+dG9JbnQoKTsKLSAgICAgICAgaWYgKHNpemUgPD0gMSkK
LSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9CT1RUT01f
V0lEVEgsIFN0cmluZygiMCIpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
LX0KLQotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0QWxp
Z24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2
YWx1ZSk7Ci19Ci0KLWJvb2wgSFRNTEhSRWxlbWVudDo6bm9TaGFkZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFnZXRBdHRyaWJ1dGUobm9zaGFkZUF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhU
TUxIUkVsZW1lbnQ6OnNldE5vU2hhZGUoYm9vbCBub1NoYWRlKQotewotICAgIHNldEF0dHJpYnV0
ZShub3NoYWRlQXR0ciwgbm9TaGFkZSA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MSFJFbGVt
ZW50OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNpemVBdHRyKTsK
LX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRTaXplKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSFJF
bGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0
dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2MpCi17Ci19Ci0KLWJvb2wgSFRNTEhlYWRpbmdFbGVtZW50OjpjaGVj
a0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKLXsKLSAgICBpZiAobmV3Q2hpbGQtPmhhc1RhZ05h
bWUoaDFUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKGgyVGFnKSB8fAotICAgICAgICBuZXdD
aGlsZC0+aGFzVGFnTmFtZShoM1RhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDRUYWcpIHx8
Ci0gICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGg1VGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFn
TmFtZShoNlRhZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbkVpdGhl
clRhZ0xpc3QobmV3Q2hpbGQpOwotfQotCi1TdHJpbmcgSFRNTEhlYWRpbmdFbGVtZW50OjphbGln
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12
b2lkIEhUTUxIZWFkaW5nRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSFRNTFBhcmFncmFwaEVsZW1lbnQ6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KERvY3Vt
ZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChwVGFnLCBkb2MpCi17Ci19Ci0KLWJvb2wgSFRN
TFBhcmFncmFwaEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAg
IHJldHVybiBpbklubGluZVRhZ0xpc3QobmV3Q2hpbGQpIHx8IChkb2N1bWVudCgpLT5pbkNvbXBh
dE1vZGUoKSAmJiBuZXdDaGlsZC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpOwotfQotCi1ib29sIEhU
TUxQYXJhZ3JhcGhFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRy
TmFtZSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZUJsb2NrOyAvLyBXZSBjYW4g
c2hhcmUgd2l0aCBESVYgaGVyZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZv
aWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAg
ICAgICBTdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgImNlbnRlciIpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX0NFTlRFUik7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpCi0gICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJL
SVRfTEVGVCk7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJyaWdodCIpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
VEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX1JJR0hUKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgdik7Ci0gICAg
fSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
LX0KLQotU3RyaW5nIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhZ3JhcGhF
bGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUHJl
RWxlbWVudDo6SFRNTFByZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotYm9v
bCBIVE1MUHJlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gd2lkdGhBdHRyIHx8IGF0dHJOYW1lID09IHdyYXBBdHRyKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGVQcmU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxF
bGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxQcmVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0g
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIHNvbWUgZGF5LiAgV2lkdGggb24gYSA8cHJlPiBpcyB0aGUgIyBvZiBjaGFy
YWN0ZXJzIHRoYXQKLSAgICAgICAgLy8gd2Ugc2hvdWxkIHNpemUgdGhlIHByZSB0by4gIFdlIGJh
c2ljYWxseSBuZWVkIHRvIHRha2UgdGhlIHdpZHRoIG9mIGEgc3BhY2UsCi0gICAgICAgIC8vIG11
bHRpcGx5IGJ5IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGFuZCB0aGVuIHNldCB0aGF0IGFz
IHRoZSB3aWR0aCBDU1MKLSAgICAgICAgLy8gcHJvcGVydHkuCi0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gd3JhcEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVs
bCgpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0hJVEVfU1BB
Q0UsIENTU19WQUxfUFJFX1dSQVApOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1pbnQgSFRNTFByZUVsZW1l
bnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0ciku
dG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQot
ewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci19
Ci0KLWJvb2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0
QXR0cmlidXRlKHdyYXBBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MUHJlRWxlbWVudDo6
c2V0V3JhcChib29sIHdyYXApCi17Ci0gICAgc2V0QXR0cmlidXRlKHdyYXBBdHRyLCB3cmFwID8g
IiIgOiAwKTsKLX0KLSAgICAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIC8vIFdpbklFIHVzZXMg
NjBtcyBhcyB0aGUgbWluaW11bSBkZWxheSBieSBkZWZhdWx0LgotY29uc3QgaW50IGRlZmF1bHRN
aW5pbXVtRGVsYXkgPSA2MDsKLQotSFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1l
bnQoRG9jdW1lbnQgKmRvYykKLTogSFRNTEVsZW1lbnQobWFycXVlZVRhZywgZG9jKSwKLSAgbV9t
aW5pbXVtRGVsYXkoZGVmYXVsdE1pbmltdW1EZWxheSkKLXsKLX0KLQotYm9vbCBIVE1MTWFycXVl
ZUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHdp
ZHRoQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0
dHJOYW1lID09IGJnY29sb3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIg
fHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaHNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9
PSBzY3JvbGxhbW91bnRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNjcm9sbGRlbGF5QXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBsb29wQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9
PSBiZWhhdmlvckF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gZGlyZWN0aW9uQXR0cikgewot
ICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQp
OwotfQotCi12b2lkIEhUTUxNYXJxdWVlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhlaWdodEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRy
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1Nf
UFJPUF9IRUlHSFQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGJnY29sb3JBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9S
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2c3BhY2VB
dHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fVE9QLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9N
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGhzcGFjZUF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBh
dHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9N
QVJHSU5fUklHSFQsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gc2Nyb2xsYW1vdW50QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZh
bHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9Q
X19XRUJLSVRfTUFSUVVFRV9JTkNSRU1FTlQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHNjcm9sbGRlbGF5QXR0cikgewotICAgICAgICBpZiAoIWF0dHIt
PnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19Q
Uk9QX19XRUJLSVRfTUFSUVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gbG9vcEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgp
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBl
cXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiaW5maW5pdGUiKSkKLSAgICAgICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfUkVQRVRJ
VElPTiwgQ1NTX1ZBTF9JTkZJTklURSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9SRVBFVElUSU9O
LCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGJlaGF2aW9yQXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJR
VUVFX1NUWUxFLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBkaXJlY3Rpb25BdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFV
RUVfRElSRUNUSU9OLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSB0cnVlc3BlZWRBdHRyKSB7Ci0gICAgICAgIG1fbWluaW11bURlbGF5ID0gIWF0dHItPmlz
TnVsbCgpID8gMCA6IGRlZmF1bHRNaW5pbXVtRGVsYXk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhU
TUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotfQpJbmRleDogaHRt
bC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxCbG9ja3F1
b3RlRWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTEJsb2NrcXVvdGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE4ICsyMSwxMyBAQAogICoKICAqLwogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0jaWZuZGVmIEhUTUxfQkxPQ0tJTVBMX0gKLSNkZWZpbmUgSFRNTF9C
TE9DS0lNUExfSAorI2lmbmRlZiBIVE1MQmxvY2txdW90ZUVsZW1lbnRfSAorI2RlZmluZSBIVE1M
QmxvY2txdW90ZUVsZW1lbnRfSAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBTdHJpbmc7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQog
Y2xhc3MgSFRNTEJsb2NrcXVvdGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50CiB7CiBwdWJs
aWM6CkBAIC00NiwxMjQgKzQxLDUgQEAKICAgICB2b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7
CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRN
TERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2
RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MRGl2RWxlbWVudCgpOwotICAgIAotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiA1OyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5n
IGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxIUkVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+
SFRNTEhSRWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIAotICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIG5vU2hhZGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5vU2hhZGUoYm9vbCk7Ci0KLSAgICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIEhUTUxIZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAot
ewotcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c09wdGlvbmFsOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAzOyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNv
bnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxQcmVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTFByZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBtYXBUb0VudHJ5KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBpbnQgd2lkdGgo
KSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGludCB3KTsKLSAgICAKLSAgICBib29sIHdyYXAo
KSBjb25zdDsKLSAgICB2b2lkIHNldFdyYXAoYm9vbCBiKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTE1hcnF1ZWVFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgCi0gICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIGludCBtaW5p
bXVtRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1EZWxheTsgfQotICAgIAotcHJpdmF0
ZToKLSAgICBpbnQgbV9taW5pbXVtRGVsYXk7Ci19OwotCiB9OyAvL25hbWVzcGFjZQogI2VuZGlm
CkluZGV4OiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MTWFycXVlZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTE1hcnF1
ZWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDggQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKQEAgLTM1LDMxMiArMzIsMTIgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZW1lbnQo
RG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGJsb2NrcXVvdGVUYWcsIGRvYykKLXsK
LX0KLQotSFRNTEJsb2NrcXVvdGVFbGVtZW50Ojp+SFRNTEJsb2NrcXVvdGVFbGVtZW50KCkKLXsK
LX0KLQotU3RyaW5nIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6Y2l0ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShjaXRlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJsb2NrcXVvdGVF
bGVtZW50OjpzZXRDaXRlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNpdGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTERpdkVs
ZW1lbnQ6OkhUTUxEaXZFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChk
aXZUYWcsIGRvYykKLXsKLX0KLQotSFRNTERpdkVsZW1lbnQ6On5IVE1MRGl2RWxlbWVudCgpCi17
Ci19Ci0KLWJvb2wgSFRNTERpdkVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
aWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAgICAgICByZXN1bHQgPSBlQmxvY2s7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBU
b0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotICAgICAgICAKLXZvaWQgSFRNTERpdkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBTdHJpbmcgdiA9IGF0dHIt
PnZhbHVlKCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAi
bWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImNlbnRlciIpKQot
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1Nf
VkFMX19XRUJLSVRfQ0VOVEVSKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19X
RUJLSVRfUklHSFQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTERpdkVs
ZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0
cik7Ci19Ci0KLXZvaWQgSFRNTERpdkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUhUTUxIUkVsZW1lbnQ6OkhUTUxIUkVsZW1lbnQoRG9jdW1lbnQgKmRv
YykKLSAgICA6IEhUTUxFbGVtZW50KGhyVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxIUkVsZW1lbnQ6
On5IVE1MSFJFbGVtZW50KCkKLXsKLX0KLQotYm9vbCBIVE1MSFJFbGVtZW50OjptYXBUb0VudHJ5
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIgfHwKLSAgICAgICAg
YXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGNvbG9yQXR0ciB8
fAotICAgICAgICBhdHRyTmFtZSA9PSBzaXplQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBu
b3NoYWRlQXR0cikgewotICAgICAgICByZXN1bHQgPSBlSFI7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCBy
ZXN1bHQpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQi
KSkgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xF
RlQsICIwIik7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJH
SU5fUklHSFQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpIHsKLSAgICAgICAgICAgIGFkZENTU1Byb3Bl
cnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBDU1NfVkFMX0FVVE8pOwotICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCAiMCIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
TUFSR0lOX0xFRlQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgYm9vbCBv
azsKLSAgICAgICAgaW50IHYgPSBhdHRyLT52YWx1ZSgpLmltcGwoKS0+dG9JbnQoJm9rKTsKLSAg
ICAgICAgaWYob2sgJiYgIXYpCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BS
T1BfV0lEVEgsICIxIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChh
dHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29sb3JBdHRyKSB7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQp
OwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NU
WUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NDb2xv
cihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICBh
ZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBub3NoYWRlQXR0cikgewotICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfVkFM
X1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1JJ
R0hUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NP
TElEKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0NPTE9SLCBT
dHJpbmcoImdyZXkiKSk7Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tH
Uk9VTkRfQ09MT1IsIFN0cmluZygiZ3JleSIpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBzaXplQXR0cikgewotICAgICAgICBTdHJpbmdJbXBsKiBzaSA9IGF0dHItPnZhbHVlKCku
aW1wbCgpOwotICAgICAgICBpbnQgc2l6ZSA9IHNpLT50b0ludCgpOwotICAgICAgICBpZiAoc2l6
ZSA8PSAxKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVS
X0JPVFRPTV9XSURUSCwgU3RyaW5nKCIwIikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBTdHJpbmc6Om51bWJlcihzaXplLTIp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50
OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGln
bkF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1MSFJFbGVtZW50Ojpub1NoYWRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShub3NoYWRlQXR0cikuaXNOdWxsKCk7Ci19Ci0K
LXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0Tm9TaGFkZShib29sIG5vU2hhZGUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKG5vc2hhZGVBdHRyLCBub1NoYWRlID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhU
TUxIUkVsZW1lbnQ6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2l6
ZUF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldFNpemUoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxIUkVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHdpZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0V2lkdGgoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCB2YWx1ZSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEhlYWRpbmdFbGVtZW50OjpIVE1MSGVhZGluZ0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotYm9vbCBIVE1MSGVhZGluZ0VsZW1l
bnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewotICAgIGlmIChuZXdDaGlsZC0+
aGFzVGFnTmFtZShoMVRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDJUYWcpIHx8Ci0gICAg
ICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGgzVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZSho
NFRhZykgfHwKLSAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDVUYWcpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKGg2VGFnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7Ci19Ci0KLVN0cmluZyBIVE1MSGVhZGluZ0VsZW1l
bnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEhlYWRpbmdFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1IVE1MUGFyYWdyYXBoRWxlbWVudDo6SFRNTFBhcmFncmFwaEVsZW1l
bnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHBUYWcsIGRvYykKLXsKLX0KLQot
Ym9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
Ci17Ci0gICAgcmV0dXJuIGluSW5saW5lVGFnTGlzdChuZXdDaGlsZCkgfHwgKGRvY3VtZW50KCkt
PmluQ29tcGF0TW9kZSgpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSk7Ci19Ci0K
LWJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
aWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAgICAgICByZXN1bHQgPSBlQmxvY2s7IC8v
IFdlIGNhbiBzaGFyZSB3aXRoIERJViBoZXJlLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsK
LX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRy
KSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfQ0VOVEVSKTsKLSAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKLSAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19W
QUxfX1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0
ci0+dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfUklHSFQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OmFsaWduKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBh
cmFncmFwaEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LUhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQotewot
fQotCi1ib29sIEhUTUxQcmVFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlm
IChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwgYXR0ck5hbWUgPT0gd3JhcEF0dHIpIHsKLSAgICAg
ICAgcmVzdWx0ID0gZVByZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SFRNTFByZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgc29tZSBkYXkuICBXaWR0aCBvbiBhIDxwcmU+IGlzIHRoZSAj
IG9mIGNoYXJhY3RlcnMgdGhhdAotICAgICAgICAvLyB3ZSBzaG91bGQgc2l6ZSB0aGUgcHJlIHRv
LiAgV2UgYmFzaWNhbGx5IG5lZWQgdG8gdGFrZSB0aGUgd2lkdGggb2YgYSBzcGFjZSwKLSAgICAg
ICAgLy8gbXVsdGlwbHkgYnkgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgYW5kIHRoZW4gc2V0
IHRoYXQgYXMgdGhlIHdpZHRoIENTUwotICAgICAgICAvLyBwcm9wZXJ0eS4KLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSB3cmFwQXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVl
KCkuaXNOdWxsKCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9X
SElURV9TUEFDRSwgQ1NTX1ZBTF9QUkVfV1JBUCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVy
biBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLWludCBIVE1M
UHJlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lk
dGhBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxQcmVFbGVtZW50OjpzZXRXaWR0aChpbnQg
d2lkdGgpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lk
dGgpKTsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVudDo6d3JhcCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFnZXRBdHRyaWJ1dGUod3JhcEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxQcmVF
bGVtZW50OjpzZXRXcmFwKGJvb2wgd3JhcCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod3JhcEF0dHIs
IHdyYXAgPyAiIiA6IDApOwotfQotICAgIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAgLy8gV2lu
SUUgdXNlcyA2MG1zIGFzIHRoZSBtaW5pbXVtIGRlbGF5IGJ5IGRlZmF1bHQuCiBjb25zdCBpbnQg
ZGVmYXVsdE1pbmltdW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnQ6OkhUTUxNYXJx
dWVlRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MRWxlbWVudChtYXJxdWVlVGFnLCBkb2Mp
LAotICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5KQorICAgIDogSFRNTEVsZW1l
bnQobWFycXVlZVRhZywgZG9jKQorICAgICwgbV9taW5pbXVtRGVsYXkoZGVmYXVsdE1pbmltdW1E
ZWxheSkKIHsKIH0KIApAQCAtNDAzLDkgKzEwMCw5IEBACiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gZGlyZWN0aW9uQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJ
VF9NQVJRVUVFX0RJUkVDVElPTiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gdHJ1ZXNwZWVkQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHRydWVzcGVlZEF0dHIpCiAgICAgICAgIG1fbWluaW11bURlbGF5ID0gIWF0dHItPmlzTnVs
bCgpID8gMCA6IGRlZmF1bHRNaW5pbXVtRGVsYXk7Ci0gICAgfSBlbHNlCisgICAgZWxzZQogICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKSW5kZXg6
IGh0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxC
bG9ja3F1b3RlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MQmxvY2tx
dW90ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNCArMjEsOSBAQAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgot
I2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTEJsb2NrcXVv
dGVFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01NCwzNTkgKzQ5LDQgQEAKICAgICBzZXRBdHRyaWJ1dGUoY2l0ZUF0dHIs
IHZhbHVlKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MRGl2RWxlbWVudDo6SFRN
TERpdkVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGRpdlRhZywgZG9j
KQotewotfQotCi1IVE1MRGl2RWxlbWVudDo6fkhUTUxEaXZFbGVtZW50KCkKLXsKLX0KLQotYm9v
bCBIVE1MRGl2RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVCbG9jazsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0
ck5hbWUsIHJlc3VsdCk7Ci19Ci0gICAgICAgIAotdm9pZCBIVE1MRGl2RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJ
VF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibGVmdCIpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
VEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9SSUdI
VCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIHYpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmluZyBIVE1MRGl2RWxlbWVudDo6YWxp
Z24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQot
dm9pZCBIVE1MRGl2RWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnQoaHJUYWcsIGRvYykKLXsKLX0KLQotSFRNTEhSRWxlbWVudDo6fkhUTUxIUkVs
ZW1lbnQoKQotewotfQotCi1ib29sIEhUTUxIUkVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9
PSB3aWR0aEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gY29sb3JBdHRyIHx8Ci0gICAgICAg
IGF0dHJOYW1lID09IHNpemVBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IG5vc2hhZGVBdHRy
KSB7Ci0gICAgICAgIHJlc3VsdCA9IGVIUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19
Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKSB7Ci0gICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgIjAiKTsK
LSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwg
Q1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRy
LT52YWx1ZSgpLCAicmlnaHQiKSkgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfTUFSR0lOX0xFRlQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsICIwIik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVG
VCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX01BUkdJTl9SSUdIVCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikgewotICAgICAgICBib29sIG9rOwotICAgICAg
ICBpbnQgdiA9IGF0dHItPnZhbHVlKCkuaW1wbCgpLT50b0ludCgmb2spOwotICAgICAgICBpZihv
ayAmJiAhdikKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwg
IjEiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19Q
Uk9QX1dJRFRILCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBjb2xvckF0dHIpIHsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9S
REVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19W
QUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJf
TEVGVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENT
U19QUk9QX0JPUkRFUl9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0NvbG9y
KGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5vc2hhZGVBdHRyKSB7Ci0gICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQpOwot
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUs
IENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9C
T1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAg
ICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1IsIFN0cmluZygiZ3Jl
eSIpKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xP
UiwgU3RyaW5nKCJncmV5IikpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVB
dHRyKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHNpID0gYXR0ci0+dmFsdWUoKS5pbXBsKCk7Ci0g
ICAgICAgIGludCBzaXplID0gc2ktPnRvSW50KCk7Ci0gICAgICAgIGlmIChzaXplIDw9IDEpCi0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJ
RFRILCBTdHJpbmcoIjAiKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU0xlbmd0
aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmluZzo6bnVtYmVyKHNpemUtMikpOwotICAgIH0g
ZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19
Ci0KLVN0cmluZyBIVE1MSFJFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldEFsaWdu
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFs
dWUpOwotfQotCi1ib29sIEhUTUxIUkVsZW1lbnQ6Om5vU2hhZGUoKSBjb25zdAotewotICAgIHJl
dHVybiAhZ2V0QXR0cmlidXRlKG5vc2hhZGVBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1M
SFJFbGVtZW50OjpzZXROb1NoYWRlKGJvb2wgbm9TaGFkZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
bm9zaGFkZUF0dHIsIG5vU2hhZGUgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVu
dDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0U2l6ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxl
bWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lkdGhBdHRy
KTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1IVE1MSGVhZGluZ0VsZW1lbnQ6OkhUTUxIZWFkaW5nRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKQotewotfQotCi1ib29sIEhUTUxIZWFkaW5nRWxlbWVudDo6Y2hlY2tE
VEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCi17Ci0gICAgaWYgKG5ld0NoaWxkLT5oYXNUYWdOYW1l
KGgxVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShoMlRhZykgfHwKLSAgICAgICAgbmV3Q2hp
bGQtPmhhc1RhZ05hbWUoaDNUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKGg0VGFnKSB8fAot
ICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShoNVRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoaDZUYWcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5FaXRoZXJU
YWdMaXN0KG5ld0NoaWxkKTsKLX0KLQotU3RyaW5nIEhUTUxIZWFkaW5nRWxlbWVudDo6YWxpZ24o
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9p
ZCBIVE1MSGVhZGluZ0VsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWVudChEb2N1bWVu
dCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQocFRhZywgZG9jKQotewotfQotCi1ib29sIEhUTUxQ
YXJhZ3JhcGhFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKLXsKLSAgICBy
ZXR1cm4gaW5JbmxpbmVUYWdMaXN0KG5ld0NoaWxkKSB8fCAoZG9jdW1lbnQoKS0+aW5Db21wYXRN
b2RlKCkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05hbWUodGFibGVUYWcpKTsKLX0KLQotYm9vbCBIVE1M
UGFyYWdyYXBoRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVCbG9jazsgLy8gV2UgY2FuIHNo
YXJlIHdpdGggRElWIGhlcmUuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lk
IEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKLSAgICAg
ICAgU3RyaW5nIHYgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZh
bHVlKCksICJjZW50ZXIiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9DRU5URVIpOwotICAgICAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKQotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lU
X0xFRlQpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAicmlnaHQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RF
WFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9SSUdIVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwotICAgIH0g
ZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19
Ci0KLVN0cmluZyBIVE1MUGFyYWdyYXBoRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxl
bWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
YWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTFByZUVs
ZW1lbnQ6OkhUTUxQcmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCi17Ci19Ci0KLWJvb2wg
SFRNTFByZUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1l
ID09IHdpZHRoQXR0ciB8fCBhdHRyTmFtZSA9PSB3cmFwQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlUHJlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBIVE1MRWxl
bWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUHJlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBzb21lIGRheS4gIFdpZHRoIG9uIGEgPHByZT4gaXMgdGhlICMgb2YgY2hhcmFj
dGVycyB0aGF0Ci0gICAgICAgIC8vIHdlIHNob3VsZCBzaXplIHRoZSBwcmUgdG8uICBXZSBiYXNp
Y2FsbHkgbmVlZCB0byB0YWtlIHRoZSB3aWR0aCBvZiBhIHNwYWNlLAotICAgICAgICAvLyBtdWx0
aXBseSBieSB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlbiBzZXQgdGhhdCBhcyB0
aGUgd2lkdGggQ1NTCi0gICAgICAgIC8vIHByb3BlcnR5LgotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHdyYXBBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc051bGwo
KSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dISVRFX1NQQUNF
LCBDU1NfVkFMX1BSRV9XUkFQKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIEhUTUxFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQotaW50IEhUTUxQcmVFbGVtZW50
Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRv
SW50KCk7Ci19Ci0KLXZvaWQgSFRNTFByZUVsZW1lbnQ6OnNldFdpZHRoKGludCB3aWR0aCkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih3aWR0aCkpOwotfQot
Ci1ib29sIEhUTUxQcmVFbGVtZW50Ojp3cmFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0
dHJpYnV0ZSh3cmFwQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTFByZUVsZW1lbnQ6OnNl
dFdyYXAoYm9vbCB3cmFwKQotewotICAgIHNldEF0dHJpYnV0ZSh3cmFwQXR0ciwgd3JhcCA/ICIi
IDogMCk7Ci19Ci0gICAgCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAvLyBXaW5JRSB1c2VzIDYw
bXMgYXMgdGhlIG1pbmltdW0gZGVsYXkgYnkgZGVmYXVsdC4KLWNvbnN0IGludCBkZWZhdWx0TWlu
aW11bURlbGF5ID0gNjA7Ci0KLUhUTUxNYXJxdWVlRWxlbWVudDo6SFRNTE1hcnF1ZWVFbGVtZW50
KERvY3VtZW50ICpkb2MpCi06IEhUTUxFbGVtZW50KG1hcnF1ZWVUYWcsIGRvYyksCi0gIG1fbWlu
aW11bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVsYXkpCi17Ci19Ci0KLWJvb2wgSFRNTE1hcnF1ZWVF
bGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0
aEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaGVpZ2h0QXR0ciB8fAotICAgICAgICBhdHRy
TmFtZSA9PSBiZ2NvbG9yQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSB2c3BhY2VBdHRyIHx8
Ci0gICAgICAgIGF0dHJOYW1lID09IGhzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0g
c2Nyb2xsYW1vdW50QXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzY3JvbGxkZWxheUF0dHIg
fHwKLSAgICAgICAgYXR0ck5hbWUgPT0gbG9vcEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0g
YmVoYXZpb3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGRpcmVjdGlvbkF0dHIpIHsKLSAg
ICAgICAgcmVzdWx0ID0gZVVuaXZlcnNhbDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsK
LX0KLQotdm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikg
ewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX1dJRFRILCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+
dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BS
T1BfSEVJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBiZ2NvbG9yQXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiwg
YXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0
cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUoKSk7
Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0JPVFRPTSwg
YXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBoc3BhY2VBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgYXR0
ci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFS
R0lOX1JJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHNjcm9sbGFtb3VudEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9f
V0VCS0lUX01BUlFVRUVfSU5DUkVNRU5ULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBzY3JvbGxkZWxheUF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52
YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJP
UF9fV0VCS0lUX01BUlFVRUVfU1BFRUQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGxvb3BBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICItMSIgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImluZmluaXRlIikpCi0gICAgICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1JFUEVUSVRJ
T04sIENTU19WQUxfSU5GSU5JVEUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfUkVQRVRJVElPTiwg
YXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBiZWhhdmlvckF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVF
RV9TVFlMRSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
ZGlyZWN0aW9uQXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVF
X0RJUkVDVElPTiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gdHJ1ZXNwZWVkQXR0cikgewotICAgICAgICBtX21pbmltdW1EZWxheSA9ICFhdHRyLT5pc051
bGwoKSA/IDAgOiBkZWZhdWx0TWluaW11bURlbGF5OwotICAgIH0gZWxzZQotICAgICAgICBIVE1M
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KIH0KSW5kZXg6IGh0bWwv
SFRNTFByZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFByZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSwxMSArMjEsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
KgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVj
dG9yLmgiCisjaW5jbHVkZSAiSFRNTFByZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0zNSwyNTYgKzMy
LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJsb2NrcXVvdGVFbGVt
ZW50OjpIVE1MQmxvY2txdW90ZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50KGJsb2NrcXVvdGVUYWcsIGRvYykKLXsKLX0KLQotSFRNTEJsb2NrcXVvdGVFbGVtZW50Ojp+
SFRNTEJsb2NrcXVvdGVFbGVtZW50KCkKLXsKLX0KLQotU3RyaW5nIEhUTUxCbG9ja3F1b3RlRWxl
bWVudDo6Y2l0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaXRlQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpzZXRDaXRlKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNpdGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotSFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KERvY3VtZW50
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChkaXZUYWcsIGRvYykKLXsKLX0KLQotSFRNTERpdkVs
ZW1lbnQ6On5IVE1MRGl2RWxlbWVudCgpCi17Ci19Ci0KLWJvb2wgSFRNTERpdkVsZW1lbnQ6Om1h
cFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewot
ICAgICAgICByZXN1bHQgPSBlQmxvY2s7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQot
ICAgICAgICAKLXZvaWQgSFRNTERpdkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikg
ewotICAgICAgICBTdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ci0+dmFsdWUoKSwgImNlbnRlciIpKQotICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfQ0VOVEVSKTsKLSAgICAgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKLSAgICAg
ICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxf
X1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfUklHSFQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2KTsK
LSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwotfQotCi1TdHJpbmcgSFRNTERpdkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTERpdkVsZW1lbnQ6
OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWdu
QXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxIUkVsZW1lbnQ6
OkhUTUxIUkVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGhyVGFnLCBk
b2MpCi17Ci19Ci0KLUhUTUxIUkVsZW1lbnQ6On5IVE1MSFJFbGVtZW50KCkKLXsKLX0KLQotYm9v
bCBIVE1MSFJFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFt
ZSA9PSBhbGlnbkF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAg
ICAgIGF0dHJOYW1lID09IGNvbG9yQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzaXplQXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBub3NoYWRlQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlSFI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVt
ZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxIUkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsICIwIik7Ci0gICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENTU19WQUxfQVVUTyk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0Iikp
IHsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZU
LCBDU1NfVkFMX0FVVE8pOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfTUFSR0lOX1JJR0hULCAiMCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsIENTU19WQUxfQVVUTyk7Ci0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENT
U19WQUxfQVVUTyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3
aWR0aEF0dHIpIHsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IHYgPSBhdHRyLT52YWx1
ZSgpLmltcGwoKS0+dG9JbnQoJm9rKTsKLSAgICAgICAgaWYob2sgJiYgIXYpCi0gICAgICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsICIxIik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFs
dWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sb3JBdHRyKSB7Ci0gICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19W
QUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJf
UklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxf
U09MSUQpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1Is
IGF0dHItPnZhbHVlKCkpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNL
R1JPVU5EX0NPTE9SLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBub3NoYWRlQXR0cikgewotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwg
Q1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JP
UkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0
ciwgQ1NTX1BST1BfQk9SREVSX0NPTE9SLCBTdHJpbmcoImdyZXkiKSk7Ci0gICAgICAgIGFkZENT
U0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIFN0cmluZygiZ3JleSIpKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikgewotICAgICAgICBTdHJp
bmdJbXBsKiBzaSA9IGF0dHItPnZhbHVlKCkuaW1wbCgpOwotICAgICAgICBpbnQgc2l6ZSA9IHNp
LT50b0ludCgpOwotICAgICAgICBpZiAoc2l6ZSA8PSAxKQotICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgU3RyaW5nKCIwIikpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJ
R0hULCBTdHJpbmc6Om51bWJlcihzaXplLTIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxl
bWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRy
KTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1M
SFJFbGVtZW50Ojpub1NoYWRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShu
b3NoYWRlQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0Tm9TaGFk
ZShib29sIG5vU2hhZGUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5vc2hhZGVBdHRyLCBub1NoYWRl
ID8gIiIgOiAwKTsKLX0KLQotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OnNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2l6ZUF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1l
bnQ6OnNldFNpemUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6
ZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OndpZHRoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhS
RWxlbWVudDo6c2V0V2lkdGgoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUod2lkdGhBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEhl
YWRpbmdFbGVtZW50OjpIVE1MSGVhZGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsK
LX0KLQotYm9vbCBIVE1MSGVhZGluZ0VsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKQotewotICAgIGlmIChuZXdDaGlsZC0+aGFzVGFnTmFtZShoMVRhZykgfHwgbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUoaDJUYWcpIHx8Ci0gICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGgzVGFn
KSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShoNFRhZykgfHwKLSAgICAgICAgbmV3Q2hpbGQtPmhh
c1RhZ05hbWUoaDVUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKGg2VGFnKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7Ci19
Ci0KLVN0cmluZyBIVE1MSGVhZGluZ0VsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhlYWRpbmdFbGVtZW50
OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGln
bkF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGFyYWdyYXBo
RWxlbWVudDo6SFRNTFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50KHBUYWcsIGRvYykKLXsKLX0KLQotYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6Y2hl
Y2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCi17Ci0gICAgcmV0dXJuIGluSW5saW5lVGFnTGlz
dChuZXdDaGlsZCkgfHwgKGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYmIG5ld0NoaWxkLT5o
YXNUYWdOYW1lKHRhYmxlVGFnKSk7Ci19Ci0KLWJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnQ6Om1h
cFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewot
ICAgICAgICByZXN1bHQgPSBlQmxvY2s7IC8vIFdlIGNhbiBzaGFyZSB3aXRoIERJViBoZXJlLgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFw
VG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+
dmFsdWUoKTsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJt
aWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0g
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1Nf
VkFMX19XRUJLSVRfQ0VOVEVSKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19X
RUJLSVRfUklHSFQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTFBhcmFn
cmFwaEVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFs
aWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQogICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewpAQCAtMzMzLDgwICs4MCw0IEBACiAgICAgc2V0QXR0
cmlidXRlKHdyYXBBdHRyLCB3cmFwID8gIiIgOiAwKTsKIH0KICAgICAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotIC8vIFdpbklFIHVzZXMgNjBtcyBhcyB0aGUgbWluaW11bSBkZWxheSBieSBkZWZh
dWx0LgotY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2MDsKLQotSFRNTE1hcnF1ZWVF
bGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLTogSFRNTEVsZW1lbnQo
bWFycXVlZVRhZywgZG9jKSwKLSAgbV9taW5pbXVtRGVsYXkoZGVmYXVsdE1pbmltdW1EZWxheSkK
LXsKLX0KLQotYm9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17
Ci0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBo
ZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGJnY29sb3JBdHRyIHx8Ci0gICAgICAg
IGF0dHJOYW1lID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaHNwYWNlQXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzY3JvbGxhbW91bnRBdHRyIHx8Ci0gICAgICAgIGF0
dHJOYW1lID09IHNjcm9sbGRlbGF5QXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBsb29wQXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBiZWhhdmlvckF0dHIgfHwKLSAgICAgICAgYXR0ck5h
bWUgPT0gZGlyZWN0aW9uQXR0cikgewotICAgICAgICByZXN1bHQgPSBlVW5pdmVyc2FsOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBU
b0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxNYXJxdWVlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgs
IGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhlaWdodEF0
dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0dHItPnZhbHVlKCkpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JBdHRyKSB7Ci0gICAgICAgIGlmICgh
YXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBD
U1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSB2c3BhY2VBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9N
QVJHSU5fVE9QLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRy
LCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhzcGFjZUF0dHIpIHsKLSAgICAgICAgaWYgKCFh
dHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIs
IENTU19QUk9QX01BUkdJTl9MRUZULCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIGFkZENT
U0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0dHItPnZhbHVlKCkpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2Nyb2xsYW1vdW50QXR0cikg
ewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9JTkNSRU1FTlQsIGF0dHIt
PnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNjcm9sbGRlbGF5QXR0
cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9TUEVFRCwgYXR0ci0+
dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbG9vcEF0dHIpIHsKLSAg
ICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKGF0
dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAi
aW5maW5pdGUiKSkKLSAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9fV0VCS0lUX01BUlFVRUVfUkVQRVRJVElPTiwgQ1NTX1ZBTF9JTkZJTklURSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19X
RUJLSVRfTUFSUVVFRV9SRVBFVElUSU9OLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJlaGF2aW9yQXR0cikgewotICAgICAgICBpZiAo
IWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1NUWUxFLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXJlY3Rpb25BdHRyKSB7Ci0gICAgICAgIGlmICgh
YXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfRElSRUNUSU9OLCBhdHRyLT52YWx1ZSgpKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0cnVlc3BlZWRBdHRyKSB7Ci0gICAgICAgIG1f
bWluaW11bURlbGF5ID0gIWF0dHItPmlzTnVsbCgpID8gMCA6IGRlZmF1bHRNaW5pbXVtRGVsYXk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKLX0KLQogfQpJbmRleDogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzMyArMjEsMTMgQEAK
ICAqCiAgKi8KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmbmRlZiBIVE1MX0JMT0NLSU1QTF9I
Ci0jZGVmaW5lIEhUTUxfQkxPQ0tJTVBMX0gKKyNpZm5kZWYgSFRNTE1hcnF1ZWVFbGVtZW50X0gK
KyNkZWZpbmUgSFRNTE1hcnF1ZWVFbGVtZW50X0gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIEhUTUxCbG9ja3F1b3RlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dAotewotcHVibGljOgotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1bWVudCopOwotICAg
IH5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0g
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0g
ICAgU3RyaW5nIGNpdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRN
TERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2
RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MRGl2RWxlbWVudCgpOwotICAgIAotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiA1OyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5n
IGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxIUkVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+
SFRNTEhSRWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIAotICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIG5vU2hhZGUoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5vU2hhZGUoYm9vbCk7Ci0KLSAgICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWNsYXNzIEhUTUxIZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAot
ewotcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c09wdGlvbmFsOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAzOyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKTsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNv
bnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxQcmVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17
Ci1wdWJsaWM6Ci0gICAgSFRNTFByZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBtYXBUb0VudHJ5KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBpbnQgd2lkdGgo
KSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGludCB3KTsKLSAgICAKLSAgICBib29sIHdyYXAo
KSBjb25zdDsKLSAgICB2b2lkIHNldFdyYXAoYm9vbCBiKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQogY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50CiB7
CiBwdWJsaWM6CkluZGV4OiBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBo
dG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsMjIzICsy
MSwxOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0KICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgotI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1
b3RlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmxvY2txdW90ZVRh
ZywgZG9jKQotewotfQotCi1IVE1MQmxvY2txdW90ZUVsZW1lbnQ6On5IVE1MQmxvY2txdW90ZUVs
ZW1lbnQoKQotewotfQotCi1TdHJpbmcgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpjaXRlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNpdGVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
QmxvY2txdW90ZUVsZW1lbnQ6OnNldENpdGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoY2l0ZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1IVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50KGRpdlRhZywgZG9jKQotewotfQotCi1IVE1MRGl2RWxlbWVudDo6fkhUTUxEaXZF
bGVtZW50KCkKLXsKLX0KLQotYm9vbCBIVE1MRGl2RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGVCbG9jazsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVs
ZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0gICAgICAgIAotdm9pZCBI
VE1MRGl2RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmlu
ZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHIt
PnZhbHVlKCksICJtaWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAi
Y2VudGVyIikpCi0gICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRf
QUxJR04sIENTU19WQUxfX1dFQktJVF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKQotICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fV0VCS0lUX0xFRlQpOwot
ICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQi
KSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04s
IENTU19WQUxfX1dFQktJVF9SSUdIVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwotICAgIH0gZWxzZQotICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmlu
ZyBIVE1MRGl2RWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MRGl2RWxlbWVudDo6c2V0QWxpZ24oY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChE
b2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoaHJUYWcsIGRvYykKLXsKLX0KLQotSFRN
TEhSRWxlbWVudDo6fkhUTUxIUkVsZW1lbnQoKQotewotfQotCi1ib29sIEhUTUxIUkVsZW1lbnQ6
Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0ciB8
fAotICAgICAgICBhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0g
Y29sb3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNpemVBdHRyIHx8Ci0gICAgICAgIGF0
dHJOYW1lID09IG5vc2hhZGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVIUjsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnko
YXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibGVmdCIpKSB7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9NQVJHSU5fTEVGVCwgIjAiKTsKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX01BUkdJTl9SSUdIVCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkgewotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsIENTU19WQUxfQVVUTyk7
Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQs
ICIwIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgQ1NTX1ZBTF9BVVRPKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikgewotICAg
ICAgICBib29sIG9rOwotICAgICAgICBpbnQgdiA9IGF0dHItPnZhbHVlKCkuaW1wbCgpLT50b0lu
dCgmb2spOwotICAgICAgICBpZihvayAmJiAhdikKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChh
dHRyLCBDU1NfUFJPUF9XSURUSCwgIjEiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX1dJRFRILCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xvckF0dHIpIHsKLSAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwgQ1NT
X1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRF
Ul9CT1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAg
IGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JPUkRFUl9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7
Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5vc2hhZGVBdHRy
KSB7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9UT1BfU1RZ
TEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsK
LSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUs
IENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CT1JE
RVJfQ09MT1IsIFN0cmluZygiZ3JleSIpKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NT
X1BST1BfQkFDS0dST1VORF9DT0xPUiwgU3RyaW5nKCJncmV5IikpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IHNpemVBdHRyKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHNpID0gYXR0
ci0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgICAgIGludCBzaXplID0gc2ktPnRvSW50KCk7Ci0gICAg
ICAgIGlmIChzaXplIDw9IDEpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBTdHJpbmcoIjAiKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmluZzo6bnVt
YmVyKHNpemUtMikpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmluZyBIVE1MSFJFbGVtZW50OjphbGlnbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhU
TUxIUkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1ib29sIEhUTUxIUkVsZW1lbnQ6Om5vU2hh
ZGUoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG5vc2hhZGVBdHRyKS5pc051
bGwoKTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXROb1NoYWRlKGJvb2wgbm9TaGFkZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUobm9zaGFkZUF0dHIsIG5vU2hhZGUgPyAiIiA6IDApOwotfQot
Ci1TdHJpbmcgSFRNTEhSRWxlbWVudDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShzaXplQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0U2l6ZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTEhSRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUod2lkdGhBdHRyKTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRXaWR0
aChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZh
bHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MSGVhZGluZ0VsZW1lbnQ6OkhU
TUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQotewotfQotCi1ib29sIEhUTUxI
ZWFkaW5nRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCi17Ci0gICAgaWYg
KG5ld0NoaWxkLT5oYXNUYWdOYW1lKGgxVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShoMlRh
ZykgfHwKLSAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDNUYWcpIHx8IG5ld0NoaWxkLT5o
YXNUYWdOYW1lKGg0VGFnKSB8fAotICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShoNVRhZykg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaDZUYWcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gaW5FaXRoZXJUYWdMaXN0KG5ld0NoaWxkKTsKLX0KLQotU3RyaW5nIEhUTUxI
ZWFkaW5nRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
YWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSGVhZGluZ0VsZW1lbnQ6OnNldEFsaWduKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFy
YWdyYXBoRWxlbWVudChEb2N1bWVudCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQocFRhZywgZG9j
KQogewpAQCAtMjgzLDEzMCArNzgsNCBAQAogICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZh
bHVlKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUHJlRWxlbWVudDo6SFRNTFBy
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVu
dDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRy
IHx8IGF0dHJOYW1lID09IHdyYXBBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVQcmU7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBUb0Vu
dHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxQcmVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5h
bWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHNv
bWUgZGF5LiAgV2lkdGggb24gYSA8cHJlPiBpcyB0aGUgIyBvZiBjaGFyYWN0ZXJzIHRoYXQKLSAg
ICAgICAgLy8gd2Ugc2hvdWxkIHNpemUgdGhlIHByZSB0by4gIFdlIGJhc2ljYWxseSBuZWVkIHRv
IHRha2UgdGhlIHdpZHRoIG9mIGEgc3BhY2UsCi0gICAgICAgIC8vIG11bHRpcGx5IGJ5IHRoZSB2
YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGFuZCB0aGVuIHNldCB0aGF0IGFzIHRoZSB3aWR0aCBDU1MK
LSAgICAgICAgLy8gcHJvcGVydHkuCi0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gd3Jh
cEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQotICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0hJVEVfU1BBQ0UsIENTU19WQUxfUFJF
X1dSQVApOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1pbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoKTsKLX0KLQot
dm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQotewotICAgIHNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci19Ci0KLWJvb2wgSFRNTFBy
ZUVsZW1lbnQ6OndyYXAoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKHdyYXBB
dHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V3JhcChib29sIHdy
YXApCi17Ci0gICAgc2V0QXR0cmlidXRlKHdyYXBBdHRyLCB3cmFwID8gIiIgOiAwKTsKLX0KLSAg
ICAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIC8vIFdpbklFIHVzZXMgNjBtcyBhcyB0aGUgbWlu
aW11bSBkZWxheSBieSBkZWZhdWx0LgotY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2
MDsKLQotSFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQoRG9jdW1lbnQgKmRv
YykKLTogSFRNTEVsZW1lbnQobWFycXVlZVRhZywgZG9jKSwKLSAgbV9taW5pbXVtRGVsYXkoZGVm
YXVsdE1pbmltdW1EZWxheSkKLXsKLX0KLQotYm9vbCBIVE1MTWFycXVlZUVsZW1lbnQ6Om1hcFRv
RW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAotICAg
ICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGJnY29s
b3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0
ck5hbWUgPT0gaHNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzY3JvbGxhbW91bnRB
dHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNjcm9sbGRlbGF5QXR0ciB8fAotICAgICAgICBh
dHRyTmFtZSA9PSBsb29wQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBiZWhhdmlvckF0dHIg
fHwKLSAgICAgICAgYXR0ck5hbWUgPT0gZGlyZWN0aW9uQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlVW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEhUTUxFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhU
TUxNYXJxdWVlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7Ci0gICAgICAgIGlm
ICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0
ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGhlaWdodEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JBdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2c3BhY2VBdHRyKSB7Ci0gICAgICAg
IGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFkZENTU0xlbmd0
aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fVE9QLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhzcGFjZUF0dHIp
IHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
YWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBhdHRyLT52YWx1ZSgpKTsK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIGF0
dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
c2Nyb2xsYW1vdW50QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVF
RV9JTkNSRU1FTlQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHNjcm9sbGRlbGF5QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFS
UVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gbG9vcEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAiaW5maW5pdGUiKSkKLSAgICAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfUkVQRVRJVElPTiwgQ1NTX1ZBTF9J
TkZJTklURSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkQ1NTTGVuZ3Ro
KGF0dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9SRVBFVElUSU9OLCBhdHRyLT52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJlaGF2aW9yQXR0
cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1NUWUxFLCBhdHRy
LT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXJlY3Rpb25BdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfRElSRUNUSU9OLCBh
dHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0cnVlc3BlZWRB
dHRyKSB7Ci0gICAgICAgIG1fbWluaW11bURlbGF5ID0gIWF0dHItPmlzTnVsbCgpID8gMCA6IGRl
ZmF1bHRNaW5pbXVtRGVsYXk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0KLQogfQpJbmRleDogaHRtbC9IVE1MRWxlbWVudEZh
Y3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2
aXNpb24gMTQzODkpCisrKyBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxMiBAQAogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEJhc2VGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxCbG9ja3F1b3RlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxC
b2R5RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
QnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRExpc3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1lbnQuaCIK
QEAgLTM5LDYgKzQxLDggQEAKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEhlYWRpbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTElzSW5kZXhFbGVtZW50LmgiCkBAIC00Niw2ICs1MCw3IEBA
CiAjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTElFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcnF1ZWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lbnVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1l
dGFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1vZEVsZW1lbnQuaCIKQEAgLTU0LDcgKzU5LDkg
QEAKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3Vw
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFBhcmFncmFwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFByZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVu
dC5oIgpAQCAtNjgsNyArNzUsNiBAQAogI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MVUxpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVudC5o
IgotI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogaHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRN
TEhlYWRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxIZWFkaW5n
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE5NiArMjEsMTUgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxl
bWVudC5oIgogCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQmxvY2txdW90ZUVsZW1l
bnQ6OkhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnQoYmxvY2txdW90ZVRhZywgZG9jKQotewotfQotCi1IVE1MQmxvY2txdW90ZUVsZW1lbnQ6On5I
VE1MQmxvY2txdW90ZUVsZW1lbnQoKQotewotfQotCi1TdHJpbmcgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50OjpjaXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNpdGVBdHRyKTsK
LX0KLQotdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OnNldENpdGUoY29uc3QgU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2l0ZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1IVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQoRG9jdW1lbnQg
KmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGRpdlRhZywgZG9jKQotewotfQotCi1IVE1MRGl2RWxl
bWVudDo6fkhUTUxEaXZFbGVtZW50KCkKLXsKLX0KLQotYm9vbCBIVE1MRGl2RWxlbWVudDo6bWFw
VG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IGVCbG9jazsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0g
ICAgICAgIAotdm9pZCBIVE1MRGl2RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7
Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9DRU5URVIpOwotICAgICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKQotICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9f
V0VCS0lUX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52
YWx1ZSgpLCAicmlnaHQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9SSUdIVCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwot
ICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7Ci19Ci0KLVN0cmluZyBIVE1MRGl2RWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MRGl2RWxlbWVudDo6
c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25B
dHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEhSRWxlbWVudDo6
SFRNTEhSRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQoaHJUYWcsIGRv
YykKLXsKLX0KLQotSFRNTEhSRWxlbWVudDo6fkhUTUxIUkVsZW1lbnQoKQotewotfQotCi1ib29s
IEhUTUxIUkVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1l
ID09IGFsaWduQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKLSAgICAg
ICAgYXR0ck5hbWUgPT0gY29sb3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNpemVBdHRy
IHx8Ci0gICAgICAgIGF0dHJOYW1lID09IG5vc2hhZGVBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9
IGVIUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKSB7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgIjAiKTsKLSAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgQ1NTX1ZBTF9BVVRPKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkg
ewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQs
IENTU19WQUxfQVVUTyk7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9NQVJHSU5fUklHSFQsICIwIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NTX1ZBTF9BVVRPKTsKLSAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgQ1NT
X1ZBTF9BVVRPKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdp
ZHRoQXR0cikgewotICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgdiA9IGF0dHItPnZhbHVl
KCkuaW1wbCgpLT50b0ludCgmb2spOwotICAgICAgICBpZihvayAmJiAhdikKLSAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgIjEiKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX1dJRFRILCBhdHRyLT52YWx1
ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xvckF0dHIpIHsKLSAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1ZB
TF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9S
SUdIVF9TVFlMRSwgQ1NTX1ZBTF9TT0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwgQ1NTX1ZBTF9T
T0xJRCk7Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JPUkRFUl9DT0xPUiwg
YXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tH
Uk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG5vc2hhZGVBdHRyKSB7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBD
U1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9S
REVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRy
LCBDU1NfUFJPUF9CT1JERVJfQ09MT1IsIFN0cmluZygiZ3JleSIpKTsKLSAgICAgICAgYWRkQ1NT
Q29sb3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiwgU3RyaW5nKCJncmV5IikpOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKSB7Ci0gICAgICAgIFN0cmlu
Z0ltcGwqIHNpID0gYXR0ci0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgICAgIGludCBzaXplID0gc2kt
PnRvSW50KCk7Ci0gICAgICAgIGlmIChzaXplIDw9IDEpCi0gICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBTdHJpbmcoIjAiKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlH
SFQsIFN0cmluZzo6bnVtYmVyKHNpemUtMikpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19Ci0KLVN0cmluZyBIVE1MSFJFbGVt
ZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIp
OwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1ib29sIEhUTUxI
UkVsZW1lbnQ6Om5vU2hhZGUoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG5v
c2hhZGVBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXROb1NoYWRl
KGJvb2wgbm9TaGFkZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobm9zaGFkZUF0dHIsIG5vU2hhZGUg
PyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVudDo6c2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVu
dDo6c2V0U2l6ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzaXpl
QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVudDo6d2lkdGgoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKTsKLX0KLQotdm9pZCBIVE1MSFJF
bGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBIVE1MSGVh
ZGluZ0VsZW1lbnQ6OkhUTUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewpA
QCAtMjM2LDE3NyArNTUsNCBAQAogICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsK
IH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGFyYWdyYXBoRWxlbWVudDo6SFRNTFBh
cmFncmFwaEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHBUYWcsIGRv
YykKLXsKLX0KLQotYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZSogbmV3Q2hpbGQpCi17Ci0gICAgcmV0dXJuIGluSW5saW5lVGFnTGlzdChuZXdDaGlsZCkgfHwg
KGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKHRhYmxl
VGFnKSk7Ci19Ci0KLWJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAgICAgICByZXN1bHQg
PSBlQmxvY2s7IC8vIFdlIGNhbiBzaGFyZSB3aXRoIERJViBoZXJlLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShhdHRyTmFt
ZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfQ0VO
VEVSKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwg
ImxlZnQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRf
QUxJR04sIENTU19WQUxfX1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfUklHSFQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9U
RVhUX0FMSUdOLCB2KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OmFs
aWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFt
ZSwgZG9jKQotewotfQotCi1ib29sIEhUTUxQcmVFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dAotewotICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwgYXR0ck5hbWUgPT0gd3JhcEF0
dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVByZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7
Ci19Ci0KLXZvaWQgSFRNTFByZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgc29tZSBkYXkuICBXaWR0aCBvbiBhIDxw
cmU+IGlzIHRoZSAjIG9mIGNoYXJhY3RlcnMgdGhhdAotICAgICAgICAvLyB3ZSBzaG91bGQgc2l6
ZSB0aGUgcHJlIHRvLiAgV2UgYmFzaWNhbGx5IG5lZWQgdG8gdGFrZSB0aGUgd2lkdGggb2YgYSBz
cGFjZSwKLSAgICAgICAgLy8gbXVsdGlwbHkgYnkgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUg
YW5kIHRoZW4gc2V0IHRoYXQgYXMgdGhlIHdpZHRoIENTUwotICAgICAgICAvLyBwcm9wZXJ0eS4K
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3cmFwQXR0cikgewotICAgICAgICBpZiAo
IWF0dHItPnZhbHVlKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9XSElURV9TUEFDRSwgQ1NTX1ZBTF9QUkVfV1JBUCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19
Ci0KLWludCBIVE1MUHJlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxQcmVFbGVtZW50Ojpz
ZXRXaWR0aChpbnQgd2lkdGgpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5n
OjpudW1iZXIod2lkdGgpKTsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVudDo6d3JhcCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUod3JhcEF0dHIpLmlzTnVsbCgpOwotfQotCi12
b2lkIEhUTUxQcmVFbGVtZW50OjpzZXRXcmFwKGJvb2wgd3JhcCkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUod3JhcEF0dHIsIHdyYXAgPyAiIiA6IDApOwotfQotICAgIAotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gLy8gV2luSUUgdXNlcyA2MG1zIGFzIHRoZSBtaW5pbXVtIGRlbGF5IGJ5IGRlZmF1bHQu
Ci1jb25zdCBpbnQgZGVmYXVsdE1pbmltdW1EZWxheSA9IDYwOwotCi1IVE1MTWFycXVlZUVsZW1l
bnQ6OkhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MRWxlbWVudChtYXJx
dWVlVGFnLCBkb2MpLAotICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5KQotewot
fQotCi1ib29sIEhUTUxNYXJxdWVlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGhlaWdo
dEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gYmdjb2xvckF0dHIgfHwKLSAgICAgICAgYXR0
ck5hbWUgPT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3BhY2VBdHRyIHx8
Ci0gICAgICAgIGF0dHJOYW1lID09IHNjcm9sbGFtb3VudEF0dHIgfHwKLSAgICAgICAgYXR0ck5h
bWUgPT0gc2Nyb2xsZGVsYXlBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGxvb3BBdHRyIHx8
Ci0gICAgICAgIGF0dHJOYW1lID09IGJlaGF2aW9yQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9
PSBkaXJlY3Rpb25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50
cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0
ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGVpZ2h0QXR0cikg
ewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmdjb2xvckF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRy
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHZzcGFjZUF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJ
Tl9UT1AsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENT
U19QUk9QX01BUkdJTl9CT1RUT00sIGF0dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHNwYWNlQXR0cikgewotICAgICAgICBpZiAoIWF0dHIt
PnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NT
X1BST1BfTUFSR0lOX0xFRlQsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzY3JvbGxhbW91bnRBdHRyKSB7Ci0g
ICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NM
ZW5ndGgoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX0lOQ1JFTUVOVCwgYXR0ci0+dmFs
dWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2Nyb2xsZGVsYXlBdHRyKSB7
Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRD
U1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1NQRUVELCBhdHRyLT52YWx1
ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBsb29wQXR0cikgewotICAgICAg
ICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAiLTEiIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJpbmZp
bml0ZSIpKQotICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19X
RUJLSVRfTUFSUVVFRV9SRVBFVElUSU9OLCBDU1NfVkFMX0lORklOSVRFKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX1dFQktJ
VF9NQVJRVUVFX1JFUEVUSVRJT04sIGF0dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmVoYXZpb3JBdHRyKSB7Ci0gICAgICAgIGlmICghYXR0
ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfU1RZTEUsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpcmVjdGlvbkF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRy
LT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX19XRUJLSVRfTUFSUVVFRV9ESVJFQ1RJT04sIGF0dHItPnZhbHVlKCkpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRydWVzcGVlZEF0dHIpIHsKLSAgICAgICAgbV9taW5p
bXVtRGVsYXkgPSAhYXR0ci0+aXNOdWxsKCkgPyAwIDogZGVmYXVsdE1pbmltdW1EZWxheTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwotfQotCiB9CkluZGV4OiBodG1sL0hUTUxIUkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1s
L0hUTUxIUkVsZW1lbnQuaAkocmV2aXNpb24gMTQzODIpCisrKyBodG1sL0hUTUxIUkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsNTMgKzIxLDEzIEBACiAgKgogICovCiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSNpZm5kZWYgSFRNTF9CTE9DS0lNUExfSAotI2RlZmluZSBIVE1MX0JMT0NL
SU1QTF9ICisjaWZuZGVmIEhUTUxIUkVsZW1lbnRfSAorI2RlZmluZSBIVE1MSFJFbGVtZW50X0gK
IAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU3RyaW5nOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxCbG9ja3F1b3Rl
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxCbG9ja3F1
b3RlRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKTsKLQot
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgU3RyaW5nIGNpdGUoKSBjb25zdDsKLSAgICB2
b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRNTERpdkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2RWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1M
RGl2RWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRB
bGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogY2xhc3Mg
SFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgpAQCAtOTMsNzcg
KzUzLDUgQEAKICAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwogfTsKIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotICAgIHZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBj
b25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotfTsKLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudAotewotcHVibGljOgotICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50Kik7Ci0K
LSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMzsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2Rl
KiBuZXdDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBTdHJpbmcgYWxp
Z24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotfTsKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MUHJlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudAotewotcHVibGljOgotICAgIEhUTUxQcmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgbWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAg
ICB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgaW50
IHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChpbnQgdyk7Ci0gICAgCi0gICAgYm9v
bCB3cmFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXcmFwKGJvb2wgYik7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudAotewotcHVibGljOgotICAgIEhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCopOwotICAg
IAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAzOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25z
dCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBp
bnQgbWluaW11bURlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRGVsYXk7IH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgaW50IG1fbWluaW11bURlbGF5OwotfTsKLQogfTsgLy9uYW1lc3BhY2UK
ICNlbmRpZgpJbmRleDogaHRtbC9IVE1MRGl2RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MRGl2RWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MRGl2RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsyMSw4IEBACiAgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgImh0bWxfYmxvY2tpbXBsLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKKyNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKQEAgLTM1LDI3ICszMiw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KERvY3VtZW50ICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudChibG9ja3F1b3RlVGFnLCBkb2MpCi17Ci19Ci0KLUhUTUxC
bG9ja3F1b3RlRWxlbWVudDo6fkhUTUxCbG9ja3F1b3RlRWxlbWVudCgpCi17Ci19Ci0KLVN0cmlu
ZyBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OmNpdGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoY2l0ZUF0dHIpOwotfQotCi12b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6c2V0
Q2l0ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaXRlQXR0ciwg
dmFsdWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIEhUTUxEaXZFbGVtZW50OjpIVE1M
RGl2RWxlbWVudChEb2N1bWVudCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQoZGl2VGFnLCBkb2Mp
CiB7CkBAIC0xMDAsMzEzICs3Niw0IEBACiAgICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFs
dWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxIUkVsZW1lbnQ6OkhUTUxIUkVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGhyVGFnLCBkb2MpCi17Ci19
Ci0KLUhUTUxIUkVsZW1lbnQ6On5IVE1MSFJFbGVtZW50KCkKLXsKLX0KLQotYm9vbCBIVE1MSFJF
bGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSBhbGln
bkF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJO
YW1lID09IGNvbG9yQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBzaXplQXR0ciB8fAotICAg
ICAgICBhdHRyTmFtZSA9PSBub3NoYWRlQXR0cikgewotICAgICAgICByZXN1bHQgPSBlSFI7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50OjptYXBU
b0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0
ci0+dmFsdWUoKSwgImxlZnQiKSkgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfTUFSR0lOX0xFRlQsICIwIik7Ci0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpIHsKLSAgICAg
ICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBDU1NfVkFM
X0FVVE8pOwotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lO
X1JJR0hULCAiMCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsIENTU19WQUxfQVVUTyk7Ci0gICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENTU19WQUxfQVVU
Tyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIp
IHsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IHYgPSBhdHRyLT52YWx1ZSgpLmltcGwo
KS0+dG9JbnQoJm9rKTsKLSAgICAgICAgaWYob2sgJiYgIXYpCi0gICAgICAgICAgICBhZGRDU1NM
ZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsICIxIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sb3JBdHRyKSB7Ci0gICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19WQUxfU09MSUQp
OwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZ
TEUsIENTU19WQUxfU09MSUQpOwotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwot
ICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CT1JERVJfQ09MT1IsIGF0dHItPnZh
bHVlKCkpOwotICAgICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0NP
TE9SLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBub3No
YWRlQXR0cikgewotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJf
VE9QX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NTX1ZBTF9T
T0xJRCk7Ci0gICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9MRUZU
X1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKLSAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BS
T1BfQk9SREVSX0NPTE9SLCBTdHJpbmcoImdyZXkiKSk7Ci0gICAgICAgIGFkZENTU0NvbG9yKGF0
dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIFN0cmluZygiZ3JleSIpKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikgewotICAgICAgICBTdHJpbmdJbXBsKiBz
aSA9IGF0dHItPnZhbHVlKCkuaW1wbCgpOwotICAgICAgICBpbnQgc2l6ZSA9IHNpLT50b0ludCgp
OwotICAgICAgICBpZiAoc2l6ZSA8PSAxKQotICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgU3RyaW5nKCIwIikpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBTdHJp
bmc6Om51bWJlcihzaXplLTIpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVudDo6YWxp
Z24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQot
dm9pZCBIVE1MSFJFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1MSFJFbGVtZW50
Ojpub1NoYWRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShub3NoYWRlQXR0
cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0Tm9TaGFkZShib29sIG5v
U2hhZGUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5vc2hhZGVBdHRyLCBub1NoYWRlID8gIiIgOiAw
KTsKLX0KLQotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OnNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoc2l6ZUF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldFNp
emUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6
c2V0V2lkdGgoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhB
dHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEhlYWRpbmdFbGVt
ZW50OjpIVE1MSGVhZGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotYm9v
bCBIVE1MSGVhZGluZ0VsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQotewot
ICAgIGlmIChuZXdDaGlsZC0+aGFzVGFnTmFtZShoMVRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoaDJUYWcpIHx8Ci0gICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGgzVGFnKSB8fCBuZXdD
aGlsZC0+aGFzVGFnTmFtZShoNFRhZykgfHwKLSAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
aDVUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKGg2VGFnKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7Ci19Ci0KLVN0cmlu
ZyBIVE1MSGVhZGluZ0VsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEhlYWRpbmdFbGVtZW50OjpzZXRBbGln
bihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZh
bHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MUGFyYWdyYXBoRWxlbWVudDo6
SFRNTFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KHBU
YWcsIGRvYykKLXsKLX0KLQotYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6Y2hlY2tEVEQoY29u
c3QgTm9kZSogbmV3Q2hpbGQpCi17Ci0gICAgcmV0dXJuIGluSW5saW5lVGFnTGlzdChuZXdDaGls
ZCkgfHwgKGRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1l
KHRhYmxlVGFnKSk7Ci19Ci0KLWJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnQ6Om1hcFRvRW50cnko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF0dHJOYW1lID09IGFsaWduQXR0cikgewotICAgICAgICBy
ZXN1bHQgPSBlQmxvY2s7IC8vIFdlIGNhbiBzaGFyZSB3aXRoIERJViBoZXJlLgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6bWFwVG9FbnRyeShh
dHRyTmFtZSwgcmVzdWx0KTsKLX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQotewotICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIFN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJtaWRkbGUiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiY2VudGVyIikpCi0gICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJL
SVRfQ0VOVEVSKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgImxlZnQiKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X1RFWFRfQUxJR04sIENTU19WQUxfX1dFQktJVF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCi0gICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19XRUJLSVRfUklH
SFQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9URVhUX0FMSUdOLCB2KTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotfQotCi1TdHJpbmcgSFRNTFBhcmFncmFwaEVsZW1l
bnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQotewotfQotCi1ib29sIEhUTUxQcmVFbGVtZW50OjptYXBUb0VudHJ5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0
KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwgYXR0ck5hbWUgPT0g
d3JhcEF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVByZTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1hcFRvRW50cnkoYXR0ck5hbWUsIHJl
c3VsdCk7Ci19Ci0KLXZvaWQgSFRNTFByZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0
cikgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgc29tZSBkYXkuICBXaWR0aCBv
biBhIDxwcmU+IGlzIHRoZSAjIG9mIGNoYXJhY3RlcnMgdGhhdAotICAgICAgICAvLyB3ZSBzaG91
bGQgc2l6ZSB0aGUgcHJlIHRvLiAgV2UgYmFzaWNhbGx5IG5lZWQgdG8gdGFrZSB0aGUgd2lkdGgg
b2YgYSBzcGFjZSwKLSAgICAgICAgLy8gbXVsdGlwbHkgYnkgdGhlIHZhbHVlIG9mIHRoZSBhdHRy
aWJ1dGUgYW5kIHRoZW4gc2V0IHRoYXQgYXMgdGhlIHdpZHRoIENTUwotICAgICAgICAvLyBwcm9w
ZXJ0eS4KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3cmFwQXR0cikgewotICAgICAg
ICBpZiAoIWF0dHItPnZhbHVlKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9XSElURV9TUEFDRSwgQ1NTX1ZBTF9QUkVfV1JBUCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7Ci19Ci0KLWludCBIVE1MUHJlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxQcmVFbGVt
ZW50OjpzZXRXaWR0aChpbnQgd2lkdGgpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwg
U3RyaW5nOjpudW1iZXIod2lkdGgpKTsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVudDo6d3JhcCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUod3JhcEF0dHIpLmlzTnVsbCgpOwot
fQotCi12b2lkIEhUTUxQcmVFbGVtZW50OjpzZXRXcmFwKGJvb2wgd3JhcCkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUod3JhcEF0dHIsIHdyYXAgPyAiIiA6IDApOwotfQotICAgIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gLy8gV2luSUUgdXNlcyA2MG1zIGFzIHRoZSBtaW5pbXVtIGRlbGF5IGJ5IGRl
ZmF1bHQuCi1jb25zdCBpbnQgZGVmYXVsdE1pbmltdW1EZWxheSA9IDYwOwotCi1IVE1MTWFycXVl
ZUVsZW1lbnQ6OkhUTUxNYXJxdWVlRWxlbWVudChEb2N1bWVudCAqZG9jKQotOiBIVE1MRWxlbWVu
dChtYXJxdWVlVGFnLCBkb2MpLAotICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5
KQotewotfQotCi1ib29sIEhUTUxNYXJxdWVlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QK
LXsKLSAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09
IGhlaWdodEF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gYmdjb2xvckF0dHIgfHwKLSAgICAg
ICAgYXR0ck5hbWUgPT0gdnNwYWNlQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoc3BhY2VB
dHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHNjcm9sbGFtb3VudEF0dHIgfHwKLSAgICAgICAg
YXR0ck5hbWUgPT0gc2Nyb2xsZGVsYXlBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGxvb3BB
dHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IGJlaGF2aW9yQXR0ciB8fAotICAgICAgICBhdHRy
TmFtZSA9PSBkaXJlY3Rpb25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Om1h
cFRvRW50cnkoYXR0ck5hbWUsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCi17Ci0gICAgaWYg
KGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURU
SCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGVpZ2h0
QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmdjb2xvckF0dHIpIHsKLSAgICAgICAgaWYg
KCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIs
IENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHZzcGFjZUF0dHIpIHsKLSAgICAgICAgaWYgKCFhdHRyLT52YWx1
ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9Q
X01BUkdJTl9UT1AsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0
dHIsIENTU19QUk9QX01BUkdJTl9CT1RUT00sIGF0dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHNwYWNlQXR0cikgewotICAgICAgICBpZiAo
IWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0
ciwgQ1NTX1BST1BfTUFSR0lOX0xFRlQsIGF0dHItPnZhbHVlKCkpOwotICAgICAgICAgICAgYWRk
Q1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzY3JvbGxhbW91bnRBdHRy
KSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX0lOQ1JFTUVOVCwgYXR0
ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2Nyb2xsZGVsYXlB
dHRyKSB7Ci0gICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX1dFQktJVF9NQVJRVUVFX1NQRUVELCBhdHRy
LT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBsb29wQXR0cikgewot
ICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAo
YXR0ci0+dmFsdWUoKSA9PSAiLTEiIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCks
ICJpbmZpbml0ZSIpKQotICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX19XRUJLSVRfTUFSUVVFRV9SRVBFVElUSU9OLCBDU1NfVkFMX0lORklOSVRFKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1Bf
X1dFQktJVF9NQVJRVUVFX1JFUEVUSVRJT04sIGF0dHItPnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmVoYXZpb3JBdHRyKSB7Ci0gICAgICAgIGlm
ICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9fV0VCS0lUX01BUlFVRUVfU1RZTEUsIGF0dHItPnZhbHVlKCkpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpcmVjdGlvbkF0dHIpIHsKLSAgICAgICAgaWYg
KCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX19XRUJLSVRfTUFSUVVFRV9ESVJFQ1RJT04sIGF0dHItPnZhbHVlKCkpOwot
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRydWVzcGVlZEF0dHIpIHsKLSAgICAgICAg
bV9taW5pbXVtRGVsYXkgPSAhYXR0ci0+aXNOdWxsKCkgPyAwIDogZGVmYXVsdE1pbmltdW1EZWxh
eTsKLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwotfQotCiB9CkluZGV4OiBodG1sL0hUTUxQcmVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MUHJlRWxlbWVudC5oCShyZXZpc2lvbiAxNDM4MikKKysrIGh0bWwvSFRNTFBy
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEzICsyMSwxMyBAQAogICoKICAqLwog
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWZuZGVmIEhUTUxfQkxPQ0tJTVBMX0gKLSNkZWZpbmUg
SFRNTF9CTE9DS0lNUExfSAorI2lmbmRlZiBIVE1MUHJlRWxlbWVudF9ICisjZGVmaW5lIEhUTUxQ
cmVFbGVtZW50X0gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhU
TUxCbG9ja3F1b3RlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAg
IEhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MQmxvY2txdW90ZUVs
ZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgU3RyaW5nIGNpdGUoKSBj
b25zdDsKLSAgICB2b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRNTERpdkVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2RWxlbWVudChEb2N1bWVudCop
OwotICAgIH5IVE1MRGl2RWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9
Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAg
Ci0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotY2xhc3MgSFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGlj
OgotICAgIEhUTUxIUkVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTEhSRWxlbWVudCgpOwot
ICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
LQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBib29sIG5vU2hhZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5vU2hhZGUo
Ym9vbCk7Ci0KLSAgICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lk
dGgoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhU
TUxIZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgotICAgIEhU
TUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiA1OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5l
d0NoaWxkKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24o
Y29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxQ
YXJhZ3JhcGhFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRN
TFBhcmFncmFwaEVsZW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9
Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9Ci0gICAg
dmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0
QWxpZ24oY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNsYXNz
IEhUTUxQcmVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50CiB7CiBwdWJsaWM6CkBAIC0xNDYs
MjQgKzQ2LDUgQEAKICAgICB2b2lkIHNldFdyYXAoYm9vbCBiKTsKIH07CiAKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTE1hcnF1ZWVFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgCi0g
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIGludCBt
aW5pbXVtRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1EZWxheTsgfQotICAgIAotcHJp
dmF0ZToKLSAgICBpbnQgbV9taW5pbXVtRGVsYXk7Ci19OwotCiB9OyAvL25hbWVzcGFjZQogI2Vu
ZGlmCkluZGV4OiBodG1sL0hUTUxIZWFkaW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTEhlYWRpbmdFbGVtZW50LmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9IVE1MSGVhZGlu
Z0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNzkgKzIyLDEzIEBACiAgKi8KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotI2lmbmRlZiBIVE1MX0JMT0NLSU1QTF9ICi0jZGVmaW5lIEhUTUxf
QkxPQ0tJTVBMX0gKKyNpZm5kZWYgSFRNTEhlYWRpbmdFbGVtZW50X0gKKyNkZWZpbmUgSFRNTEhl
YWRpbmdFbGVtZW50X0gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNz
IEhUTUxCbG9ja3F1b3RlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVibGljOgot
ICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MQmxvY2txdW90
ZUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAgCi0gICAgU3RyaW5nIGNpdGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWNsYXNzIFN0cmluZzsKLQotY2xhc3MgSFRNTERpdkVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MRGl2RWxlbWVudChEb2N1bWVu
dCopOwotICAgIH5IVE1MRGl2RWxlbWVudCgpOwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0g
ICAgCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotY2xhc3MgSFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAotewotcHVi
bGljOgotICAgIEhUTUxIUkVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICB+SFRNTEhSRWxlbWVudCgp
OwotICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
KTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBib29sIG5vU2hhZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5vU2hh
ZGUoYm9vbCk7Ci0KLSAgICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
V2lkdGgoY29uc3QgU3RyaW5nJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIGNsYXNz
IEhUTUxIZWFkaW5nRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgpAQCAt
MTA4LDYyICs0Miw1IEBACiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKIH07CiAK
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudChEb2N1
bWVudCopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAg
U3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsK
LX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFByZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUHJlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICBib29s
IG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5Jikg
Y29uc3Q7Ci0gICAgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
LQotICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoaW50IHcpOwotICAg
IAotICAgIGJvb2wgd3JhcCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V3JhcChib29sIGIpOwotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWFycXVlZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTWFycXVlZUVsZW1lbnQoRG9jdW1l
bnQqKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQotCi0gICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwotCi0gICAgaW50IG1pbmltdW1EZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bURlbGF5
OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIGludCBtX21pbmltdW1EZWxheTsKLX07Ci0KIH07IC8v
bmFtZXNwYWNlCiAjZW5kaWYKSW5kZXg6IGh0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL2h0bWxfYmxvY2tpbXBsLmgJKHJldmlzaW9uIDE0MzgyKQorKysgaHRtbC9odG1s
X2Jsb2NraW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0jaWZuZGVmIEhUTUxfQkxPQ0tJTVBMX0gKLSNkZWZpbmUgSFRNTF9CTE9DS0lN
UExfSAotCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBTdHJpbmc7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50KERvY3VtZW50Kik7Ci0gICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudCgp
OwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLSAgICAKLSAgICBTdHJpbmcgY2l0ZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotY2xhc3MgU3RyaW5nOwotCi1jbGFzcyBIVE1MRGl2RWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotewotcHVibGljOgotICAgIEhUTUxEaXZFbGVtZW50KERvY3VtZW50Kik7Ci0gICAg
fkhUTUxEaXZFbGVtZW50KCk7Ci0gICAgCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLSAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmli
dXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lk
IHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
bGFzcyBIVE1MSFJFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAg
SFRNTEhSRWxlbWVudChEb2N1bWVudCopOwotICAgIH5IVE1MSFJFbGVtZW50KCk7Ci0gICAgCi0g
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiAwOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAg
U3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsK
LQotICAgIGJvb2wgbm9TaGFkZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Tm9TaGFkZShib29sKTsK
LQotICAgIFN0cmluZyBzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChjb25z
dCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTEhlYWRp
bmdFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTEhlYWRp
bmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotCi0gICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
OwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBT
dHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBhcmFncmFw
aEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUGFyYWdy
YXBoRWxlbWVudChEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5Jikg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihj
b25zdCBTdHJpbmcmKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTFBy
ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MUHJlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1
OyB9Ci0KLSAgICBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKLQotICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lk
dGgoaW50IHcpOwotICAgIAotICAgIGJvb2wgd3JhcCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V3Jh
cChib29sIGIpOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTWFycXVl
ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKLXB1YmxpYzoKLSAgICBIVE1MTWFycXVl
ZUVsZW1lbnQoRG9jdW1lbnQqKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQotCi0gICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwotCi0gICAgaW50IG1pbmltdW1EZWxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWluaW11bURlbGF5OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIGludCBtX21pbmltdW1EZWxh
eTsKLX07Ci0KLX07IC8vbmFtZXNwYWNlCi0jZW5kaWYKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMTQzODIpCisrKyByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAiaHRt
bF9ibG9ja2ltcGwuaCIKKyNpbmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckNhbnZhcy5oIgpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQz
ODkpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQyMCw3ICs0MjAsNiBAQAogCQk5M0VFQzIwNDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFz
UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFRUMxRjIwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uaCAqLzsgfTsKIAkJOTNF
RUMyNkYwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQx
IC8qIENhbnZhc1BhdHRlcm4uY3BwICovOyB9OwogCQk5M0VFQzI3MTA5QzMyMTg4MDBDNTE1RDEg
LyogQ2FudmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFRUMyNzAwOUMzMjE4ODAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmNwcCAqLzsg
fTsKLQkJOTNGMTk4RTQwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tpbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQTAyREU0Mzk2
MDE4NjM1Q0EgLyogaHRtbF9ibG9ja2ltcGwuaCAqLzsgfTsKIAkJOTNGMTk4RTUwODI0NUU1OTAw
MUU5QUJDIC8qIEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QyM0MwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5o
ICovOyB9OwogCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNGMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5oICovOyB9OwogCQk5M0YxOThFOTA4MjQ1RTU5MDAx
RTlBQkMgLyogaHRtbF9pbWFnZWltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ1MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2ltYWdlaW1w
bC5oICovOyB9OwpAQCAtNTEyLDcgKzUxMSw2IEBACiAJCTkzRjE5QTU2MDgyNDVFNTkwMDFFOUFC
QyAvKiBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUzQzAyREUzNzU5MDFFQTQxMjIgLyogRGVwcmVj
YXRlZFZhbHVlTGlzdEltcGwuY3BwICovOyB9OwogCQk5M0YxOUE1RDA4MjQ1RTU5MDAxRTlBQkMg
LyogV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0RjAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29y
ZUltYWdlUmVuZGVyZXJGYWN0b3J5Lm0gKi87IH07CiAJCTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFC
QyAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0Zh
Y3RvcnkubSAqLzsgfTsKLQkJOTNGMTlBOTAwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tp
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
MjNEMjM5MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2Jsb2NraW1wbC5jcHAgKi87IH07CiAJCTkz
RjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0IwMkRFNDM5NjAxODYzNUNB
IC8qIEhUTUxEb2N1bWVudC5jcHAgKi87IH07CiAJCTkzRjE5QTkyMDgyNDVFNTkwMDFFOUFCQyAv
KiBIVE1MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovOyB9
OwogCQk5M0YxOUE5NTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbWFnZWltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDQwMkRFNDM5
NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCAqLzsgfTsKQEAgLTExMzYsNiArMTEzNCwy
MCBAQAogCQlBOEVBN0E1MTBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0E0QjBB
MTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5jcHAgKi87IH07CiAJCUE4RUE3QTUy
MEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdBNEMwQTE5MUE1MjAwQThFRjVGIC8qIFJl
bmRlckxpc3RJdGVtLmggKi87IH07CiAJCUE4RUE3QTUzMEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0
TWFya2VyQm94LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4RUE3QTREMEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0TWFya2VyQm94LmNwcCAqLzsgfTsK
KwkJQThFQTdDQUIwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdDOUQwQTE5MkI5
QzAwQThFRjVGIC8qIEhUTUxNYXJxdWVlRWxlbWVudC5oICovOyB9OworCQlBOEVBN0NBQzBBMTky
QjlDMDBBOEVGNUYgLyogSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3QzlFMEExOTJCOUMwMEE4RUY1RiAvKiBI
VE1MTWFycXVlZUVsZW1lbnQuY3BwICovOyB9OworCQlBOEVBN0NBRDBBMTkyQjlDMDBBOEVGNUYg
LyogSFRNTFByZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThFQTdDOUYwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQcmVFbGVtZW50LmNw
cCAqLzsgfTsKKwkJQThFQTdDQUUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxIZWFkaW5nRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVB
N0NBMDBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhlYWRpbmdFbGVtZW50LmNwcCAqLzsgfTsKKwkJ
QThFQTdDQUYwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RUE3Q0ExMEExOTJCOUMwMEE4RUY1
RiAvKiBIVE1MSFJFbGVtZW50LmggKi87IH07CisJCUE4RUE3Q0IwMEExOTJCOUMwMEE4RUY1RiAv
KiBIVE1MUHJlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThFQTdDQTIwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQcmVFbGVtZW50LmggKi87
IH07CisJCUE4RUE3Q0IxMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEVBN0NBMzBBMTky
QjlDMDBBOEVGNUYgLyogSFRNTERpdkVsZW1lbnQuY3BwICovOyB9OworCQlBOEVBN0NCMjBBMTky
QjlDMDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdDQTQwQTE5MkI5QzAwQThFRjVGIC8q
IEhUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcCAqLzsgfTsKKwkJQThFQTdDQjMwQTE5MkI5QzAwQThF
RjVGIC8qIEhUTUxIUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThFQTdDQTUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxIUkVsZW1lbnQu
Y3BwICovOyB9OworCQlBOEVBN0NCNDBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEVBN0NBNjBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVFbGVtZW50LmggKi87IH07
CisJCUE4RUE3Q0I1MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUGFyYWdyYXBoRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdDQTcwQTE5
MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhFbGVtZW50LmggKi87IH07CisJCUE4RUE3Q0I2
MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdDQTgwQTE5MkI5QzAwQThF
RjVGIC8qIEhUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAgKi87IH07CisJCUE4RUE3Q0I3MEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThFQTdDQTkwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZF
bGVtZW50LmggKi87IH07CisJCUE4RUE3Q0I4MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MSGVhZGlu
Z0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4RUE3Q0FBMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MSGVhZGluZ0VsZW1lbnQuaCAqLzsgfTsK
IAkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBOEMwODc5RUM2NDAwNkE5
MTcyIC8qIEtXUVdNYXRyaXguY3BwICovOyB9OwogCQlBOEZEOEI4NzA4N0NCNDU3MDBEQzM3MDcg
LyogS1dRV01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXguaCAqLzsgfTsKIAkJ
QThGRUZCMEEwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkVGQjA4MDk3OUY0NzIw
MDU4MzlGRCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggKi87IH07CkBAIC0yNTg3LDYgKzI1OTks
MjAgQEAKIAkJQThFQTdBNEIwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RNYXJrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxpc3RNYXJrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEVBN0E0QzBBMTkxQTUyMDBBOEVG
NUYgLyogUmVuZGVyTGlzdEl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlckxpc3RJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RUE3QTRE
MEExOTFBNTIwMEE4RUY1RiAvKiBMaXN0TWFya2VyQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMaXN0TWFya2VyQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThFQTdDOUQwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxNYXJxdWVlRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1hcnF1ZWVFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3QzlFMEExOTJCOUMwMEE4RUY1
RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxNYXJxdWVlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE4RUE3QzlGMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUHJlRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFByZUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0NBMDBBMTkyQjlDMDBBOEVGNUYgLyog
SFRNTEhlYWRpbmdFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MSGVhZGluZ0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBOEVBN0NBMTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhSRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEhSRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBOEVBN0NBMjBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFByZUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQcmVFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3Q0EzMEExOTJCOUMwMEE4RUY1RiAvKiBI
VE1MRGl2RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRNTERpdkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0NB
NDBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTdDQTUwQTE5MkI5QzAwQThFRjVGIC8qIEhU
TUxIUkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxIUkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0NBNjBB
MTkyQjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQmxvY2txdW90ZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQThFQTdDQTcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3Jh
cGhFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFyYWdy
YXBoRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0NBODBBMTky
QjlDMDBBOEVGNUYgLyogSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBOEVBN0NBOTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERp
dkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEaXZFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RUE3Q0FBMEExOTJCOUMwMEE4
RUY1RiAvKiBIVE1MSGVhZGluZ0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhUTUxIZWFkaW5nRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEZFRkIwODA5NzlGNDcyMDA1ODM5RkQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRm9yZWlnbk9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEZFRkIwOTA5NzlGNDcyMDA1ODM5RkQgLyogUmVu
ZGVyRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4RkVGQjJGMDk3OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc5MCw4ICsyODE2LDYg
QEAKIAkJRTFGMDQyNDUwOTgzOTM4OTAwNjY5NEVBIC8qIHhtbGh0dHByZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHhtbGh0dHByZXF1ZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUVEMDQ4QUJCMDgzM0YxMzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJl
c2l6ZUNvcm5lci50aWZmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9IHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmY7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVEMkJBODNCMDlBMjRCOTEwMDZDMEFDNCAvKiBE
b2N1bWVudE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVu
dE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNTIzRDIzOTAyREU0Mzk2
MDE4NjM1Q0EgLyogaHRtbF9ibG9ja2ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaHRtbF9ibG9ja2ltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0Qy
M0EwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfYmxvY2tpbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfYmxvY2tpbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIz
RDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxEb2N1bWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEb2N1bWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjUyM0QyM0UwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0zNDE1LDggKzM0MzksNiBAQAogCQkJCTkzRUVDMUVGMDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNTdHlsZS5oICovLAogCQkJCUE4MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0
YUxpc3QuY3BwICovLAogCQkJCUE4MTM2RDM2MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxp
c3QuaCAqLywKLQkJCQlGNTIzRDIzOTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9ibG9ja2ltcGwu
Y3BwICovLAotCQkJCUY1MjNEMjNBMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2Jsb2NraW1wbC5o
ICovLAogCQkJCUY1MjNEMjQ0MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2ltYWdlaW1wbC5jcHAg
Ki8sCiAJCQkJRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmggKi8s
CiAJCQkJQThDRkY3OUEwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JFbGVtZW50LmNwcCAq
LywKQEAgLTM0MjcsNiArMzQ0OSw4IEBACiAJCQkJQTg3MURDMTMwQTE1MjA1NzAwQjEyQTY4IC8q
IEhUTUxCYXNlRWxlbWVudC5oICovLAogCQkJCUE4REYzRkNCMDk3RkEwRkIwMDUyOTgxQiAvKiBI
VE1MQmFzZUZvbnRFbGVtZW50LmNwcCAqLywKIAkJCQlBOERGM0ZDQTA5N0ZBMEZCMDA1Mjk4MUIg
LyogSFRNTEJhc2VGb250RWxlbWVudC5oICovLAorCQkJCUE4RUE3Q0E4MEExOTJCOUMwMEE4RUY1
RiAvKiBIVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3Q0E2MEExOTJCOUMw
MEE4RUY1RiAvKiBIVE1MQmxvY2txdW90ZUVsZW1lbnQuaCAqLywKIAkJCQlBODcxREUxRDBBMTUy
QUM4MDBCMTJBNjggLyogSFRNTEJvZHlFbGVtZW50LmNwcCAqLywKIAkJCQlBODcxREUyMDBBMTUy
QUM4MDBCMTJBNjggLyogSFRNTEJvZHlFbGVtZW50LmggKi8sCiAJCQkJQThDRkY3OUUwQTE1Njk3
ODAwMEE0MjM0IC8qIEhUTUxCUkVsZW1lbnQuY3BwICovLApAQCAtMzQ0MCw2ICszNDY0LDggQEAK
IAkJCQlBOERGM0ZDODA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uaCAqLywKIAkJ
CQlBOEVBNzlFRDBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwICov
LAogCQkJCUE4RUE3OUVFMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5o
ICovLAorCQkJCUE4RUE3Q0EzMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5jcHAg
Ki8sCisJCQkJQThFQTdDQTkwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggKi8s
CiAJCQkJQThFQTc5RTkwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxETGlzdEVsZW1lbnQuY3BwICov
LAogCQkJCUE4RUE3OUVCMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50LmggKi8s
CiAJCQkJRjUyM0QyM0IwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5jcHAgKi8sCkBA
IC0zNDY4LDYgKzM0OTQsMTAgQEAKIAkJCQlBODEzNjlCMjA5NzM3NEY1MDBENzQ0NjMgLyogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudC5oICovLAogCQkJCUE4NzFERTE5MEExNTJBQzgwMEIxMkE2OCAv
KiBIVE1MSGVhZEVsZW1lbnQuY3BwICovLAogCQkJCUE4NzFERTIxMEExNTJBQzgwMEIxMkE2OCAv
KiBIVE1MSGVhZEVsZW1lbnQuaCAqLywKKwkJCQlBOEVBN0NBMDBBMTkyQjlDMDBBOEVGNUYgLyog
SFRNTEhlYWRpbmdFbGVtZW50LmNwcCAqLywKKwkJCQlBOEVBN0NBQTBBMTkyQjlDMDBBOEVGNUYg
LyogSFRNTEhlYWRpbmdFbGVtZW50LmggKi8sCisJCQkJQThFQTdDQTUwQTE5MkI5QzAwQThFRjVG
IC8qIEhUTUxIUkVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3Q0ExMEExOTJCOUMwMEE4RUY1RiAv
KiBIVE1MSFJFbGVtZW50LmggKi8sCiAJCQkJQTg3MURFMUEwQTE1MkFDODAwQjEyQTY4IC8qIEhU
TUxIdG1sRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MURFMUIwQTE1MkFDODAwQjEyQTY4IC8qIEhU
TUxIdG1sRWxlbWVudC5oICovLAogCQkJCUE4NzFERTE4MEExNTJBQzgwMEIxMkE2OCAvKiBIVE1M
SUZyYW1lRWxlbWVudC5jcHAgKi8sCkBAIC0zNDg2LDYgKzM1MTYsOCBAQAogCQkJCUE4RUE3OUVB
MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTElFbGVtZW50LmggKi8sCiAJCQkJQTg3MURDMTUwQTE1
MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MURDMTQwQTE1
MjA1NzAwQjEyQTY4IC8qIEhUTUxMaW5rRWxlbWVudC5oICovLAorCQkJCUE4RUE3QzlFMEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuY3BwICovLAorCQkJCUE4RUE3QzlEMEEx
OTJCOUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuaCAqLywKIAkJCQlBOEVBNzlFQzBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTE1lbnVFbGVtZW50LmNwcCAqLywKIAkJCQlBOEVBNzlFODBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTE1lbnVFbGVtZW50LmggKi8sCiAJCQkJQTg3MURDMUIwQTE1
MjA1NzAwQjEyQTY4IC8qIEhUTUxNZXRhRWxlbWVudC5jcHAgKi8sCkBAIC0zNTA2LDEyICszNTM4
LDE2IEBACiAJCQkJQTgxMzY5QzAwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxPcHRpb25FbGVtZW50
LmggKi8sCiAJCQkJOTMyN0E5NDEwOTk2OEQxQTAwNjhBNTQ2IC8qIEhUTUxPcHRpb25zQ29sbGVj
dGlvbi5jcHAgKi8sCiAJCQkJQTgxMzY5QkUwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxPcHRpb25z
Q29sbGVjdGlvbi5oICovLAorCQkJCUE4RUE3Q0E0MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUGFy
YWdyYXBoRWxlbWVudC5jcHAgKi8sCisJCQkJQThFQTdDQTcwQTE5MkI5QzAwQThFRjVGIC8qIEhU
TUxQYXJhZ3JhcGhFbGVtZW50LmggKi8sCiAJCQkJQTg3MUQ0NEYwQTEyN0NCQzAwQjEyQTY4IC8q
IEhUTUxQYXJhbUVsZW1lbnQuY3BwICovLAogCQkJCUE4NzFENDRFMEExMjdDQkMwMEIxMkE2OCAv
KiBIVE1MUGFyYW1FbGVtZW50LmggKi8sCiAJCQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8q
IEhUTUxQYXJzZXIuY3BwICovLAogCQkJCUY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1M
UGFyc2VyLmggKi8sCiAJCQkJQTg3MUQ0NEQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5F
bGVtZW50LmNwcCAqLywKIAkJCQlBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJ
bkVsZW1lbnQuaCAqLywKKwkJCQlBOEVBN0M5RjBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFByZUVs
ZW1lbnQuY3BwICovLAorCQkJCUE4RUE3Q0EyMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUHJlRWxl
bWVudC5oICovLAogCQkJCUE4Q0ZGNzlCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MUXVvdGVFbGVt
ZW50LmNwcCAqLywKIAkJCQlBOENGRjc5OTBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTFF1b3RlRWxl
bWVudC5oICovLAogCQkJCUE4NzFEQzE2MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU2NyaXB0RWxl
bWVudC5jcHAgKi8sCkBAIC00NzQ2LDcgKzQ3ODIsNiBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
Ci0JCQkJOTNGMTk4RTQwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tpbXBsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEU5MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1s
X2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDAxLDYgKzU0MzYsMTMgQEAKIAkJCQlB
OEVBN0E0RjBBMTkxQTUyMDBBOEVGNUYgLyogTGlzdE1hcmtlckJveC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThFQTdBNTAwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RNYXJrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RUE3QTUyMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRl
bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThFQTdDQUIwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxN
YXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThFQTdDQUYwQTE5MkI5QzAwQThF
RjVGIC8qIEhUTUxIUkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RUE3Q0IwMEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MUHJlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThFQTdD
QjQwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxCbG9ja3F1b3RlRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQThFQTdDQjUwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxQYXJhZ3JhcGhFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOEVBN0NCNzBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTERp
dkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4RUE3Q0I4MEExOTJCOUMwMEE4RUY1RiAv
KiBIVE1MSGVhZGluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTYxMSw3ICs1NjUzLDYg
QEAKIAkJCQk5M0YxOUE1NjA4MjQ1RTU5MDAxRTlBQkMgLyogRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBNUQwODI0NUU1OTAwMUU5QUJDIC8qIFdl
YkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBNUYw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tIGluIFNvdXJjZXMgKi8sCi0J
CQkJOTNGMTlBOTAwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tpbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTk1MDgyNDVFNTkwMDFFOUFCQyAvKiBo
dG1sX2ltYWdlaW1wbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTYxOTYsNiArNjIzNywxMyBAQAog
CQkJCUE4RUE3QTRFMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEVBN0E1MTBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBN0E1MzBBMTkxQTUyMDBBOEVGNUYgLyogTGlz
dE1hcmtlckJveC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBN0NBQzBBMTkyQjlDMDBBOEVG
NUYgLyogSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4RUE3Q0FE
MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUHJlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBOEVBN0NBRTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTEhlYWRpbmdFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUE4RUE3Q0IxMEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEVBN0NCMjBBMTkyQjlDMDBBOEVGNUYgLyogSFRN
TFBhcmFncmFwaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThFQTdDQjMwQTE5MkI5
QzAwQThFRjVGIC8qIEhUTUxIUkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThFQTdD
QjYwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9u
IDE0Mzg5KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNDQgQEAKIDIw
MDYtMDUtMTUgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CiAKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgaHRtbF9ibG9ja2ltcGwu
KiBpbnRvIHNlcGFyYXRlIGZpbGVzIChvbmUgcGVyIGNsYXNzKS4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tOgorICAgICAgICAq
IGh0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1b3RlRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9I
VE1MRGl2RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTERpdkVsZW1lbnQu
aDogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwOgorICAgICAg
ICAqIGh0bWwvSFRNTEhSRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEhS
RWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxIZWFkaW5nRWxlbWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEhlYWRpbmdFbGVtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OkhUTUxNYXJxdWVlRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hU
TUxQYXJhZ3JhcGhFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MUGFyYWdy
YXBoRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAg
ICAgICAqIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UHJlRWxlbWVudDo6c2V0V3JhcCk6CisgICAgICAgICogaHRtbC9IVE1MUHJlRWxlbWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxUZXh0RmllbGRJbm5lckVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL2h0bWxfYmxvY2tpbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2h0
bWxfYmxvY2tpbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKworMjAwNi0wNS0xNSAgRXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KKwog
ICAgICAgICBSZXZpZXdlZCBieSBnZ2FyZW4uCiAKICAgICAgICAgU3BsaXQgcmVuZGVyX2xpc3Qu
KiBhbmQgaHRtbF9saXN0aW1wbC4qIGludG8gc2VwYXJhdGUgZmlsZXMgKG9uZSBwZXIgY2xhc3Mp
LgorICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lk
PTg5MjUKIAogICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKICAg
ICAgICAgKiBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHA6CkluZGV4OiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDE0Mzg5KQorKysgV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzIyOCwxMSArMzIyOCw1OSBA
QAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwu
LlxodG1sXGh0bWxfYmxvY2tpbXBsLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1s
XEhUTUxIUkVsZW1lbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxodG1sX2Jsb2NraW1wbC5oIg0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTEhSRWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MTWFycXVlZUVsZW1l
bnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caHRtbFxIVE1MTWFycXVlZUVsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTEJsb2NrcXVvdGVF
bGVtZW50LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTEJsb2NrcXVvdGVFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxodG1sXEhUTUxQcmVF
bGVtZW50LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTFByZUVsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caHRtbFxIVE1MUGFyYWdyYXBoRWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MSGVhZGlu
Z0VsZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5caHRtbFxIVE1MSGVhZGluZ0VsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGh0bWxcSFRNTERpdkVs
ZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caHRtbFxIVE1MRGl2RWxlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQo=
</data>
<flag name="review"
          id="2346"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>