<?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>101313</bug_id>
          
          <creation_ts>2012-11-05 23:53:52 -0800</creation_ts>
          <short_desc>Indentation of JSObject.h is wrong</short_desc>
          <delta_ts>2012-11-06 11:19:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>759317</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-05 23:53:52 -0800</bug_when>
    <thetext>We don&apos;t indent inside namespaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759319</commentid>
    <comment_count>1</comment_count>
      <attachid>172495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-05 23:57:17 -0800</bug_when>
    <thetext>Created attachment 172495
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759324</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 00:02:43 -0800</bug_when>
    <thetext>Attachment 172495 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:80:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:81:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:82:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:83:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:84:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:542:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:777:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759806</commentid>
    <comment_count>3</comment_count>
      <attachid>172495</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-06 10:08:41 -0800</bug_when>
    <thetext>Comment on attachment 172495
the patch

rs=me, assuming that this was a single Cmd+[ (or equivalent).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759899</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-06 11:15:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 172495 [details])
&gt; rs=me, assuming that this was a single Cmd+[ (or equivalent).

Indeed it was.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759904</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-06 11:19:53 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/133649</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172495</attachid>
            <date>2012-11-05 23:57:17 -0800</date>
            <delta_ts>2012-11-06 10:08:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>indent.patch</filename>
            <type>text/plain</type>
            <size>68420</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzNTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTExLTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5kZW50YXRpb24gb2YgSlNPYmplY3QuaCBpcyB3cm9uZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSnVzdCB1bmluZGVudGVkIGNvZGUsIHNpbmNlIG5h
bWVzcGFjZSBib2RpZXMgc2hvdWxkbid0IGJlIGluZGVudGVkLgorCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorCiAyMDEyLTExLTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgREZHIHNob3VsZCBub3QgZmFsbCBkb3duIHRvIHBhdGNoYWJsZSBHZXRC
eUlkIGp1c3QgYmVjYXVzZSBhIHByb3RvdHlwZSBoYWQgdGhpbmdzIGFkZGVkIHRvIGl0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEzMzU2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDg0MSArNDQsODQxIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgaW5s
aW5lIEpTQ2VsbCogZ2V0SlNGdW5jdGlvbihKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpICYmICh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkudHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5hc0NlbGwoKTsKK2lubGluZSBKU0NlbGwqIGdldEpTRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkgJiYgKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpKQorICAgICAgICByZXR1cm4g
dmFsdWUuYXNDZWxsKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTX0VYUE9SVF9QUklWQVRFIEpT
Q2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCopOworCitpbmxpbmUgSlNDZWxsKiBn
ZXRDYWxsYWJsZU9iamVjdChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNDZWxs
KCkpCiAgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3co
dmFsdWUuYXNDZWxsKCkpOworfQorCitjbGFzcyBHZXR0ZXJTZXR0ZXI7CitjbGFzcyBIYXNoRW50
cnk7CitjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OworY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CitjbGFzcyBQ
cm9wZXJ0eU5hbWVBcnJheTsKK2NsYXNzIFN0cnVjdHVyZTsKK3N0cnVjdCBIYXNoVGFibGU7CisK
K0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKK2V4dGVybiBKU19FWFBPUlREQVRBIGNvbnN0IGNoYXIqIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcjsKKworLy8gRUNNQSAyNjItMyA4LjYuMQorLy8g
UHJvcGVydHkgYXR0cmlidXRlcworZW51bSBBdHRyaWJ1dGUgeworICAgIE5vbmUgICAgICAgICA9
IDAsCisgICAgUmVhZE9ubHkgICAgID0gMSA8PCAxLCAgLy8gcHJvcGVydHkgY2FuIGJlIG9ubHkg
cmVhZCwgbm90IHdyaXR0ZW4KKyAgICBEb250RW51bSAgICAgPSAxIDw8IDIsICAvLyBwcm9wZXJ0
eSBkb2Vzbid0IGFwcGVhciBpbiAoZm9yIC4uIGluIC4uKQorICAgIERvbnREZWxldGUgICA9IDEg
PDwgMywgIC8vIHByb3BlcnR5IGNhbid0IGJlIGRlbGV0ZWQKKyAgICBGdW5jdGlvbiAgICAgPSAx
IDw8IDQsICAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25seSB1c2VkIGJ5IHN0YXRpYyBo
YXNodGFibGVzCisgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBn
ZXR0ZXIvc2V0dGVyCit9OworCitDT01QSUxFX0FTU0VSVChOb25lIDwgRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSwgTm9uZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKK0NPTVBJTEVf
QVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CitDT01QSUxFX0FTU0VSVChEb250RW51bSA8IEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUpOworQ09NUElMRV9BU1NFUlQoRG9udERlbGV0ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CitDT01QSUxF
X0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2Jl
bG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworQ09NUElMRV9BU1NFUlQoQWNjZXNzb3IgPCBG
aXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0
cmlidXRlKTsKKworY2xhc3MgSlNGaW5hbE9iamVjdDsKKworY2xhc3MgSlNPYmplY3QgOiBwdWJs
aWMgSlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXI7
CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgSlNDZWxsOworICAgIGZy
aWVuZCBjbGFzcyBKU0ZpbmFsT2JqZWN0OworICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBmcmllbmQgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xv
dChFeGVjU3RhdGUqLCBjb25zdCBIYXNoRW50cnkqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisKKyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBQdXRNb2RlUHV0
LAorICAgICAgICBQdXRNb2RlRGVmaW5lT3duUHJvcGVydHksCisgICAgfTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgICAgIAorICAgIHN0YXRpYyBzaXplX3QgYWxs
b2NhdGlvblNpemUoc2l6ZV90IGlubGluZUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHNpemVvZihKU09iamVjdCkgKyBpbmxpbmVDYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KTsKICAgICB9CisgICAgICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlW
aXNpdG9yJik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU0NlbGwqIGdldENhbGxhYmxlT2Jq
ZWN0U2xvdyhKU0NlbGwqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopOwogCi0gICAgaW5saW5lIEpTQ2VsbCogZ2V0Q2FsbGFi
bGVPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUgcHJvdG90eXBlKTsK
KyAgICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYsIEpTVmFs
dWUgcHJvdG90eXBlKTsKKyAgICAgICAgCisgICAgU3RydWN0dXJlKiBpbmhlcml0b3JJRChKU0ds
b2JhbERhdGEmKTsKKyAgICB2b2lkIG5vdGlmeVVzZWRBc1Byb3RvdHlwZShKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgCisgICAgYm9vbCBtYXlCZVVzZWRBc1Byb3RvdHlwZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3codmFs
dWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUoKS0+
Z2V0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSkpOworICAgIH0KKyAg
ICAgICAgCisgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKTsK
ICAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lKSBjb25zdDsKIAotICAgIGNsYXNzIEdldHRlclNldHRlcjsKLSAgICBjbGFzcyBIYXNoRW50
cnk7Ci0gICAgY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKLSAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7Ci0gICAgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgY2xhc3MgUHJvcGVydHlEZXNj
cmlwdG9yOwotICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwotICAgIGNsYXNzIFN0cnVjdHVy
ZTsKLSAgICBzdHJ1Y3QgSGFzaFRhYmxlOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotICAgIGV4dGVy
biBKU19FWFBPUlREQVRBIGNvbnN0IGNoYXIqIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcjsKLQotICAgIC8vIEVDTUEgMjYyLTMgOC42LjEKLSAgICAvLyBQcm9wZXJ0eSBhdHRy
aWJ1dGVzCi0gICAgZW51bSBBdHRyaWJ1dGUgewotICAgICAgICBOb25lICAgICAgICAgPSAwLAot
ICAgICAgICBSZWFkT25seSAgICAgPSAxIDw8IDEsICAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSBy
ZWFkLCBub3Qgd3JpdHRlbgotICAgICAgICBEb250RW51bSAgICAgPSAxIDw8IDIsICAvLyBwcm9w
ZXJ0eSBkb2Vzbid0IGFwcGVhciBpbiAoZm9yIC4uIGluIC4uKQotICAgICAgICBEb250RGVsZXRl
ICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCi0gICAgICAgIEZ1bmN0
aW9uICAgICA9IDEgPDwgNCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQg
Ynkgc3RhdGljIGhhc2h0YWJsZXMKLSAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8g
cHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCi0gICAgfTsKKyAgICBib29sIGdldFByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wg
Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRQcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAotICAg
IENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2Jl
bG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5
IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFs
QXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLSAg
ICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9u
dERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLSAgICBDT01QSUxFX0FT
U0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93
X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwg
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSk7Ci0KLSAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwotCi0gICAgY2xhc3MgSlNPYmpl
Y3QgOiBwdWJsaWMgSlNDZWxsIHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEJhdGNoZWRUcmFuc2l0
aW9uT3B0aW1pemVyOwotICAgICAgICBmcmllbmQgY2xhc3MgSklUOwotICAgICAgICBmcmllbmQg
Y2xhc3MgSlNDZWxsOwotICAgICAgICBmcmllbmQgY2xhc3MgSlNGaW5hbE9iamVjdDsKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBm
cmllbmQgYm9vbCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqLCBjb25zdCBIYXNo
RW50cnkqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAg
ICAgZW51bSBQdXRNb2RlIHsKLSAgICAgICAgICAgIFB1dE1vZGVQdXQsCi0gICAgICAgICAgICBQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHksCi0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHNpemVvZihKU09iamVjdCkgKyBpbmxpbmVDYXBhY2l0eSAqIHNpemVvZihX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJik7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKLQotICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFByb3RvdHlwZShK
U0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgICAgIGJvb2wgc2V0UHJvdG90
eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAg
ICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBpbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKLSAg
ICAgICAgdm9pZCBub3RpZnlVc2VkQXNQcm90b3R5cGUoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAg
IAotICAgICAgICBib29sIG1heUJlVXNlZEFzUHJvdG90eXBlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRPZmZzZXQoc3RydWN0
dXJlKCktPmdldChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNz
ZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlKCktPm1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU1Zh
bHVlIGdldChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgICAgICBKU1ZhbHVl
IGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwotCi0gICAgICAg
IGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKLQotICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0
YXRlKik7Ci0KLSAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKworICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShF
eGVjU3RhdGUqKTsKKworICAgIHVuc2lnbmVkIGdldEFycmF5TGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQor
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQorICAgIHVuc2lnbmVk
IGdldFZlY3Rvckxlbmd0aCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQg
cHV0QnlJbmRleElubGluZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAg
c2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisgICAgdm9pZCBwdXRCeUluZGV4SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQor
ICAgIHsKKyAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZFRocm93KTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIg
dG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBj
aGFpbiBpcyBub3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNh
bGxlZC4KLSAgICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJpbGl0eSBhbmQgcmVh
ZC1vbmx5IHByb3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0IGlzIHBhc3Nl
ZCBhcyB0aGUgbW9kZSAodGhlIGRlZmF1bHQpLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVh
dGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBj
b25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVpY2tseUZvclB1dERp
cmVjdChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgLy8gVGhpcyBp
cyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CisgICAgLy8gIC0gdGhlIHByb3Rv
dHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3Qg
Y2FsbGVkLgorICAgIC8vICAtIGl0IHdpbGwgaWdub3JlIGV4dGVuc2liaWxpdHkgYW5kIHJlYWQt
b25seSBwcm9wZXJ0aWVzIGlmIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCBpcyBwYXNzZWQg
YXMgdGhlIG1vZGUgKHRoZSBkZWZhdWx0KS4KKyAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEg
cHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1
cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFh
dHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdChwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAgICB9CisgICAgYm9vbCBwdXRE
aXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgIH0K
IAotICAgICAgICAvLyBBIG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBhbmQgcHV0
RGlyZWN0SW5kZXguCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHV0RGlyZWN0TWF5
QmVJbmRleChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOworICAgIC8vIEEgbm9u
LXRocm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4KKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVy
biBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV07Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yW2ldOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
CisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXTsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAotICAgICAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgaWYgKGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBpZiAo
aSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHRy
eUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICB9CisgICAgSlNWYWx1ZSBnZXREaXJlY3RJbmRl
eChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSB0cnlHZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICAgICAgaWYgKG1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCkp
CisgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGdldERpcmVj
dEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gdHJ5R2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
KTsKLSAgICAgICAgICAgIGlmIChtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAg
fQorICAgIEpTVmFsdWUgZ2V0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gdHJ5R2V0SW5kZXhRdWlja2x5KGkpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGdldChleGVjLCBpKTsK
KyAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0
ID0gdHJ5R2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGkpOworICAgIGJvb2wgY2FuU2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpCisgICAgICAgICAgICAgICAgJiYgISFtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICB9CiAgICAgICAgIAotICAgICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNp
Z25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgotICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCi0gICAg
ICAgICAgICAgICAgICAgICYmICEhbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQor
ICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5Rm9yUHV0RGlyZWN0KHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVy
biBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAotICAgICAgICBib29sIGNhblNldEluZGV4UXVp
Y2tseUZvclB1dERpcmVjdCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgaWYgKGkgPj0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07CisgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICB4LnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIGlmICghb2xkKSB7CisgICAgICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5zZXRMZW5ndGgoaSArIDEpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsK
LSAgICAgICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
eC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsK
LSAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
fQorICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAotICAgICAgICBib29sIGhhc1NwYXJzZU1h
cCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQorICAgIGJvb2wgaGFzU3BhcnNlTWFwKCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgaW5TcGFyc2VJbmRleGlu
Z01vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KKyAgICBib29sIGluU3BhcnNlSW5kZXhpbmdNb2RlKCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgIHZvaWQg
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCi0gICAgICAgIC8v
IHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVP
d25Qcm9wZXJ0eSc6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNv
bnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAg
IC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQgKGFmdGVyIHRoZSBjYWxsIHRoZSBw
cm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMpCi0gICAgICAgIC8v
ICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4LgotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKLSAgICAgICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7Ci0gICAgICAgIHZvaWQgcHV0RGly
ZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7Ci0gICAg
ICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBib29sIHByb3BlcnR5SXNFbnVt
ZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7
Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsK
LQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKLQotICAgICAgICBib29sIGhhc0luc3RhbmNlKEV4ZWNT
dGF0ZSosIEpTVmFsdWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWZhdWx0SGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7Ci0KLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwotCi0gICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlJikgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmcqIHRv
U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwotCi0gICAgICAgIC8vIE5PVEU6IEpTT2JqZWN0IGFu
ZCBpdHMgc3ViY2xhc3NlcyBtdXN0IGJlIGFibGUgdG8gZ3JhY2VmdWxseSBoYW5kbGUgRXhlY1N0
YXRlKiA9IDAsCi0gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxsIG1heSBjb21lIGZyb20gaW5z
aWRlIHRoZSBjb21waWxlci4KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTT2Jq
ZWN0KiB0b1RoaXNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKik7Ci0KLSAgICAgICAgYm9vbCBn
ZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU0NlbGwq
JiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQotICAgICAgICAvLyBUaGlzIGdldCBmdW5jdGlv
biBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCi0gICAgICAgIEpTVmFsdWUgZ2V0RGly
ZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgY2hl
Y2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0T2Zmc2V0KG9m
ZnNldCkgOiBKU1ZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBnZXREaXJlY3RMb2NhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlKCktPnR5cGVJbmZv
KCkudHlwZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgPyBs
b2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKLSAgICAgICAgfQotCi0gICAgICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGdldERpcmVjdExvY2F0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbjsKLSAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAg
ICAgIHJldHVybiBpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgPyBsb2NhdGlvbkZvck9mZnNldChvZmZz
ZXQpIDogMDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzSW5saW5lU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5oYXNJbmxpbmVTdG9yYWdlKCk7IH0KLSAgICAgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgaW5saW5lU3RvcmFnZVVuc2FmZSgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+
KHRoaXMgKyAxKTsKLSAgICAgICAgfQotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgaW5saW5lU3Rv
cmFnZVVuc2FmZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih0aGlzICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2UgaW5saW5lU3RvcmFnZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChoYXNJbmxpbmVTdG9yYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0
b3JhZ2VVbnNhZmUoKTsKLSAgICAgICAgfQotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgaW5saW5l
U3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNJbmxpbmVTdG9yYWdl
KCkpOwotICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7
IHJldHVybiBtX2J1dHRlcmZseTsgfQotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5OyB9Ci0gICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdl
KCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9Ci0KLSAgICAgICAg
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmlubGluZVN0b3JhZ2Uo
KVtvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KV07Ci0gICAgICAgICAgICByZXR1cm4gJm91
dE9mTGluZVN0b3JhZ2UoKVtvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KV07Ci0gICAg
ICAgIH0KLQotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9m
ZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiAmaW5saW5lU3Rv
cmFnZSgpW29mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpXTsKLSAgICAgICAgICAgIHJldHVy
biAmb3V0T2ZMaW5lU3RvcmFnZSgpW29mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpXTsK
LSAgICAgICAgfQotCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldEZvckxvY2F0aW9uKFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQ7Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlID0gbG9jYXRpb24gLSBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7Ci0gICAg
ICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihm
aXJzdE91dE9mTGluZU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MSk7Ci0gICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Cisg
ICAgLy8gcHV0RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2Rl
ZmluZU93blByb3BlcnR5JzoKKyAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBj
b25zdWx0ZWQKKyAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCisgICAgLy8gIC0g
YXR0cmlidXRlcyB3aWxsIGJlIHJlc3BlY3RlZCAoYWZ0ZXIgdGhlIGNhbGwgdGhlIHByb3BlcnR5
IHdpbGwgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcykKKyAgICAvLyAgLSB0aGUgcHJv
cGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICB2b2lk
IHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMgPSAwKTsKKyAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZvaWQgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CisgICAgdm9pZCBwdXREaXJlY3RBY2Nlc3NvcihFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworCisg
ICAgYm9vbCBwcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpIGNvbnN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSkgY29uc3Q7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSk7CisKKyAgICBib29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAg
ICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUg
PSBOb1ByZWZlcmVuY2UpIGNvbnN0OworICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKworICAgIC8vIE5P
VEU6IEpTT2JqZWN0IGFuZCBpdHMgc3ViY2xhc3NlcyBtdXN0IGJlIGFibGUgdG8gZ3JhY2VmdWxs
eSBoYW5kbGUgRXhlY1N0YXRlKiA9IDAsCisgICAgLy8gYmVjYXVzZSB0aGlzIGNhbGwgbWF5IGNv
bWUgZnJvbSBpbnNpZGUgdGhlIGNvbXBpbGVyLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU09iamVjdCogdG9UaGlzT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSopOwogCi0gICAgICAg
IHZvaWQgdHJhbnNpdGlvblRvKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIGJvb2wg
Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxs
KiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBv
bmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSlNWYWx1ZSBnZXREaXJlY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAor
ICAgIHsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChn
bG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CisgICAgICAgIHJldHVybiBvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCA/IGdldERpcmVjdE9mZnNldChvZmZzZXQpIDogSlNWYWx1ZSgpOworICAg
IH0KKworICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGdldERpcmVjdExvY2F0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICB7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFs
RGF0YSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOworICAgICAgICByZXR1cm4gaXNWYWxpZE9mZnNldChv
ZmZzZXQpID8gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSA6IDA7CisgICAgfQorCisgICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogZ2V0RGlyZWN0TG9jYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cykKKyAgICB7CisgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbjsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gaXNW
YWxpZE9mZnNldChvZmZzZXQpID8gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSA6IDA7CisgICAg
fQogCi0gICAgICAgIGJvb2wgcmVtb3ZlRGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSk7IC8vIFJldHVybiB0cnVlIGlmIGFueXRoaW5nIGlzIHJlbW92ZWQuCi0gICAgICAgIGJvb2wg
aGFzQ3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5kaWRUcmFuc2l0aW9u
KCk7IH0KLSAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgeyByZXR1cm4g
c3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKTsgfQotCi0gICAgICAgIC8v
IHB1dE93bkRhdGFQcm9wZXJ0eSBoYXMgJ3B1dCcgbGlrZSBzZW1hbnRpY3MsIGhvd2V2ZXIgdGhp
cyBtZXRob2Q6Ci0gICAgICAgIC8vICAtIGFzc3VtZXMgdGhlIG9iamVjdCBjb250YWlucyBubyBv
d24gZ2V0dGVyL3NldHRlciBwcm9wZXJ0aWVzLgotICAgICAgICAvLyAgLSBwcm92aWRlcyBubyBz
cGVjaWFsIGhhbmRsaW5nIGZvciBfX3Byb3RvX18KLSAgICAgICAgLy8gIC0gZG9lcyBub3Qgd2Fs
ayB0aGUgcHJvdG90eXBlIGNoYWluICh0byBjaGVjayBmb3IgYWNjZXNzb3JzIG9yIG5vbi13cml0
YWJsZSBwcm9wZXJ0aWVzKS4KLSAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IEpTQWN0aXZhdGlv
bi4KLSAgICAgICAgYm9vbCBwdXRPd25EYXRhUHJvcGVydHkoSlNHbG9iYWxEYXRhJiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLQotICAgICAgICAvLyBGYXN0IGFj
Y2VzcyB0byBrbm93biBwcm9wZXJ0eSBvZmZzZXRzLgotICAgICAgICBKU1ZhbHVlIGdldERpcmVj
dE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCktPmdldCgpOyB9Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0T2Zmc2V0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZh
bHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7IH0KLSAgICAgICAgdm9pZCBwdXRVbmRlZmluZWRBdERpcmVjdE9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0VW5kZWZpbmVk
KCk7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Ci0KLSAgICAgICAgYm9vbCBpc0dsb2JhbE9iamVj
dCgpIGNvbnN0OwotICAgICAgICBib29sIGlzVmFyaWFibGVPYmplY3QoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBpc05hbWVTY29wZU9iamVjdCgpIGNvbnN0OwotICAgICAgICBib29sIGlzQWN0aXZh
dGlvbk9iamVjdCgpIGNvbnN0OwotICAgICAgICBib29sIGlzRXJyb3JJbnN0YW5jZSgpIGNvbnN0
OwotCi0gICAgICAgIHZvaWQgc2VhbChKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgdm9pZCBmcmVl
emUoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJldmVu
dEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNTZWFsZWQoZ2xvYmFs
RGF0YSk7IH0KLSAgICAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
IHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc0Zyb3plbihnbG9iYWxEYXRhKTsgfQotICAgICAgICBi
b29sIGlzRXh0ZW5zaWJsZSgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc0V4dGVuc2libGUoKTsg
fQotICAgICAgICBib29sIGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gIWlzRXh0ZW5zaWJsZSgpCi0gICAgICAgICAgICAgICAgfHwgc3RydWN0
dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1Jl
aWZpZWQoKTsgfQotICAgICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4
ZWNTdGF0ZSogZXhlYyk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBn
cm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpOwotICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0
ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRv
IGNhbGwgdGhpcy4KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxv
Y2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0
eSwgU3RydWN0dXJlKik7Ci0gICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLQotICAgICAgICB2
b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAg
ICAgICAgewotICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0
dXJlKGdsb2JhbERhdGEsIHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICAgICAgQVNTRVJUKCFpc0dsb2Jh
bE9iamVjdCgpIHx8ICgoSlNPYmplY3QqKXN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgPT0g
dGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN3aXRjaFRvU2xvd1B1dEFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSByZWNlaXZlciBp
cyB0aGUgcHJvdG90eXBlIGluIHRoaXMgY2FzZS4gVGhlIGZvbGxvd2luZzoKLSAgICAgICAgLy8K
LSAgICAgICAgLy8gYXNPYmplY3QoZm9vLT5zdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkp
LT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKC4uLikKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gaXMgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gZm9vLT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7Ci0gICAg
ICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgMCBp
ZiBjb250aWd1b3VzIHN0b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQot
ICAgICAgICAvLyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2
aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29u
dGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICBi
b29sIGhhc0lubGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aGFzSW5s
aW5lU3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgaW5saW5lU3RvcmFnZVVu
c2FmZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnN0UHJv
cGVydHlTdG9yYWdlPih0aGlzICsgMSk7CisgICAgfQorICAgIFByb3BlcnR5U3RvcmFnZSBpbmxp
bmVTdG9yYWdlVW5zYWZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8UHJv
cGVydHlTdG9yYWdlPih0aGlzICsgMSk7CisgICAgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IGlubGluZVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0lubGluZVN0
b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CisgICAgfQor
ICAgIFByb3BlcnR5U3RvcmFnZSBpbmxpbmVTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNJbmxpbmVTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2Fm
ZSgpOworICAgIH0KKyAgICAgICAgCisgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBj
b25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
eyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisKKyAgICBjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgIHJldHVybiAmaW5saW5lU3RvcmFnZSgpW29mZnNldEluSW5saW5lU3RvcmFn
ZShvZmZzZXQpXTsKKyAgICAgICAgcmV0dXJuICZvdXRPZkxpbmVTdG9yYWdlKClbb2Zmc2V0SW5P
dXRPZkxpbmVTdG9yYWdlKG9mZnNldCldOworICAgIH0KKworICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJu
ICZpbmxpbmVTdG9yYWdlKClbb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCldOworICAgICAg
ICByZXR1cm4gJm91dE9mTGluZVN0b3JhZ2UoKVtvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KV07CisgICAgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0Rm9yTG9jYXRpb24oV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCByZXN1bHQ7CisgICAgICAgIHNpemVfdCBvZmZzZXRJbklubGluZVN0b3Jh
Z2UgPSBsb2NhdGlvbiAtIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKKyAgICAgICAgaWYgKG9mZnNl
dEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKQorICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlv
biArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDEpOworICAgICAgICB2YWxpZGF0ZU9mZnNldChy
ZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2l0aW9uVG8oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisKKyAgICBib29sIHJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0
eU5hbWUpOyAvLyBSZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyBpcyByZW1vdmVkLgorICAgIGJvb2wg
aGFzQ3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5kaWRUcmFuc2l0aW9u
KCk7IH0KKyAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSB7IHJldHVybiBzdHJ1
Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpOyB9CisKKyAgICAvLyBwdXRPd25E
YXRhUHJvcGVydHkgaGFzICdwdXQnIGxpa2Ugc2VtYW50aWNzLCBob3dldmVyIHRoaXMgbWV0aG9k
OgorICAgIC8vICAtIGFzc3VtZXMgdGhlIG9iamVjdCBjb250YWlucyBubyBvd24gZ2V0dGVyL3Nl
dHRlciBwcm9wZXJ0aWVzLgorICAgIC8vICAtIHByb3ZpZGVzIG5vIHNwZWNpYWwgaGFuZGxpbmcg
Zm9yIF9fcHJvdG9fXworICAgIC8vICAtIGRvZXMgbm90IHdhbGsgdGhlIHByb3RvdHlwZSBjaGFp
biAodG8gY2hlY2sgZm9yIGFjY2Vzc29ycyBvciBub24td3JpdGFibGUgcHJvcGVydGllcykuCisg
ICAgLy8gVGhpcyBpcyB1c2VkIGJ5IEpTQWN0aXZhdGlvbi4KKyAgICBib29sIHB1dE93bkRhdGFQ
cm9wZXJ0eShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOworCisgICAgLy8gRmFzdCBhY2Nlc3MgdG8ga25vd24gcHJvcGVydHkgb2Zmc2V0cy4K
KyAgICBKU1ZhbHVlIGdldERpcmVjdE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0
IHsgcmV0dXJuIGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmdldCgpOyB9CisgICAgdm9pZCBw
dXREaXJlY3RPZmZzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIEpTVmFsdWUgdmFsdWUpIHsgbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+c2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsgfQorICAgIHZvaWQgcHV0VW5kZWZpbmVkQXREaXJlY3RP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkt
PnNldFVuZGVmaW5lZCgpOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisKKyAgICBib29sIGlzR2xvYmFs
T2JqZWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhcmlhYmxlT2JqZWN0KCkgY29uc3Q7CisgICAg
Ym9vbCBpc05hbWVTY29wZU9iamVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNBY3RpdmF0aW9uT2Jq
ZWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdDsKKworICAgIHZv
aWQgc2VhbChKU0dsb2JhbERhdGEmKTsKKyAgICB2b2lkIGZyZWV6ZShKU0dsb2JhbERhdGEmKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByZXZlbnRFeHRlbnNpb25zKEpTR2xvYmFsRGF0
YSYpOworICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+aXNTZWFsZWQoZ2xvYmFsRGF0YSk7IH0KKyAgICBib29sIGlzRnJvemVu
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRnJvemVu
KGdsb2JhbERhdGEpOyB9CisgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7IHJldHVybiBzdHJ1Y3R1
cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0KKyAgICBib29sIGluZGV4aW5nU2hvdWxkQmVTcGFyc2Uo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0V4dGVuc2libGUoKQorICAgICAgICAgICAgfHwg
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpOworICAgIH0KKworICAgIGJvb2wgc3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlm
aWVkKCk7IH0KKyAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0
ZSogZXhlYyk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxp
bmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7
CisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0
dXJlKik7CisgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0
dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KKyAgICAg
ICAgCisgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKKyAgICB2
b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKik7CisKKyAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0
dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKKyAgICB9CisKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQoIWlzR2xvYmFs
T2JqZWN0KCkgfHwgKChKU09iamVjdCopc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSA9PSB0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICB9
CisgICAgICAgIAorICAgIHZvaWQgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICAKKyAgICAvLyBUaGUgcmVjZWl2ZXIgaXMgdGhlIHByb3RvdHlwZSBp
biB0aGlzIGNhc2UuIFRoZSBmb2xsb3dpbmc6CisgICAgLy8KKyAgICAvLyBhc09iamVjdChmb28t
PnN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKSktPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoLi4uKQorICAgIC8vCisgICAgLy8gaXMgZXF1aXZhbGVu
dCB0bzoKKyAgICAvLworICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9u
SG9sZSguLi4pOworICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZv
clByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgLy8gUmV0
dXJucyAwIGlmIGNvbnRpZ3VvdXMgc3RvcmFnZSBjYW5ub3QgYmUgY3JlYXRlZCAtIGVpdGhlciBi
ZWNhdXNlCisgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3Jl
IGhhdmluZyBhIGJhZCB0aW1lLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29u
dGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBpZiAoTElL
RUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAg
ICB9CiAgICAgICAgIAotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEg
bW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCi0gICAgICAgIC8vIHRoaXMgaWYg
eW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQg
dGhlCi0gICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9y
YWdlLCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdAotICAgICAgICAvLyBhbHJlYWR5LgotICAgICAgICBB
cnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzQXJyYXlTdG9yYWdlKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQorICAgIC8vIHRoaXMgaWYg
eW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQg
dGhlCisgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2Us
IGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAgLy8gYWxyZWFkeS4KKyAgICBBcnJheVN0b3JhZ2Uq
IGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAg
ICAgICBpZiAoTElLRUxZKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKSkKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGds
b2JhbERhdGEpOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VT
bG93KGdsb2JhbERhdGEpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEJ1dHRlcmZseSogZW5z
dXJlSW5kZXhlZFN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoTElLRUxZKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseTsKKyAg
ICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBlbnN1cmVJbmRleGVkU3RvcmFnZVNs
b3coZ2xvYmFsRGF0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVuc3VyZUluZGV4ZWRT
dG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOworICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1
dHRlcmZseU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICB2
b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZt
X2J1dHRlcmZseTsKLSAgICAgICAgfQorICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotICAgICAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0
dXJlKCktPmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlKCkuaXNOdWxs
KCkgfHwgSGVhcDo6aGVhcCh0aGlzKSA9PSBIZWFwOjpoZWFwKHByb3RvdHlwZSgpKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKGNsYXNzSW5mbygpKTsKLSAgICAgICAgfQorcHJvdGVjdGVkOgorICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
OworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VS
VChwcm90b3R5cGUoKS5pc051bGwoKSB8fCBIZWFwOjpoZWFwKHRoaXMpID09IEhlYXA6OmhlYXAo
cHJvdG90eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc09iamVjdCgpKTsK
KyAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KIAotICAgICAgICAvLyBUbyBpbnN0
YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KLSAg
ICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmlu
YWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBCdXR0ZXJmbHkqID0gMCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHJlc2V0SW5oZXJp
dG9ySUQoSlNHbG9iYWxEYXRhJik7CisgICAgLy8gVG8gaW5zdGFudGlhdGUgb2JqZWN0cyB5b3Ug
bGlrZWx5IHdhbnQgSlNGaW5hbE9iamVjdCwgYmVsb3cuCisgICAgLy8gVG8gY3JlYXRlIGRlcml2
ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgorICAgIEpT
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKKyAgICAg
ICAgCisgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAK
KyAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90
IHN0b3JhZ2VTaXplKTsKKyAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0
ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBr
bm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CisgICAg
Ly8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgQXJyYXlTdG9yYWdl
KiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0QnV0
dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKLSAg
ICAgICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90
IHN0b3JhZ2VTaXplKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKLSAgICAgICAgLy8gc3Rv
cmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCi0gICAgICAgIEFycmF5U3RvcmFnZSog
YXJyYXlTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGhhc0FycmF5U3Rv
cmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUK
KyAgICAvLyBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgor
ICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlT3JOdWxsKCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxs
IHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9y
IG5vdCB0aGUKLSAgICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJy
YXkgc3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPck51bGwoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYpOwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7Ci0gICAg
ICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwotICAgICAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIAot
ICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgCi0gICAgICAgIGJv
b2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotCi0gICAgICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwotICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKik7Ci0KLSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwotICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcCgpOwotICAgICAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7
Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNH
bG9iYWxEYXRhJik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRl
eGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBhdHRl
bXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGwg
dGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1
cmUgdGhhdAotICAgICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KLSAgICAgICAgdm9p
ZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FS
UkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsK
KyAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRh
Jik7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEFycmF5U3RvcmFnZSogY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNp
dGlvbik7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgCisgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlv
bik7CisKKyAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0
aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
KTsKKyAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdywgQXJyYXlTdG9yYWdlKik7CisKKyAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgdm9pZCBkZWFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoKTsKKyAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2Jh
bERhdGEmKTsKKyAgICAgICAgCisgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vz
c29ycyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNl
cHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50
IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5b3UncmUgc3VyZSB0aGF0CisgICAgLy8g
dGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3Ro
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgIEFTU0VSVChoYXND
b250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQotICAg
ICAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KGdsb2JhbERhdGEsIGxlbmd0
aCk7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpCisg
ICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhnbG9iYWxEYXRhLCBsZW5ndGgp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIDwgbGVuZ3RoKQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgobGVuZ3RoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNvdW50RWxlbWVu
dHNJbkNvbnRpZ3VvdXMoQnV0dGVyZmx5Kik7CisgICAgdW5zaWduZWQgY291bnRFbGVtZW50c0lu
Q29udGlndW91cyhCdXR0ZXJmbHkqKTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogaW5k
ZXhpbmdEYXRhKCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgdGVtcGxh
dGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGluZGV4aW5nRGF0YSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewor
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
KyAgICB9CiAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50SW5kZXhpbmdE
YXRhKCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Ci0K
LSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGN1cnJlbnRJbmRleGluZ0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpOworCisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KLSAgICAgICAgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewotICAgICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHRlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgoKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1pbigKLSAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5s
ZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptaW4oCisgICAgICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQor
ICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBjdXJyZW50UmVsZXZhbnRMZW5ndGgoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewot
ICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotCi0gICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1pbigKLSAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgIH0KKyAgICB1bnNpZ25lZCBjdXJyZW50UmVsZXZhbnRMZW5ndGgoKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLAorICAgICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKLSAgICAgICAgLy8gTm9ib2R5IHNob3VsZCBl
dmVyIGFzayBhbnkgb2YgdGhlc2UgcXVlc3Rpb25zIG9uIHNvbWV0aGluZyBhbHJlYWR5IGtub3du
IHRvIGJlIGEgSlNPYmplY3QuCi0gICAgICAgIHVzaW5nIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBw
ZXI7Ci0gICAgICAgIHVzaW5nIEpTQ2VsbDo6aXNHZXR0ZXJTZXR0ZXI7Ci0gICAgICAgIHZvaWQg
Z2V0T2JqZWN0KCk7Ci0gICAgICAgIHZvaWQgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYyk7Ci0g
ICAgICAgIHZvaWQgaXNPYmplY3QoKTsKLSAgICAgICAgdm9pZCBpc1N0cmluZygpOworICAgIC8v
IE5vYm9keSBzaG91bGQgZXZlciBhc2sgYW55IG9mIHRoZXNlIHF1ZXN0aW9ucyBvbiBzb21ldGhp
bmcgYWxyZWFkeSBrbm93biB0byBiZSBhIEpTT2JqZWN0LgorICAgIHVzaW5nIEpTQ2VsbDo6aXNB
UElWYWx1ZVdyYXBwZXI7CisgICAgdXNpbmcgSlNDZWxsOjppc0dldHRlclNldHRlcjsKKyAgICB2
b2lkIGdldE9iamVjdCgpOworICAgIHZvaWQgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYyk7Cisg
ICAgdm9pZCBpc09iamVjdCgpOworICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCi0gICAg
ICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAgQXJy
YXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgCi0gICAg
ICAgIHRlbXBsYXRlPFB1dE1vZGU+Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNH
bG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9w
ZXJ0eVNsb3QmLCBKU0NlbGwqKTsKKyAgICB0ZW1wbGF0ZTxQdXRNb2RlPgorICAgIGJvb2wgcHV0
RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAotICAgICAgICBib29sIGlu
bGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQpOworICAgIGJvb2wgaW5saW5lR2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0KTsKIAotICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZp
bmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAg
ICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOworICAgIGNv
bnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERh
dGEmKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0
YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVz
Y3JpcHRvciYgb2xkKTsKKyAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSos
IFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIG9sZCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFn
ZSopOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICB2b2lkIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9k
ZSwgQXJyYXlTdG9yYWdlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVu
dFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExl
bmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3Vy
cmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJl
ZExlbmd0aCk7CisgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2ly
ZWRMZW5ndGgpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBl
bnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHZvaWQgZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3coSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIEFycmF5U3RvcmFn
ZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgQnV0dGVy
Zmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmKTsKKyAg
ICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7Cisg
ICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CiAg
ICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsK
LSAgICB9OworcHJvdGVjdGVkOgorICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7Cit9OwogCiAK
LSAgICAvLyBKU05vbkZpbmFsT2JqZWN0IGlzIGEgdHlwZSBvZiBKU09iamVjdCB0aGF0IGhhcyBz
b21lIGludGVybmFsIHN0b3JhZ2UsCi0gICAgLy8gYnV0IGFsc28gcHJlc2VydmVzIHNvbWUgc3Bh
Y2UgaW4gdGhlIGNvbGxlY3RvciBjZWxsIGZvciBhZGRpdGlvbmFsCi0gICAgLy8gZGF0YSBtZW1i
ZXJzIGluIGRlcml2ZWQgdHlwZXMuCi0gICAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCA6IHB1Ymxp
YyBKU09iamVjdCB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBKU09iamVjdDsKLQotICAgIHB1Ymxp
YzoKLSAgICAgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7Ci0gICAgICAgIH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25G
aW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDApCi0gICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpLT50b3RhbFN0b3JhZ2VDYXBhY2l0eSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8oKSk7Ci0gICAgICAgIH0KLSAgICB9Owor
Ly8gSlNOb25GaW5hbE9iamVjdCBpcyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBoYXMgc29tZSBp
bnRlcm5hbCBzdG9yYWdlLAorLy8gYnV0IGFsc28gcHJlc2VydmVzIHNvbWUgc3BhY2UgaW4gdGhl
IGNvbGxlY3RvciBjZWxsIGZvciBhZGRpdGlvbmFsCisvLyBkYXRhIG1lbWJlcnMgaW4gZGVyaXZl
ZCB0eXBlcy4KK2NsYXNzIEpTTm9uRmluYWxPYmplY3QgOiBwdWJsaWMgSlNPYmplY3QgeworICAg
IGZyaWVuZCBjbGFzcyBKU09iamVjdDsKIAotICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOwogCi0gICAgLy8gSlNGaW5hbE9iamVjdCBp
cyBhIHR5cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNlbnQgaW50ZXJuYWwKLSAg
ICAvLyBzdG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsb2N0b3IgY2VsbCBjb250
YWluaW5nIGl0LgotICAgIGNsYXNzIEpTRmluYWxPYmplY3QgOiBwdWJsaWMgSlNPYmplY3Qgewot
ICAgICAgICBmcmllbmQgY2xhc3MgSlNPYmplY3Q7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgfQogCi0gICAg
cHVibGljOgotICAgICAgICB0eXBlZGVmIEpTT2JqZWN0IEJhc2U7Citwcm90ZWN0ZWQ6CisgICAg
ZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDApCisgICAgICAgIDogSlNP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCisgICAgeworICAgIH0KIAot
ICAgICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhGaW5hbE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXksIElOTElORV9TVE9SQUdF
X0NBUEFDSVRZKTsKLSAgICAgICAgfQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCktPnRvdGFsU3RvcmFn
ZUNhcGFjaXR5KCkpOworICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOworICAgIH0KK307CisK
K2NsYXNzIEpTRmluYWxPYmplY3Q7CisKKy8vIEpTRmluYWxPYmplY3QgaXMgYSB0eXBlIG9mIEpT
T2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljZW50IGludGVybmFsCisvLyBzdG9yYWdlIHRvIGZ1
bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsb2N0b3IgY2VsbCBjb250YWluaW5nIGl0LgorY2xhc3Mg
SlNGaW5hbE9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CisgICAgZnJpZW5kIGNsYXNzIEpTT2Jq
ZWN0OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworCisgICAgc3RhdGlj
IEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oRmluYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8sIE5vbkFycmF5LCBJTkxJTkVfU1RPUkFHRV9DQVBBQ0lUWSk7CisgICAgfQogCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICAgICAgc3RhdGljIEpTX0VYUE9S
VERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW5Db21tb24oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgCi0gICAgICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA9PSBzdHJ1Y3R1cmUoKS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKCkpOwotICAg
ICAgICB9CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT50b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID09IHN0cnVjdHVy
ZSgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUKGNsYXNzSW5mbygpKTsKKyAg
ICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCi0gICAgICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICBleHBsaWNpdCBKU0Zp
bmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNPYmpl
Y3Q6OlN0cnVjdHVyZUZsYWdzOwotICAgIH07CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKIAogaW5saW5lIEpT
RmluYWxPYmplY3QqIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewo=
</data>
<flag name="review"
          id="186827"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>