<?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>164343</bug_id>
          
          <creation_ts>2016-11-02 15:06:24 -0700</creation_ts>
          <short_desc>One file per class for CodeBlock.h/.cpp</short_desc>
          <delta_ts>2016-11-02 15:22:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1247507</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 15:06:24 -0700</bug_when>
    <thetext>One file per class for CodeBlock.h/.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247508</commentid>
    <comment_count>1</comment_count>
      <attachid>293701</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 15:07:19 -0700</bug_when>
    <thetext>Created attachment 293701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247515</commentid>
    <comment_count>2</comment_count>
      <attachid>293701</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-11-02 15:18:15 -0700</bug_when>
    <thetext>Comment on attachment 293701
Patch

rs=me with history preserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247516</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-02 15:22:37 -0700</bug_when>
    <thetext>Committed r208309: &lt;http://trac.webkit.org/changeset/208309&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293701</attachid>
            <date>2016-11-02 15:07:19 -0700</date>
            <delta_ts>2016-11-02 15:18:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164343-20161102150320.patch</filename>
            <type>text/plain</type>
            <size>2659557</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3ODAg
QEAKKzIwMTYtMTEtMDIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAg
ICAgICBPbmUgZmlsZSBwZXIgY2xhc3MgZm9yIENvZGVCbG9jay5oLy5jcHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDM0MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6
Okdsb2JhbENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmNy
ZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6
OlByb2dyYW1Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6dmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFs
Q29kZUJsb2NrOjpudW1WYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29k
ZUJsb2NrOjpFdmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVC
bG9jazo6dW5saW5rZWRFdmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2RlQmxvY2spOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0V2YWxDb2RlQmxvY2suY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcC4KKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppbmZlcnJlZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Omhhc0hhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzU2FmZVRvQ29t
cHV0ZUhhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2gpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29kZU9uT25lTGluZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OmlkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVnaXN0
ZXJOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudE5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnJlZ2V4cE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpkZWJ1
Z0hvb2tOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludFVuYXJ5
T3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50QmluYXJ5T3ApOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50Q29uZGl0aW9uYWxKdW1wKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5SWRPcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmR1bXBTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpkdW1wQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0
QnlJZENhY2hlU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJpbnRDYWxsT3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50UHV0
QnlJZE9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wU291cmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBFeGNlcHRpb25IYW5kbGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmlsaW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxpbmcpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBcnJheVByb2ZpbGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFJhcmVDYXNlUHJvZmlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRMb2NhdGlvbkFuZE9wKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzaXplSW5CeXRlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29u
c3RhbnRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEFs
dGVybmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXROdW1QYXJh
bWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dy
ZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRy
eUJsb2NrT3JOdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdFdl
YWtseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZl
cmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0aW1lVG9MaXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5
SWRDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVMTElu
dElubGluZUNhY2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxp
emVCYXNlbGluZUpJVElubGluZUNhY2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXApOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5l
Z0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kU3R1YkluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERhdGEpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdldHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lQWx0
ZXJuYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVy
c2lvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFuZGxl
ckZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpuZXdFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRlY29kZU9mZnNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVi
dWdGb3JMaW5lQW5kQ29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
aHJpbmtUb0ZpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29t
aW5nQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5n
UG9seW1vcnBoaWNDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpuZXdS
ZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5
TGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpSZWN1cnNpb25DaGVja0Z1bmN0b3I6OlJlY3Vyc2lvbkNoZWNrRnVu
Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vyc2lvbkNoZWNrRnVuY3Rvcjo6b3Bl
cmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vyc2lvbkNoZWNrRnVuY3Rvcjo6
ZGlkUmVjdXJzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bm90aWNlSW5j
b21pbmdDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJvdW5kQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50UmVv
cHRpbWl6YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
REZHQ29tcGlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVUeXBl
VGhyZXNob2xkTXVsdGlwbGllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
b3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmNsaXBUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFk
anVzdGVkQ291bnRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
aGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNvb24pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJMb25nV2FybVVwKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZVNvb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVz
aG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9w
dGltaXphdGlvbkZyb21Mb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
aG91bGRSZW9wdGltaXplTm93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
aG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmdldEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6YWRkQXJyYXlQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRPckFkZEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y29kZU9yaWdpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
REZHSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlkZW50
aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c3RhY2tQb2ludGVyT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVzZXNPcGNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbGlkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpiZWdpblZhbGlkYXRpb25EaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlkRmFpbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXJpdGhQcm9maWxl
Rm9yUEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNwZWNp
YWxGYXN0Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnNlcnRCYXNpY0Js
b2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmppdFNvb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBN
YXRoSUNTdGF0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2ZW5lc3NB
bmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0V2YWxDb2RlQmxvY2su
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtl
ZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtUGFyYW1l
dGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtQ2FsbGVlTG9jYWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFt
ZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFsdGVybmF0aXZlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoUmVsYXRlZENvZGVCbG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3BlY2lhbGl6YXRpb25LaW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1N0cmljdE1vZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVjbWFNb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90SW1tZWRpYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjYWxsTGlua0luZm9zQmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NFbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmppdENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2Rl
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZkluc3Ry
dWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zdHJ1Y3Rpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0cnVjdGlvbkNvdW50KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpqaXRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNC
YXNlbGluZUpJVFByb2ZpbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y2FwYWJpbGl0eUxldmVsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om93bmVyRXhlY3V0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3du
ZXJTY3JpcHRFeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
bSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0VGhpc1JlZ2lzdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aGlzUmVnaXN0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVzZXNFdmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzZXRTY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjb2RlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHV0
QnlJZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaXJzdExpbmVDb2x1bW5PZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSnVtcFRhcmdldHMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JC
eXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dG90YWxO
dW1iZXJPZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bnVtYmVyT2ZBcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpleGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aGFzQ29kZU9yaWdpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNhbkdldENvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
ZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEZyZXF1ZW50
RXhpdFNpdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0V4aXRTaXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0UHJvZmlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZklkZW50aWZpZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudHMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0YW50TGF6aWx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmdW5jdGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpyZWdleHApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bWJlck9mQ29uc3RhbnRCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRDb25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29uc3RhbnRCdWZmZXJBc1ZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y29uc3RhbnRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdsb2JhbE9iamVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2ZW5lc3NBbmFseXNpcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRTd2l0Y2hKdW1wVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpldmFs
Q29kZUNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjaGVja0lmSklU
VGhyZXNob2xkUmVhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZG9u
dEpJVEFueXRpbWVTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGlu
dEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGlu
dEdldEJ5SWRXYXRjaHBvaW50TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25B
Y3RpdmVUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNl
dE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0RXhlY3V0ZUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om9wdGltaXphdGlvbkRlbGF5Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b3NyRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvdW50T1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRk
cmVzc09mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om9mZnNldE9mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0RlYnVnZ2VyUmVxdWVzdHMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZW1vdmVCcmVha3BvaW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckRlYnVnZ2VyUmVxdWVzdHMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Ondhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRXhjZXB0
aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFwcGVuZEV4
Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJl
cGxhY2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGltZVNp
bmNlQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpHbG9iYWxDb2RlQmxv
Y2s6Okdsb2JhbENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2Rl
QmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OlByb2dyYW1Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJs
eUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5jaGVja2VkUik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1
dGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmluZmVycmVkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aGFzSGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNT
YWZlVG9Db21wdXRlSGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFz
aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2VDb2RlT25PbmVMaW5l
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNoQXNTdHJpbmdJZlBvc3Np
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRU
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6aWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpyZWdpc3Rlck5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0
YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlZ2V4cFRvU291cmNlU3RyaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVnZXhwTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmRlYnVnSG9va05hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBy
aW50VW5hcnlPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRCaW5h
cnlPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRDb25kaXRpb25h
bEp1bXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZE9w
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6ZHVtcFN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmR1bXBDaGFpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwcmludENhbGxPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cHJpbnRQdXRCeUlkT3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBT
b3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEV4Y2VwdGlvbkhhbmRsZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiZWdpbkR1bXBQcm9maWxpbmcp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wUmFyZUNhc2VQcm9maWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXJpdGhQcm9maWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3ApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVy
T3BlcmFuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRDb25zdGFudFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2V0QWx0ZXJuYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dE51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUNhY2hlOjp2
aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3BlY2lh
bE9TUkVudHJ5QmxvY2tPck51bGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha2x5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplc3RpbWF0
ZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVu
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRv
V2Vha1JlZmVyZW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnRpbWVUb0xpdmUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2Up
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzaG91bGRNYXJrVHJhbnNpdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdl
YWtSZWZlcmVuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckxM
SW50R2V0QnlJZENhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRTdHViSW5mbyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUQWRkSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE11bElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVRTdWJJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YWRkSklUTmVnSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQnlWYWxJbmZvKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2Rl
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlc2V0SklURGF0YSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVWZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFu
ZGxlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpoYW5kbGVyRm9ySW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5l
d0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFu
Z2VGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjps
aW5rSW5jb21pbmdDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5r
SW5jb21pbmdQb2x5bW9ycGhpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnVubGlua0luY29taW5nQ2FsbHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om5ld1JlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpy
ZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29tcHV0ZUNh
cGFiaWxpdHlMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6amV0dGlz
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdsb2JhbE9iamVjdEZvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vyc2lvbkNoZWNrRnVuY3Rvcjo6UmVjdXJzaW9u
Q2hlY2tGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVjdXJzaW9uQ2hlY2tGdW5j
dG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVjdXJzaW9uQ2hlY2tG
dW5jdG9yOjpkaWRSZWN1cnNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
b3RpY2VJbmNvbWluZ0NhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cm91
bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y291bnRSZW9wdGltaXphdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bnVtYmVyT2ZERkdDb21waWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Y2xpcFRocmVzaG9sZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplU29vbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1
cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0
aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9s
ZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmdldE9yQWRkQXJyYXlQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjb2RlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bnVtYmVyT2ZERkdJZGVudGlmaWVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRl
QWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdGFja1BvaW50ZXJPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXNlc09wY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuZFZhbGlkYXRpb25EaWRGYWlsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRCcmVha3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFkZFJhcmVDYXNlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcml0
aFByb2ZpbGVGb3JQQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bGRU
YWtlU3BlY2lhbEZhc3RDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
YXBhYmlsaXR5TGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc2Vy
dEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0U29vbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZHVtcE1hdGhJQ1N0YXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjps
aXZlbmVzc0FuYWx5c2lzU2xvdyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvRnVuY3Rp
b25Db2RlQmxvY2suaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1bmxpbmtlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVt
Q2FsbGVlTG9jYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNz
T2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZz
ZXRPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFs
dGVybmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoUmVs
YXRlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3BlY2lh
bGl6YXRpb25LaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1N0cmlj
dE1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVjbWFNb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90SW1tZWRpYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvRW5kKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlua0luZm9zQmVnaW4pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NFbmQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmppdENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
dW1iZXJPZkluc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
aW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0cnVj
dGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpoYXNCYXNlbGluZUpJVFByb2ZpbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2bSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0VGhp
c1JlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aGlzUmVnaXN0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVzZXNFdmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6cHV0QnlJZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlT2Zm
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSnVtcFRh
cmdldHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omp1bXBUYXJnZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVBy
b2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6aGFzQ29kZU9yaWdpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNhbkdldENvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmFkZEZyZXF1ZW50RXhpdFNpdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Omhhc0V4aXRTaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0UHJv
ZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZklk
ZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudHMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0YW50TGF6aWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmdW5jdGlvbkRlY2wpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdleHApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om51bWJlck9mQ29uc3RhbnRCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXJBc1ZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omds
b2JhbE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2ZW5lc3NB
bmFseXNpcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZTd2l0
Y2hKdW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRTd2l0
Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1
bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJTd2l0Y2hK
dW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpldmFsQ29kZUNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZG9udEpJVEFueXRpbWVTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpsbGludEdldEJ5SWRXYXRjaHBvaW50TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVj
dXRlQ291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZK
SVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om9wdGltaXphdGlvbkRlbGF5Q291bnRlcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6b3NyRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNvdW50T1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkcmVzc09mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJX
YXJtVXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mREZHQ29t
cGlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0RlYnVnZ2VyUmVx
dWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZW1vdmVCcmVh
a3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckRlYnVnZ2Vy
UmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Ondhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNsZWFyRXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dGltZVNpbmNlQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpH
bG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dy
YW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBy
b2dyYW1Db2RlQmxvY2s6OlByb2dyYW1Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6dmFyaWFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpudW1WYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6RXZhbENvZGVCbG9jazo6dW5saW5rZWRFdmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxv
Y2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuY2hlY2tlZFIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmguCisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua2VkQ29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1QYXJhbWV0ZXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWx0ZXJuYXRpdmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFsaXphdGlvbktpbmQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZWNtYU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c3R1YkluZm9CZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c3R1YkluZm9FbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNh
bGxMaW5rSW5mb3NCZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2Fs
bExpbmtJbmZvc0VuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklU
Q29kZU1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSW5zdHJ1Y3Rpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0cnVjdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9uQ291bnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmppdENvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmppdENvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2
ZWxTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3duZXJFeGVjdXRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvd25lclNjcmlwdEV4ZWN1
dGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnRoaXNSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dXNlc0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNldFNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVU
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwdXRCeUlkQ29udGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2VPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmZpcnN0TGluZUNvbHVtbk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6anVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0b3RhbE51bWJlck9mVmFsdWVQ
cm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
UmFyZUNhc2VQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlr
ZWx5VG9UYWtlU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dWxkVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1i
ZXJPZkFycmF5UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFy
cmF5UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4
Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0V4
cHJlc3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNDb2Rl
T3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzRXhpdFNpdGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvbnN0YW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpnZXRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZ1bmN0aW9uRGVjbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmdW5jdGlvbkV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnJlZ2V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZDb25z
dGFudEJ1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0
YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudEJ1
ZmZlckFzVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFu
dEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGVhcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhclN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJpbmdTd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV2YWxDb2RlQ2FjaGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFj
aGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNv
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50R2V0QnlJZFdhdGNo
cG9pbnRNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mTExJ
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRp
b25Ub3RhbENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVj
dXRlQ291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvc3JF
eGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRPU1JF
eGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZPU1JFeGl0
Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZPU1JF
eGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6aGFzRGVidWdnZXJSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbW92ZUJyZWFrcG9pbnQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRGVidWdnZXJSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2Rlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFeGNlcHRpb25IYW5kbGVycyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kRXhjZXB0aW9uSGFuZGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRT
aXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aW1lU2luY2VDcmVhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OlByb2dyYW1Db2Rl
QmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RXZhbENvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVC
bG9jazo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVC
bG9jazo6dmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpu
dW1WYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFs
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6dW5saW5r
ZWRFdmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9j
azo6RnVuY3Rpb25Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5Q29kZUJsb2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
dW5jaGVja2VkUik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNp
dFdlYWtseUhhc0JlZW5DYWxsZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVj
dXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2NyaXB0
RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwLgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5
Q29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVC
bG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmRl
c3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmluZmVycmVkTmFtZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzSGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNTYWZlVG9Db21wdXRlSGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzb3VyY2VDb2RlT25PbmVMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aWROYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdpc3Rlck5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnJlZ2V4cFRvU291cmNlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVnZXhw
TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmRlYnVnSG9va05hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50VW5hcnlPcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6cHJpbnRCaW5hcnlPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJpbnRDb25kaXRpb25hbEp1bXApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6ZHVt
cFN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmR1bXBDaGFpbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3ApOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpiZWdpbkR1bXBQcm9maWxpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZHVtcEFycmF5UHJvZmlsaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wUmFyZUNhc2VQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpwcmludExvY2F0aW9uQW5kT3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2Rl
QmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OnRpbWVUb0xpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzaG91
bGRNYXJrVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRl
dGVybWluZUxpdmVuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpXZWFr
UmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmlu
YWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmdldENhbGxMaW5rSW5mb01hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Z2V0QnlWYWxJbmZvTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjphZGRTdHViSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklU
QWRkSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVE11bElDKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRTdWJJQyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTmVnSUMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkQnlWYWxJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRDYWxsTGlua0luZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlc2V0SklURGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmlzaXRPU1JFeGl0VGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVtb3ZlRXhjZXB0aW9uSGFu
ZGxlckZvckNhbGxTaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5l
TnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua1RvRml0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6amV0dGlzb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omdsb2JhbE9iamVjdEZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vy
c2lvbkNoZWNrRnVuY3Rvcjo6UmVjdXJzaW9uQ2hlY2tGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6UmVjdXJzaW9uQ2hlY2tGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UmVjdXJzaW9uQ2hlY2tGdW5jdG9yOjpkaWRSZWN1cnNlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cm91bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRSZW9wdGltaXphdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRT
Y2FsaW5nRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2xpcFRocmVzaG9sZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250
T3B0aW1pemVBbnl0aW1lU29vbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
b3B0aW1pemVBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
b3B0aW1pemVBZnRlckxvbmdXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om9wdGltaXplU29vbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9y
Y2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGp1c3RlZEV4aXRD
b3VudFRocmVzaG9sZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdENv
dW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3ApOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3cpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9v
cE5vdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldE9yQWRkQXJyYXlQcm9maWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlT3JpZ2lucyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRl
QWxsQXJyYXlQcmVkaWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dXBkYXRlQWxsUHJlZGljdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNob3VsZE9wdGltaXplTm93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0
YWxseUZyZXF1ZW50RXhpdFNpdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkdW1wVmFsdWVQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZnJhbWVSZWdpc3RlckNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
dGFja1BvaW50ZXJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBy
ZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6dXNlc09wY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmFtZUZv
clJlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmFsaWRhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJlZ2luVmFsaWRh
dGlvbkRpZEZhaWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuZFZhbGlk
YXRpb25EaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRCcmVh
a3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTdGVwcGluZ01v
ZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFJhcmVDYXNlUHJvZmls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJhcmVD
YXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JQQyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJv
bEZsb3dQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0UENU
b0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRQ
Qyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXRGcm9t
Q2FsbFNpdGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGhyZXNo
b2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldh
cm1VcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmguCisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua2VkQ29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1QYXJhbWV0ZXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1DYWxsZWVMb2NhbHMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWx0ZXJuYXRpdmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFsaXphdGlvbktpbmQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzU3RyaWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZWNtYU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c3R1YkluZm9CZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c3R1YkluZm9FbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNh
bGxMaW5rSW5mb3NCZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2Fs
bExpbmtJbmZvc0VuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklU
Q29kZU1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSW5zdHJ1Y3Rpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0cnVjdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0aW9uQ291bnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmppdENvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmppdENvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJv
ZmlsaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2
ZWxTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3duZXJFeGVjdXRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvd25lclNjcmlwdEV4ZWN1
dGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZtKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRUaGlzUmVnaXN0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnRoaXNSZWdpc3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dXNlc0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNldFNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVU
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwdXRCeUlkQ29udGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2VPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmZpcnN0TGluZUNvbHVtbk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6anVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0b3RhbE51bWJlck9mVmFsdWVQ
cm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
UmFyZUNhc2VQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlr
ZWx5VG9UYWtlU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dWxkVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1i
ZXJPZkFycmF5UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFy
cmF5UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4
Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0V4
cHJlc3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNDb2Rl
T3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9y
aWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzRXhpdFNpdGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvbnN0YW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpnZXRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZ1bmN0aW9uRGVjbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmdW5jdGlvbkV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnJlZ2V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZDb25z
dGFudEJ1ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0
YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudEJ1
ZmZlckFzVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFu
dEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGVhcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhclN3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJpbmdTd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV2YWxDb2RlQ2FjaGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFj
aGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNv
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50R2V0QnlJZFdhdGNo
cG9pbnRNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mTExJ
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRp
b25Ub3RhbENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVj
dXRlQ291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvc3JF
eGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y291bnRPU1JF
eGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZPU1JFeGl0
Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZPU1JF
eGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6aGFzRGVidWdnZXJSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbW92ZUJyZWFrcG9pbnQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRGVidWdnZXJSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2Rlcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFeGNlcHRpb25IYW5kbGVycyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXBwZW5kRXhjZXB0aW9uSGFuZGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRT
aXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aW1lU2luY2VDcmVhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29k
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0
dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6UHJvZ3JhbUNv
ZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OnZhcmlhYmxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6bnVtVmFyaWFibGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OnVubGlua2VkRXZhbENvZGVCbG9jayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9uQ29kZUJsb2NrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNz
ZW1ibHlDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuY2hlY2tlZFIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2su
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Omhhc0hhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmlzU2FmZVRvQ29tcHV0ZUhhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JU
b29scyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNlQ29kZU9uT25l
TGluZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzaEFzU3RyaW5nSWZQ
b3NzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5n
SklUVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmlkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6cmVnaXN0ZXJOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
b25zdGFudE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZWdleHBUb1NvdXJjZVN0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJlZ2V4cE5hbWUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpkZWJ1Z0hvb2tOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpwcmludFVuYXJ5T3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50
QmluYXJ5T3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50Q29uZGl0
aW9uYWxKdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEdldEJ5
SWRPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmR1bXBTdHJ1Y3R1cmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpkdW1wQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJpbnRDYWxsT3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnByaW50UHV0QnlJZE9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
dW1wU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBFeGNlcHRpb25IYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmls
aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxp
bmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBcnJheVByb2ZpbGlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFJhcmVDYXNlUHJvZmls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRMb2NhdGlvbkFuZE9wKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludExvY2F0aW9uT3BBbmRSZWdp
c3Rlck9wZXJhbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldEFsdGVybmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXROdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNo
ZTo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNw
ZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdFdlYWtseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXN0
aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGls
ZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJv
bmdseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25E
dWVUb1dlYWtSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0aW1lVG9MaXZlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xk
QWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c2hvdWxkTWFya1RyYW5zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlz
aXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xl
YXJMTEludEdldEJ5SWRDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVMTEludElubGluZUNhY2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldFN0dWJJbmZv
TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9N
YXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkU3R1YkluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5k
U3R1YkluZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEJ5VmFsSW5m
byk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ2FsbExpbmtJbmZvKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRl
Y29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXNldEpJVERh
dGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0T1NSRXhpdFRhcmdl
dHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJv
bmdSZWZlcmVuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmJhc2VsaW5lQWx0ZXJuYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmJhc2VsaW5lVmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aGFuZGxlckZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2x1bW5OdW1iZXJGb3JCeXRl
Y29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhwcmVzc2lv
blJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bGlua0luY29taW5nQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpuZXdSZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbXB1
dGVDYXBhYmlsaXR5TGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Ompl
dHRpc29uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnbG9iYWxPYmplY3RG
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpSZWN1cnNpb25DaGVja0Z1bmN0b3I6OlJlY3Vy
c2lvbkNoZWNrRnVuY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vyc2lvbkNoZWNr
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlY3Vyc2lvbkNo
ZWNrRnVuY3Rvcjo6ZGlkUmVjdXJzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bm90aWNlSW5jb21pbmdDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OnJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvdW50UmVvcHRpbWl6YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om51bWJlck9mREZHQ29tcGlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmNsaXBUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNvb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXApOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZVNvb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhD
b25jdXJyZW50bHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE9wdGlt
aXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1p
emF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0Q291bnRUaHJl
c2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplTm93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3cpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y29kZU9yaWdpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVw
ZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RhY2tQb2ludGVyT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVzZXNPcGNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbGlkYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiZWdpblZhbGlkYXRpb25EaWRGYWlsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlkRmFpbCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcml0aFByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YXJpdGhQcm9maWxlRm9yUEMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dWxkVGFrZVNwZWNpYWxGYXN0Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y2FwYWJpbGl0eUxldmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpp
bnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXBNYXRoSUNTdGF0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bGl2ZW5lc3NBbmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1By
b2dyYW1Db2RlQmxvY2suaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bnVtQ2FsbGVlTG9jYWxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpv
ZmZzZXRPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmFsdGVybmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNo
UmVsYXRlZENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Bl
Y2lhbGl6YXRpb25LaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1N0
cmljdE1vZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVjbWFNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duTm90SW1tZWRpYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1RlbXBvcmFyeVJlZ2lzdGVySW5k
ZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvQmVnaW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0dWJJbmZvRW5kKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsTGlua0luZm9zQmVnaW4pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NFbmQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpudW1iZXJPZkluc3RydWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0
cnVjdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRD
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRDb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpoYXNCYXNlbGluZUpJVFByb2ZpbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om93bmVyRXhlY3V0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6b3duZXJTY3JpcHRFeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2bSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
VGhpc1JlZ2lzdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aGlzUmVn
aXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVzZXNFdmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTY29wZVJlZ2lzdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzY29wZVJlZ2lzdGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb2RlVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHV0QnlJZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c291cmNl
T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaXJzdExpbmVDb2x1
bW5PZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mSnVt
cFRhcmdldHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omp1bXBUYXJnZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1
ZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcnJheVByb2ZpbGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphcnJheVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aGFzQ29kZU9yaWdpbnMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmNhbkdldENvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFkZEZyZXF1ZW50RXhpdFNpdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omhhc0V4aXRTaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZklkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppZGVudGlm
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudHMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0YW50TGF6aWx5KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0NvbnN0YW50UmVnaXN0ZXJJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q29uc3RhbnQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmdW5jdGlvbkRlY2wpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZnVuY3Rpb25FeHByKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZWdleHApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om51bWJlck9mQ29uc3RhbnRCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXJBc1ZlY3Rvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Omdsb2JhbE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2ZW5l
c3NBbmFseXNpcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZT
d2l0Y2hKdW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRT
d2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRj
aEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJTd2l0
Y2hKdW1wVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpldmFsQ29kZUNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZG9udEpJVEFueXRpbWVTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpsbGludEdldEJ5SWRXYXRjaHBvaW50TWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZKSVRFeGVjdXRl
Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZKSVRF
eGVjdXRlQ291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJlc2hvbGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0RXhlY3V0ZUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXphdGlvbkRlbGF5Q291bnRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3NyRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50T1NSRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkcmVzc09mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mT1NSRXhpdENvdW50ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0
ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mREZH
Q29tcGlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0RlYnVnZ2Vy
UmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRlYnVnZ2VyUmVx
dWVzdHNBZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZW1vdmVC
cmVha3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckRlYnVn
Z2VyUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Ondhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNsZWFyRXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlcGxhY2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGltZVNpbmNlQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6Ok1vZHVsZVByb2dyYW1Db2RlQmxv
Y2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjp2YXJpYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6Om51bVZhcmlhYmxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpFdmFsQ29kZUJsb2NrOjp1bmxpbmtlZEV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2RlQmxvY2s6OldlYkFzc2VtYmx5
Q29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp1bmNoZWNrZWRSKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2RlQmxvY2spOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9XZWJBc3NlbWJseUNvZGVCbG9jay5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aW5mZXJyZWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpoYXNIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1Nh
ZmVUb0NvbXB1dGVIYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNo
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9uZUxpbmUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2li
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjppZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnJlZ2lzdGVyTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3Rh
bnROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cmVnZXhwVG9Tb3VyY2VTdHJpbmcpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpyZWdleHBOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6ZGVidWdIb29rTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJp
bnRVbmFyeU9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludEJpbmFy
eU9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENvbmRpdGlvbmFs
SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkT3Ap
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpkdW1wU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6ZHVtcENoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpw
cmludEdldEJ5SWRDYWNoZVN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnByaW50Q2FsbE9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpw
cmludFB1dEJ5SWRPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFNv
dXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXJyYXlQcm9maWxpbmcpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBSYXJlQ2FzZVByb2ZpbGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBcml0aFByb2ZpbGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnByaW50TG9jYXRpb25BbmRPcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJP
cGVyYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c2l6ZUluQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6On5Db2RlQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldENvbnN0YW50UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
TnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OnZp
c2l0QWdncmVnYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFs
T1NSRW50cnlCbG9ja09yTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVzdGltYXRl
ZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9X
ZWFrUmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dGltZVRvTGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnNob3VsZE1hcmtUcmFuc2l0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyTExJ
bnRHZXRCeUlkQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFs
aXplTExJbnRJbmxpbmVDYWNoZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRTdHViSW5mb01hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjph
ZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFN0dWJJ
bmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRCeVZhbEluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVzZXRKSVREYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNl
bGluZUFsdGVybmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNl
bGluZVZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wdGlt
aXplZFJlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmhhbmRsZXJGb3JJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3
RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpyZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpo
YXNPcERlYnVnRm9yTGluZUFuZENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ0NhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ1BvbHltb3JwaGljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6dW5saW5rSW5jb21pbmdDYWxscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bmV3UmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJl
cGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb21wdXRlQ2Fw
YWJpbGl0eUxldmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVjdXJzaW9uQ2hlY2tGdW5jdG9yOjpSZWN1cnNpb25D
aGVja0Z1bmN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpSZWN1cnNpb25DaGVja0Z1bmN0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpSZWN1cnNpb25DaGVja0Z1
bmN0b3I6OmRpZFJlY3Vyc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5v
dGljZUluY29taW5nQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNldENhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyb3Vu
ZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
b3VudFJlb3B0aW1pemF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
dW1iZXJPZkRGR0NvbXBpbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
b2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpjbGlwVGhyZXNob2xkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGp1c3RlZENvdW50ZXJWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplTmV4dEludm9jYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVTb29uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3Vy
cmVudGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xk
Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hvdWxkUmVvcHRpbWl6ZU5vdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkZEFycmF5UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNvZGVPcmlnaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
dW1iZXJPZkRGR0lkZW50aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjppZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVB
bGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0YWNrUG9pbnRlck9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1c2VzT3Bjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6YmVnaW5WYWxpZGF0aW9uRGlkRmFpbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZW5kVmFsaWRhdGlvbkRpZEZhaWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkUmFyZUNhc2VQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9m
ZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFyaXRo
UHJvZmlsZUZvclBDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRh
a2VTcGVjaWFsRmFzdENhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNh
cGFiaWxpdHlMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0
QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpqaXRTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpkdW1wTWF0aElDU3RhdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxp
dmVuZXNzQW5hbHlzaXNTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9XZWJBc3Nl
bWJseUNvZGVCbG9jay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmguCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnVubGlua2VkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpu
dW1DYWxsZWVMb2NhbHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJl
c3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9m
ZnNldE9mTnVtUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YWx0ZXJuYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hS
ZWxhdGVkQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVj
aWFsaXphdGlvbktpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzU3Ry
aWN0TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZWNtYU1vZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ob3RJbW1lZGlhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1YkluZm9CZWdpbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3R1YkluZm9FbmQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxMaW5rSW5mb3NCZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbExpbmtJbmZvc0VuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklUQ29kZU1hcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Ynl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bWJlck9mSW5zdHJ1Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjppbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3Ry
dWN0aW9uQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENvZGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENvZGVPZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3duZXJFeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvd25lclNjcmlwdEV4ZWN1dGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRU
aGlzUmVnaXN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRoaXNSZWdp
c3Rlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXNlc0V2YWwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldFNjb3BlUmVnaXN0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNjb3BlUmVnaXN0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvZGVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpwdXRCeUlkQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzb3VyY2VP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpcnN0TGluZUNvbHVt
bk9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZKdW1w
VGFyZ2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6anVtcFRhcmdldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVudFZhbHVl
UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckFyZ3VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJP
ZlZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVl
UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mUmFyZUNhc2VQcm9maWxlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU2xvd0Nhc2UpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZkFycmF5UHJvZmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFycmF5UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0V4cHJlc3Npb25JbmZvKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNDb2RlT3JpZ2lucyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y2FuR2V0Q29kZU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y29kZU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6YWRkRnJlcXVlbnRFeGl0U2l0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzRXhpdFNpdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRQ
cm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
SWRlbnRpZmllcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlkZW50aWZp
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRDb25zdGFudCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkQ29uc3RhbnRMYXppbHkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDb25zdGFudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZ1bmN0aW9uRGVjbCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmdW5jdGlvbkV4cHIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlZ2V4cCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmFkZENvbnN0YW50QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudEJ1ZmZlckFzVmVjdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjb25zdGFudEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Z2xvYmFsT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaXZlbmVz
c0FuYWx5c2lzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN3
aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3dpdGNo
SnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhclN3aXRj
aEp1bXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzdHJpbmdTd2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmV2YWxDb2RlQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50R2V0QnlJZFdhdGNocG9pbnRNYXApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZkpJVEV4ZWN1dGVD
b3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRpb25Ub3RhbENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVjdXRlQ291bnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvc3JFeGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y291bnRPU1JFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRyZXNzT2ZPU1JFeGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZPU1JFeGl0Q291bnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRl
cldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZERkdD
b21waWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzRGVidWdnZXJS
ZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGVidWdnZXJSZXF1
ZXN0c0FkZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbW92ZUJy
ZWFrcG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRGVidWdn
ZXJSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2Rlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y2xlYXJFeGNlcHRpb25IYW5kbGVycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YXBwZW5kRXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVwbGFjZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp0aW1lU2luY2VDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6UHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJv
Z3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6Ok1vZHVsZVByb2dyYW1Db2RlQmxv
Y2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjp2YXJpYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6Om51bVZhcmlhYmxlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpFdmFsQ29kZUJsb2NrOjp1bmxpbmtlZEV2YWxDb2RlQmxvY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkV4ZWNTdGF0ZTo6dW5jaGVja2VkUik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5j
cHA6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
ICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
VGVzdFJ1bm5lclV0aWxzLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAg
KiBydW50aW1lL1dlYkFzc2VtYmx5RXhlY3V0YWJsZS5jcHA6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTVByb3RvdHlwZS5jcHA6CisKIDIwMTYtMTEtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgR0Mgc2hvdWxkIGJlIGluIGEgdGhyZWFkCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDgzMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5
MCw5ICsxOTAsOSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCiAgICAg
Ynl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCi0gICAgYnl0ZWNvZGUvQnl0
ZWNvZGVSZXdyaXRlci5jcHAKICAgICBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
LmNwcAogICAgIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKyAgICBieXRl
Y29kZS9CeXRlY29kZVJld3JpdGVyLmNwcAogICAgIGJ5dGVjb2RlL0NhbGxFZGdlLmNwcAogICAg
IGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKICAgICBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAKQEAgLTIwNCwxNCArMjA0LDE2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKICAgICBieXRlY29kZS9Db2RlVHlwZS5jcHAKICAgICBi
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAotICAgIGJ5dGVjb2RlL0RhdGFGb3JtYXQuY3Bw
CiAgICAgYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvRE9NSklUQWNj
ZXNzQ2FzZVBhdGNocG9pbnRQYXJhbXMuY3BwCisgICAgYnl0ZWNvZGUvRGF0YUZvcm1hdC5jcHAK
ICAgICBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCiAgICAgYnl0ZWNv
ZGUvRGVmZXJyZWRTb3VyY2VEdW1wLmNwcAorICAgIGJ5dGVjb2RlL0V2YWxDb2RlQmxvY2suY3Bw
CiAgICAgYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKICAgICBieXRlY29kZS9FeGl0S2lu
ZC5jcHAKICAgICBieXRlY29kZS9FeGl0aW5nSklUVHlwZS5jcHAKKyAgICBieXRlY29kZS9GdW5j
dGlvbkNvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAK
QEAgLTIyMSwxMSArMjIzLDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0
ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAog
ICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCisgICAgYnl0ZWNvZGUvTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAK
ICAgICBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKICAgICBieXRlY29k
ZS9PcGNvZGUuY3BwCiAgICAgYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCiAgICAgYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAorICAgIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxv
Y2suY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCiAgICAgYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBAIC0yNDYs
NiArMjUwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9WYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5jcHAKICAgICBieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuY3Bw
CiAgICAgYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKKyAgICBieXRlY29kZS9XZWJBc3NlbWJseUNv
ZGVCbG9jay5jcHAKIAogICAgIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKICAg
ICBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTM2LDYgKzExMzYsMTcgQEAKIAkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OTU1OUVEMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgKi87
IH07CiAJCTE0QTE1NjMyMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBMTU2MzAxMDk2
NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0YW5jZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8q
IEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRBQkRGNUUwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3Qu
Y3BwICovOyB9OworCQkxNEFEOTEwQzFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMDYx
RENBOTI5NDAwMTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suaCAqLzsgfTsKKwkJMTRBRDkxMEQxRENB
OTI5NDAwMTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEFEOTEwNzFEQ0E5Mjk0MDAxNEY5RkUgLyogRnVu
Y3Rpb25Db2RlQmxvY2suaCAqLzsgfTsKKwkJMTRBRDkxMEUxRENBOTI5NDAwMTRGOUZFIC8qIEds
b2JhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTRBRDkxMDgxRENBOTI5NDAwMTRGOUZFIC8qIEdsb2JhbENvZGVCbG9jay5oICovOyB9
OworCQkxNEFEOTEwRjFEQ0E5Mjk0MDAxNEY5RkUgLyogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMDkx
RENBOTI5NDAwMTRGOUZFIC8qIE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCAqLzsgfTsKKwkJMTRB
RDkxMTAxRENBOTI5NDAwMTRGOUZFIC8qIFByb2dyYW1Db2RlQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QUQ5MTBBMURDQTkyOTQwMDE0RjlG
RSAvKiBQcm9ncmFtQ29kZUJsb2NrLmggKi87IH07CisJCTE0QUQ5MTExMURDQTkyOTQwMDE0RjlG
RSAvKiBXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMEIxRENBOTI5NDAwMTRGOUZFIC8qIFdlYkFzc2VtYmx5
Q29kZUJsb2NrLmggKi87IH07CisJCTE0QUQ5MTE3MURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29k
ZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QUQ5MTEyMURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29kZUJsb2NrLmNwcCAqLzsgfTsKKwkJ
MTRBRDkxMTgxRENBOTdGRDAwMTRGOUZFIC8qIE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBRDkxMTMxRENB
OTdGRDAwMTRGOUZFIC8qIE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwICovOyB9OworCQkxNEFE
OTExOTFEQ0E5N0ZEMDAxNEY5RkUgLyogUHJvZ3JhbUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEFEOTExNDFEQ0E5N0ZEMDAxNEY5
RkUgLyogUHJvZ3JhbUNvZGVCbG9jay5jcHAgKi87IH07CisJCTE0QUQ5MTFBMURDQTk3RkQwMDE0
RjlGRSAvKiBXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEFEOTExNTFEQ0E5N0ZEMDAxNEY5RkUgLyogV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwICovOyB9OworCQkxNEFEOTExQjFEQ0E5N0ZEMDAxNEY5RkUgLyog
RnVuY3Rpb25Db2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRBRDkxMTYxRENBOTdGRDAwMTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2Nr
LmNwcCAqLzsgfTsKIAkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01h
cmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEI3MjMzRjEyRDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCAqLzsgfTsK
IAkJMTRCNzIzQjgxMkQ3REE2RjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRCNzIzNDAxMkQ3RDBE
QTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QjhFQzcyMEE1NjUyMDkwMDYyQkU1NCAvKiBD
b3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTYwQTRDRjA0QjNCM0U3MDA4QUU5NTIgLyogQ29yZUZvdW5kYXRp
b24uZnJhbWV3b3JrICovOyB9OwpAQCAtMzQ0Nyw2ICszNDU4LDE3IEBACiAJCTE0QUJCNDU0MDk5
QzJBMEYwMEUyQTI0RiAvKiBKU1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QUJERjVEMEE0MzdG
RUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQ2FsbGJhY2tPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTRBQkRGNUUwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsYmFja09iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTA2MURDQTkyOTQwMDE0RjlGRSAvKiBF
dmFsQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2YWxDb2Rl
QmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBRDkxMDcxRENBOTI5NDAw
MTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bmN0aW9uQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTE0QUQ5MTA4MURDQTkyOTQwMDE0RjlGRSAvKiBHbG9iYWxDb2RlQmxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2xvYmFsQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0QUQ5MTA5MURDQTkyOTQwMDE0RjlGRSAvKiBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZVByb2dy
YW1Db2RlQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBRDkxMEExRENB
OTI5NDAwMTRGOUZFIC8qIFByb2dyYW1Db2RlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJvZ3JhbUNvZGVCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNEFEOTEwQjFEQ0E5Mjk0MDAxNEY5RkUgLyogV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXNzZW1ibHlDb2RlQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBRDkxMTIxRENBOTdGRDAwMTRGOUZFIC8q
IEV2YWxDb2RlQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXZhbENvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QUQ5MTEz
MURDQTk3RkQwMDE0RjlGRSAvKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEFEOTExNDFEQ0E5N0ZEMDAxNEY5RkUgLyog
UHJvZ3JhbUNvZGVCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm9ncmFtQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRB
RDkxMTUxRENBOTdGRDAwMTRGOUZFIC8qIFdlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBRDkxMTYxRENBOTdGRDAwMTRGOUZFIC8q
IEZ1bmN0aW9uQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZ1bmN0aW9uQ29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTRCNzIzM0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEI3MjM0MDEyRDdEMERBMDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y2hpbmVTdGFja01hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEJBNzhG
MDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2xvdFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTcwMDksMjMgKzcwMzEsMjAgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVj
b2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlFM0E0
MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oICovLAot
CQkJCUUzRDI2NDI2MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bi5jcHAgKi8sCi0JCQkJRTNEMjY0MjcxRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uLmggKi8sCi0JCQkJRTNEMjY0MjgxRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVj
b2RlR3JhcGguaCAqLywKLQkJCQlFM0QyNjQyOTFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVS
ZXdyaXRlci5jcHAgKi8sCi0JCQkJRTNEMjY0MkExRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2Rl
UmV3cml0ZXIuaCAqLywKIAkJCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8sCiAJCQkJNTM3MEI0RjQx
QkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuaCAqLywKKwkJCQk3OUEyMjgzMzFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxl
LmNwcCAqLywKKwkJCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmgg
Ki8sCiAJCQkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwICovLAogCQkJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmggKi8sCiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmls
ZS5oICovLAotCQkJCTc5QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3Bw
ICovLAotCQkJCTc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLywK
IAkJCQlDMkZDQUUwQzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCAq
LywKIAkJCQlDMkZDQUUwRDE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVCYXNpY0Jsb2NrLmgg
Ki8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMu
aCAqLywKKwkJCQlFM0QyNjQyNjFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHZW5lcmF0b3Jp
ZmljYXRpb24uY3BwICovLAorCQkJCUUzRDI2NDI3MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29k
ZUdlbmVyYXRvcmlmaWNhdGlvbi5oICovLAorCQkJCUUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAv
KiBCeXRlY29kZUdyYXBoLmggKi8sCiAJCQkJNzA5NEM0REMxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwICovLAogCQkJCTcwOTRDNEREMUFFNDM5NTMwMDQx
QTJFRSAvKiBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggKi8sCiAJCQkJMEYyREQ4MEExQUIz
RDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCAqLywKQEAgLTcwMzMsNiArNzA1Miw4IEBA
CiAJCQkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAgKi8sCiAJCQkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oICovLAogCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCisJCQkJRTNEMjY0MjkxRDM4QzA0MjAwMEJF
MTc0IC8qIEJ5dGVjb2RlUmV3cml0ZXIuY3BwICovLAorCQkJCUUzRDI2NDJBMUQzOEMwNDIwMDBC
RTE3NCAvKiBCeXRlY29kZVJld3JpdGVyLmggKi8sCiAJCQkJMEY4ODVFMTAxODQ5QTNCRTAwRjFF
M0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1
IC8qIEJ5VmFsSW5mby5oICovLAogCQkJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5jcHAgKi8sCkBAIC03MDU5LDggKzcwODAsNiBAQAogCQkJCTBGMEI4M0E1MTRCQ0Y1MDQw
MDg4NUI0RiAvKiBDb2RlVHlwZS5oICovLAogCQkJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLywKIAkJCQkwRjZGQzc0RjE5NjExMEE4MDBFMUQwMkQg
LyogQ29tcGxleEdldFN0YXR1cy5oICovLAotCQkJCUUzQkZEMEI5MURBRjgwN0MwMDY1REVBMiAv
KiBET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8sCi0JCQkJRTNCRkQwQkEx
REFGODA3QzAwNjVERUEyIC8qIERPTUpJVEFjY2Vzc0Nhc2VQYXRjaHBvaW50UGFyYW1zLmggKi8s
CiAJCQkJNjJFM0Q1RUYxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwICovLAogCQkJ
CTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEZDNzEy
REMxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8s
CkBAIC03MDY5LDYgKzcwODgsMTAgQEAKIAkJCQlGRTUwNjg2NDFBRTI0NjM5MDAwOURBQjcgLyog
RGVmZXJyZWRTb3VyY2VEdW1wLmggKi8sCiAJCQkJMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8q
IERGR0V4aXRQcm9maWxlLmNwcCAqLywKIAkJCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyog
REZHRXhpdFByb2ZpbGUuaCAqLywKKwkJCQlFM0JGRDBCOTFEQUY4MDdDMDA2NURFQTIgLyogRE9N
SklUQWNjZXNzQ2FzZVBhdGNocG9pbnRQYXJhbXMuY3BwICovLAorCQkJCUUzQkZEMEJBMURBRjgw
N0MwMDY1REVBMiAvKiBET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5oICovLAorCQkJ
CTE0QUQ5MTEyMURDQTk3RkQwMDE0RjlGRSAvKiBFdmFsQ29kZUJsb2NrLmNwcCAqLywKKwkJCQkx
NEFEOTEwNjFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5oICovLAogCQkJCTk2OUEw
NzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggKi8sCiAJCQkJMTQxNDJFNTIx
Qjc5NkVERDAwRjRCRjRCIC8qIEV4ZWN1dGFibGVJbmZvLmggKi8sCiAJCQkJMEY1NkExRDQxNTAw
MUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwICovLApAQCAtNzA3OSwxMCArNzEw
MiwxMyBAQAogCQkJCTBGQjEwNTgzMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5oICovLAog
CQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8s
CiAJCQkJMEY2NjZFQkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmgg
Ki8sCisJCQkJMTRBRDkxMTYxRENBOTdGRDAwMTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2NrLmNw
cCAqLywKKwkJCQkxNEFEOTEwNzFEQ0E5Mjk0MDAxNEY5RkUgLyogRnVuY3Rpb25Db2RlQmxvY2su
aCAqLywKIAkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAg
Ki8sCiAJCQkJMEY5MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAqLywK
IAkJCQkwRjAzMzJDMTE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwICovLAog
CQkJCTBGMDMzMkMyMThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5oICovLAorCQkJ
CTE0QUQ5MTA4MURDQTkyOTQwMDE0RjlGRSAvKiBHbG9iYWxDb2RlQmxvY2suaCAqLywKIAkJCQkw
RjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKIAkJCQk3OTA1QkI2
NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFE
MTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmggKi8sCkBAIC03MTAxLDYgKzcxMjcsOCBA
QAogCQkJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKKwkJ
CQkxNEFEOTExMzFEQ0E5N0ZEMDAxNEY5RkUgLyogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAg
Ki8sCisJCQkJMTRBRDkxMDkxRENBOTI5NDAwMTRGOUZFIC8qIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaCAqLywKIAkJCQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuaCAqLywKIAkJCQkwRkQzRTQwMzFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb24uY3BwICovLAogCQkJCTBGRDNFNDA0MUI2MThCNjYwMEM4MEUxRSAvKiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oICovLApAQCAtNzExNCw2ICs3MTQyLDkgQEAKIAkJCQkw
RkY5Q0U3MjFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCAqLywKIAkJCQkw
Rjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCAqLywKIAkJ
CQkwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8sCisJ
CQkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMu
aCAqLywKKwkJCQkxNEFEOTExNDFEQ0E5N0ZEMDAxNEY5RkUgLyogUHJvZ3JhbUNvZGVCbG9jay5j
cHAgKi8sCisJCQkJMTRBRDkxMEExRENBOTI5NDAwMTRGOUZFIC8qIFByb2dyYW1Db2RlQmxvY2su
aCAqLywKIAkJCQkwRkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24u
Y3BwICovLAogCQkJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5oICovLAogCQkJCTBGMTVDRDIwMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3Bw
ICovLApAQCAtNzE1Nyw2ICs3MTg4LDggQEAKIAkJCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYg
LyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8q
IFdhdGNocG9pbnQuY3BwICovLAogCQkJCTBGOTE5RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRj
aHBvaW50LmggKi8sCisJCQkJMTRBRDkxMTUxRENBOTdGRDAwMTRGOUZFIC8qIFdlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcCAqLywKKwkJCQkxNEFEOTEwQjFEQ0E5Mjk0MDAxNEY5RkUgLyogV2ViQXNz
ZW1ibHlDb2RlQmxvY2suaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtNzY1Myw2ICs3Njg2LDcgQEAKIAkJCQkyNjlENjM2RTFC
RkJFNUQxMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUz
RTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMTRBRDkxMTExRENBOTI5NDAwMTRGOUZFIC8qIFdlYkFzc2VtYmx5Q29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzg1LDYgKzc4MTksNyBAQAogCQkJCTBG
MkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRBRDkxMEYxRENBOTI5NDAwMTRGOUZFIC8qIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjNFMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTgxNjIsNiArODE5Nyw3IEBACiAJCQkJMEYwQjgzQTkxNEJD
RjU2MjAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEz
NjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJF
MzEzODEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU3RhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTE0QUQ5MTEwMURDQTkyOTQwMDE0RjlGRSAvKiBQcm9ncmFtQ29kZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBp
biBIZWFkZXJzICovLAogCQkJCTUzNTU1NzE0MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmggaW4gSGVhZGVycyAqLywKQEAgLTgzNDgsNiArODM4NCw3IEBACiAJCQkJQkM3NTZGQzkwRTIw
MzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTEwMDdDMTE4N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTBFNEI2NDE4ODA5REQ1MDA2OEE0NkQg
LyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QUQ5
MTBDMURDQTkyOTQwMDE0RjlGRSAvKiBFdmFsQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTAzRkEyQTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1Nl
cnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFy
aXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzAxODVCRkFDQzAwN0U5NUFE
IC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKQEAgLTg1MzYsNiArODU3
Myw3IEBACiAJCQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51
bWJlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDQwRTE2RjVDRDAwQjM0NDYw
IC8qIE51bWJlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRBRDkxMEUxRENBOTI5
NDAwMTRGOUZFIC8qIEdsb2JhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2Qjcz
MjExQkRBMDhFRjAwMzMxQjg0IC8qIE51bWJlclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBOdW1lcmljU3RyaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1NTEzQTYxRDVBNjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTg2MDksNiArODY0Nyw3IEBACiAJCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMTRBRDkxMEQxRENBOTI5NDAwMTRGOUZFIC8qIEZ1bmN0aW9uQ29kZUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNl
V2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAwRUUwODQw
IC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtOTM2Miw2ICs5NDAxLDcgQEAK
IAkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBRDkxMUExRENBOTdGRDAwMTRGOUZF
IC8qIFdlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NThE
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1
OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTQzNiw2ICs5NDc2LDcgQEAKIAkJCQkxNDI4MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2Fs
bERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8q
IENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRBRDkxMTgxRENBOTdGRDAw
MTRGOUZFIC8qIE1vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVm
Zmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3MzYsNiArOTc3
Nyw3IEBACiAJCQkJMkFERkEyNjMxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzQxRkM3MDFEQUMzM0U1MDBFN0U0RDcgLyogQjNXYXNtQm91bmRz
Q2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYz
QzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEFEOTExOTFEQ0E5
N0ZEMDAxNEY5RkUgLyogUHJvZ3JhbUNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjAzMzJDMzE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4NTUxMDdFQzBFNzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDJFMzEzNTEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTAwODksNiArMTAxMzEsNyBAQAogCQkJCUE1RkQwMDdEMTg5
QjBCNEMwMDYzMzIzMSAvKiBTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1MDNGQTI1MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTVEOTNBNTE4NTAxMkE4MDA0MDBERUQgLyogU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE0QUQ5MTFCMURDQTk3RkQwMDE0RjlG
RSAvKiBGdW5jdGlvbkNvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDRjJGOTE4
NEVBRURBMDAyMzdGMTkgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
NENGMkY1MTg0RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI5OURBNTE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xMDE1NSw2ICsxMDE5OCw3IEBACiAJCQkJNzBCNzkxOTYxQzAyNEEyODAw
MjQ4MUUyIC8qIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUFEMkZDQkU0MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3MzIxNThFQkQ1ODAwNENCOUZGIC8qIFVEaXM4NkRp
c2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNEFEOTExNzFEQ0E5N0ZEMDAxNEY5
RkUgLyogRXZhbENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzZGMjc5NDE1RjEz
Qzk2MDA1MTdENjcgLyogVW5saW5rZWRDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQxNDJFNTUxQjc5NzNDMDAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUI1OUY4OTM5MTg5MUYyOUYwMEQ1Q0NEQyAvKiBVbmxpbmtl
ZEluc3RydWN0aW9uU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDIwODMw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtz
LmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE1IEBACiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2su
aCIKICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiR2V0UHV0
SW5mby5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKQEAgLTU3LDEwICs2
MCwxMSBAQAogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkxMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkxvd0xl
dmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlJlZHVjZVdoaXRl
c3BhY2UuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCkBAIC03MCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1i
bHlFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KQEAgLTk3LDY1ICsxMDIsNiBAQCBjb25zdCBDbGFzc0luZm8g
Q29kZUJsb2NrOjpzX2luZm8gPSB7CiAgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShDb2RlQmxvY2sp
CiB9OwogCi1jb25zdCBDbGFzc0luZm8gRnVuY3Rpb25Db2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAg
ICAiRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoRnVuY3Rpb25Db2RlQmxvY2spCi19OwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAg
IldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVU
SE9EX1RBQkxFKFdlYkFzc2VtYmx5Q29kZUJsb2NrKQotfTsKLSNlbmRpZgotCi1jb25zdCBDbGFz
c0luZm8gR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIkdsb2JhbENvZGVCbG9jayIs
ICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShHbG9iYWxDb2RlQmxv
Y2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0gewot
ICAgICJQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVU
SE9EX1RBQkxFKFByb2dyYW1Db2RlQmxvY2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0gewotICAgICJNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
IiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZVByb2dy
YW1Db2RlQmxvY2spCi19OwotCi1jb25zdCBDbGFzc0luZm8gRXZhbENvZGVCbG9jazo6c19pbmZv
ID0gewotICAgICJFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVf
TUVUSE9EX1RBQkxFKEV2YWxDb2RlQmxvY2spCi19OwotCi12b2lkIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sq
PihjZWxsKS0+fkZ1bmN0aW9uQ29kZUJsb2NrKCk7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi12b2lkIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBqc0Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+fldlYkFzc2VtYmx5Q29k
ZUJsb2NrKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+UHJv
Z3JhbUNvZGVCbG9jaygpOwotfQotCi12b2lkIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4o
Y2VsbCktPn5Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgRXZhbENvZGVCbG9j
azo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PEV2YWxDb2RlQmxvY2sqPihj
ZWxsKS0+fkV2YWxDb2RlQmxvY2soKTsKLX0KLQogQ1N0cmluZyBDb2RlQmxvY2s6OmluZmVycmVk
TmFtZSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMDgzMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNTAsMjQxICsxMDUwLDYgQEAgcHJpdmF0ZToKICAgICBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKIH07CiAKLS8vIFByb2dyYW0gY29kZSBp
cyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVj
dAotLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCi0KLWNsYXNzIEdsb2JhbENvZGVCbG9j
ayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Ci0gICAg
REVDTEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2Nr
JiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFz
c1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQot
ICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2Jh
bENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsK
LSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAg
ICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
KnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBQcm9n
cmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKLSAgICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUp
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQcm9ncmFtQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgUHJv
Z3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1
Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIFByb2dy
YW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotfTsKLQotY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2Rl
QmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7Ci0gICAg
REVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0
ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFw
KSkKLSAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAg
ICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhl
cik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0g
ICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAg
ICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
Q2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KQotICAgIHsKLSAgICB9Ci0KLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0g
ICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLX07Ci0KLWNs
YXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsKLQotICAg
IHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IEV2YWxDb2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVh
cCkpCi0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVj
dHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1
cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShW
TSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICB7Ci0gICAgICAgIEV2YWxD
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVC
bG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxD
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxv
Y2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVh
dGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlhYmxl
KGluZGV4KTsgfQotICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVubGlua2Vk
RXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBF
dmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
a1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLSAgICAg
ICAgCi0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFdmFs
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBz
dHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3Vy
Y2VQcm92aWRlciwgMCwgMSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1
bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5rZWRFdmFs
Q29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KLX07Ci0KLWNsYXNzIEZ1bmN0aW9u
Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBDb2Rl
QmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgRnVuY3Rpb25Db2Rl
QmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxv
Y2smIG90aGVyKQotICAgIHsKLSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkK
LSAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tT
dHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwK
LSAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsK
LSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93
bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwg
c291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9u
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBGdW5j
dGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAotICAgICAgICBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUs
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLQotI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKLWNsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9j
ayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lO
Rk87Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENv
cHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAg
ICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFdl
YkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRl
KFZNKiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVC
bG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZt
LT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25l
ckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQot
ICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCi0gICAgewotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotI2VuZGlmCi0KIGlubGluZSBS
ZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpAQCAtMTMxNCw0MiArMTA3OSw2IEBAIGlubGluZSB2
b2lkIENvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUgKICAgICBtX3Zpc2l0V2Vha2x5SGFzQmVl
bkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpm
b3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQotewotICAgIHN3aXRjaCAodHlwZSgp
KSB7Ci0gICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVC
bG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1F
eGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCi0gICAgICAgICAg
ICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9y
PihmdW5jdG9yKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRXZhbEV4ZWN1
dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5tX2V2YWxDb2Rl
QmxvY2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVC
bG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgRnVuY3Rv
ciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsK
LSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2Nr
Kj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKLSAgICAgICAgICAgIGNv
ZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAgICAgIGlmIChDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFj
aFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQotICAgICAg
ICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQogdGVtcGxh
dGUgPHR5cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgogSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6
OnByZXBhcmVGb3JFeGVjdXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29w
ZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0
Q29kZUJsb2NrKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxD
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzAzKQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTItMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2Ft
ZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFz
aWNCbG9ja0xvY2F0aW9uLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNs
dWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURl
Zi5oIgorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
LmgiCisjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgi
CisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1
ZGUgIkRGR1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJGdW5j
dGlvbkV4ZWN1dGFibGVEdW1wLmgiCisjaW5jbHVkZSAiR2V0UHV0SW5mby5oIgorI2luY2x1ZGUg
IklubGluZUNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAi
SklULmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgor
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5o
IgorI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJMTEludERhdGEu
aCIKKyNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKKyNpbmNsdWRlICJMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJMb3dMZXZlbElu
dGVycHJldGVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJQ
cm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgorI2luY2x1
ZGUgIlJlcGF0Y2guaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJTdGFja1Zpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1
ZGUgIlR5cGVMb2NhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCisjaW5j
bHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUgIlZNSW5saW5lcy5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9CYWdU
b0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1NpbXBsZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJp
bmdJbXBsLmg+CisKKyNpZiBFTkFCTEUoSklUKQorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRM
aXN0LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisjaW5jbHVkZSAiRlRMSklU
Q29kZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gQ29k
ZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkNvZGVCbG9jayIsIDAsIDAsCisgICAgQ1JFQVRFX01F
VEhPRF9UQUJMRShDb2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25Db2Rl
QmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25Db2RlQmxvY2spCit9OworCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5Q29kZUJs
b2NrOjpzX2luZm8gPSB7CisgICAgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgJkJhc2U6OnNfaW5m
bywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5Q29kZUJsb2NrKQorfTsK
KyNlbmRpZgorCitjb25zdCBDbGFzc0luZm8gR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7Cisg
ICAgIkdsb2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhP
RF9UQUJMRShHbG9iYWxDb2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8gUHJvZ3JhbUNv
ZGVCbG9jazo6c19pbmZvID0geworICAgICJQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5m
bywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb2dyYW1Db2RlQmxvY2spCit9OworCitj
b25zdCBDbGFzc0luZm8gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geworICAgICJN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVU
SE9EX1RBQkxFKE1vZHVsZVByb2dyYW1Db2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8g
RXZhbENvZGVCbG9jazo6c19pbmZvID0geworICAgICJFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNf
aW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEV2YWxDb2RlQmxvY2spCit9OworCit2
b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nh
c3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+fkZ1bmN0aW9uQ29kZUJsb2NrKCk7Cit9CisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCit2b2lkIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihj
ZWxsKS0+fldlYkFzc2VtYmx5Q29kZUJsb2NrKCk7Cit9CisjZW5kaWYKKwordm9pZCBQcm9ncmFt
Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8UHJvZ3JhbUNv
ZGVCbG9jayo+KGNlbGwpLT5+UHJvZ3JhbUNvZGVCbG9jaygpOworfQorCit2b2lkIE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Cit9
CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganND
YXN0PEV2YWxDb2RlQmxvY2sqPihjZWxsKS0+fkV2YWxDb2RlQmxvY2soKTsKK30KKworQ1N0cmlu
ZyBDb2RlQmxvY2s6OmluZmVycmVkTmFtZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb2RlVHlw
ZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgICAgICByZXR1cm4gIjxnbG9iYWw+IjsK
KyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICByZXR1cm4gIjxldmFsPiI7CisgICAgY2FzZSBG
dW5jdGlvbkNvZGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5pbmZlcnJlZE5hbWUoKS51dGY4KCk7CisgICAgY2FzZSBNb2R1
bGVDb2RlOgorICAgICAgICByZXR1cm4gIjxtb2R1bGU+IjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBDUkFTSCgpOworICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisgICAgfQorfQorCiti
b29sIENvZGVCbG9jazo6aGFzSGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9oYXNoOwor
fQorCitib29sIENvZGVCbG9jazo6aXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFpc0NvbXBpbGF0aW9uVGhyZWFkKCk7Cit9CisKK0NvZGVCbG9ja0hhc2ggQ29kZUJs
b2NrOjpoYXNoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzaCkgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc1NhZmVUb0NvbXB1dGVIYXNoKCkpOworICAgICAgICBtX2hhc2ggPSBDb2RlQmxv
Y2tIYXNoKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRpb25L
aW5kKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9oYXNoOworfQorCitDU3RyaW5nIENvZGVCbG9j
azo6c291cmNlQ29kZUZvclRvb2xzKCkgY29uc3QKK3sKKyAgICBpZiAoY29kZVR5cGUoKSAhPSBG
dW5jdGlvbkNvZGUpCisgICAgICAgIHJldHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291
cmNlKCkudG9VVEY4KCk7CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gc291
cmNlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWQgPSBleGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsK
KyAgICB1bnNpZ25lZCB1bmxpbmtlZFN0YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0T2Zmc2V0
KCk7CisgICAgdW5zaWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2Uo
KS5zdGFydE9mZnNldCgpOworICAgIGludCBkZWx0YSA9IGxpbmtlZFN0YXJ0T2Zmc2V0IC0gdW5s
aW5rZWRTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCByYW5nZVN0YXJ0ID0gZGVsdGEgKyB1bmxp
bmtlZC0+dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCgpOworICAgIHVuc2lnbmVkIHJhbmdlRW5k
ID0gZGVsdGEgKyB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKSArIHVubGlua2VkLT5zb3VyY2VMZW5n
dGgoKTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKAorICAgICAgICAiZnVuY3Rpb24gIiwKKyAgICAg
ICAgcHJvdmlkZXItPnNvdXJjZSgpLnN1YnN0cmluZyhyYW5nZVN0YXJ0LCByYW5nZUVuZCAtIHJh
bmdlU3RhcnQpLnV0ZjgoKSk7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlT25P
bmVMaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVkdWNlV2hpdGVzcGFjZShzb3VyY2VDb2Rl
Rm9yVG9vbHMoKSk7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpoYXNoQXNTdHJpbmdJZlBvc3Np
YmxlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSGFzaCgpIHx8IGlzU2FmZVRvQ29tcHV0ZUhhc2go
KSkKKyAgICAgICAgcmV0dXJuIHRvQ1N0cmluZyhoYXNoKCkpOworICAgIHJldHVybiAiPG5vLWhh
c2g+IjsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJl
YW0mIG91dCwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKSBjb25zdAoreworICAgIG91dC5wcmlu
dChpbmZlcnJlZE5hbWUoKSwgIiMiLCBoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkpOworICAgIG91
dC5wcmludCgiOlsiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iKTsKKyAgICBpZiAoISFtX2FsdGVy
bmF0aXZlKQorICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihhbHRlcm5hdGl2ZSgpKSwgIi0+
Iik7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIob3duZXJFeGVjdXRhYmxlKCkpLCAiLCAiLCBq
aXRUeXBlLCBjb2RlVHlwZSgpKTsKKworICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICBvdXQucHJp
bnQoIiwgIiwgaW5zdHJ1Y3Rpb25Db3VudCgpKTsKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09
IEpJVENvZGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgICAg
ICBvdXQucHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOworICAgIGlmIChvd25lclNj
cmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKE5l
dmVySW5saW5lKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJPcHRp
bWl6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJPcHRpbWl6ZSkiKTsKKyAgICBlbHNl
IGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJGVExPcHRpbWl6ZSgpKQorICAgICAg
ICBvdXQucHJpbnQoIiAoTmV2ZXJGVExPcHRpbWl6ZSkiKTsKKyAgICBpZiAob3duZXJTY3JpcHRF
eGVjdXRhYmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCIg
KERpZFRyeVRvRW50ZXJJbkxvb3ApIik7CisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
LT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7Cisg
ICAgaWYgKG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKQorICAgICAgICBvdXQucHJpbnQoIiAoSklU
RmFpbCkiKTsKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
ICYmIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQorICAgICAgICBvdXQucHJpbnQoIiAoRlRMRmFp
bCkiKTsKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUICYm
IG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCkKKyAgICAgICAgb3V0LnByaW50KCIgKEhhZEZUTFJl
cGxhY2VtZW50KSIpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit2b2lkIENvZGVCbG9jazo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUo
b3V0LCBqaXRUeXBlKCkpOworfQorCitzdGF0aWMgQ1N0cmluZyBpZE5hbWUoaW50IGlkMCwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhpZGVudC5pbXBs
KCksICIoQGlkIiwgaWQwLCAiKSIpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6cmVnaXN0ZXJO
YW1lKGludCByKSBjb25zdAoreworICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkK
KyAgICAgICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKKworICAgIHJldHVybiB0b0NTdHJpbmco
VmlydHVhbFJlZ2lzdGVyKHIpKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6OmNvbnN0YW50TmFt
ZShpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0YW50KGlu
ZGV4KTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1YWxSZWdpc3Rlcihp
bmRleCksICIpIik7Cit9CisKK3N0YXRpYyBDU3RyaW5nIHJlZ2V4cFRvU291cmNlU3RyaW5nKFJl
Z0V4cCogcmVnRXhwKQoreworICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8nLCAwLCAwLCAwLCAw
IH07CisgICAgaW50IGluZGV4ID0gMTsKKyAgICBpZiAocmVnRXhwLT5nbG9iYWwoKSkKKyAgICAg
ICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKKyAgICBpZiAocmVnRXhwLT5pZ25vcmVDYXNlKCkp
CisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7CisgICAgaWYgKHJlZ0V4cC0+bXVsdGls
aW5lKCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOworICAgIGlmIChyZWdFeHAtPnN0
aWNreSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3knOworICAgIGlmIChyZWdFeHAt
PnVuaWNvZGUoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd1JzsKKworICAgIHJldHVy
biB0b0NTdHJpbmcoIi8iLCByZWdFeHAtPnBhdHRlcm4oKS5pbXBsKCksIHBvc3RmaXgpOworfQor
CitzdGF0aWMgQ1N0cmluZyByZWdleHBOYW1lKGludCByZSwgUmVnRXhwKiByZWdleHApCit7Cisg
ICAgcmV0dXJuIHRvQ1N0cmluZyhyZWdleHBUb1NvdXJjZVN0cmluZyhyZWdleHApLCAiKEByZSIs
IHJlLCAiKSIpOworfQorCitORVZFUl9JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnSG9v
a05hbWUoaW50IGRlYnVnSG9va1R5cGUpCit7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxEZWJ1
Z0hvb2tUeXBlPihkZWJ1Z0hvb2tUeXBlKSkgeworICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZy
YW1lOgorICAgICAgICAgICAgcmV0dXJuICJkaWRFbnRlckNhbGxGcmFtZSI7CisgICAgICAgIGNh
c2UgV2lsbExlYXZlQ2FsbEZyYW1lOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxsTGVhdmVDYWxs
RnJhbWUiOworICAgICAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OgorICAgICAgICAgICAg
cmV0dXJuICJ3aWxsRXhlY3V0ZVN0YXRlbWVudCI7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVF
eHByZXNzaW9uOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxsRXhlY3V0ZUV4cHJlc3Npb24iOwor
ICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbToKKyAgICAgICAgICAgIHJldHVybiAid2ls
bEV4ZWN1dGVQcm9ncmFtIjsKKyAgICAgICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbToKKyAgICAg
ICAgICAgIHJldHVybiAiZGlkRXhlY3V0ZVByb2dyYW0iOworICAgICAgICBjYXNlIERpZFJlYWNo
QnJlYWtwb2ludDoKKyAgICAgICAgICAgIHJldHVybiAiZGlkUmVhY2hCcmVha3BvaW50IjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsK
K30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50VW5hcnlPcChQcmludFN0cmVhbSYgb3V0LCBFeGVj
U3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3Qg
Y2hhciogb3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworfQorCit2b2lkIENvZGVC
bG9jazo6cHJpbnRCaW5hcnlPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGlu
dCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3ApCit7Cisg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRD
b25kaXRpb25hbEp1bXAoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnN0cnVjdGlvbiosIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGludCBsb2NhdGlvbiwgY29uc3Qg
Y2hhciogb3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IG9m
ZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludGYoIiVzLCAlZCgtPiVkKSIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKK30KKwor
dm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0
ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0KQoreworICAgIGNv
bnN0IGNoYXIqIG9wOworICAgIHN3aXRjaCAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2Rl
SUQoaXQtPnUub3Bjb2RlKSkgeworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBvcCA9
ICJnZXRfYnlfaWQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90
b19sb2FkOgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfcHJvdG9fbG9hZCI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Vuc2V0OgorICAgICAgICBvcCA9ICJnZXRfYnlf
aWRfdW5zZXQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
CisgICAgICAgIG9wID0gImFycmF5X2xlbmd0aCI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJf
UVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisgICAgICAgIG9wID0gMDsKKyNlbmRp
ZgorICAgIH0KKyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOworICAg
IGl0ICs9IDQ7IC8vIEluY3JlbWVudCB1cCB0byB0aGUgdmFsdWUgcHJvZmlsZXIuCit9CisKK3N0
YXRpYyB2b2lkIGR1bXBTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogbmFt
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnByaW50Zigi
JXMgPSAlcCIsIG5hbWUsIHN0cnVjdHVyZSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoaWRlbnQuaW1wbCgpKTsKKyAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgIG91dC5wcmludGYoIiAob2Zmc2V0ID0g
JWQpIiwgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHVtcENoYWluKFByaW50U3RyZWFtJiBv
dXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7Cisg
ICAgb3V0LnByaW50ZigiY2hhaW4gPSAlcDogWyIsIGNoYWluKTsKKyAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKKyAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBjdXJyZW50U3RydWN0dXJl
ID0gY2hhaW4tPmhlYWQoKTsKKyAgICAgICAgICpjdXJyZW50U3RydWN0dXJlOworICAgICAgICAg
KytjdXJyZW50U3RydWN0dXJlKSB7CisgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgIGZp
cnN0ID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7
CisgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgY3VycmVudFN0cnVjdHVyZS0+
Z2V0KCksIGlkZW50KTsKKyAgICB9CisgICAgb3V0LnByaW50ZigiXSIpOworfQorCit2b2lkIENv
ZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0
YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZvTWFwJiBtYXApCit7CisgICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGxvY2F0
aW9uOworCisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKGlkZW50KTsgLy8gdGVs
bCB0aGUgY29tcGlsZXIgdG8gc2h1dCB1cCBpbiBjZXJ0YWluIHBsYXRmb3JtIGNvbmZpZ3VyYXRp
b25zLgorICAgIAorICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0
cnVjdGlvblswXS51Lm9wY29kZSkgPT0gb3BfZ2V0X2FycmF5X2xlbmd0aCkKKyAgICAgICAgb3V0
LnByaW50ZigiIGxsaW50KGFycmF5X2xlbmd0aCkiKTsKKyAgICBlbHNlIGlmIChTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQpIHsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
c3RydWN0dXJlSUQpOworICAgICAgICBvdXQucHJpbnRmKCIgbGxpbnQoIik7CisgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgIG91
dC5wcmludGYoIikiKTsKKyAgICAgICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29k
ZUlEKGluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZCkK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiBwcm90byglcCkiLCBpbnN0cnVjdGlvbls2XS51LnBv
aW50ZXIpOworICAgIH0KKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViUHRyID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkpIHsKKyAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0dWJQdHI7CisgICAgICAgIGlmIChzdHVi
SW5mby5yZXNldEJ5R0MpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAoUmVzZXQgQnkgR0MpIik7
CisgICAgICAgIAorICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOworICAgICAgICAgICAgCisg
ICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBzdHViID0gbnVsbHB0cjsKKyAgICAgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7CisgICAgICAgICAgICBiYXNl
U3RydWN0dXJlID0gc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAg
ICAgICAgICAgb3V0LnByaW50Zigic3R1YiIpOworICAgICAgICAgICAgc3R1YiA9IHN0dWJJbmZv
LnUuc3R1YjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5z
ZXQ6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJ1bnNldCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIG91dC5w
cmludGYoIkFycmF5TGVuZ3RoIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChiYXNlU3RydWN0
dXJlKSB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOworICAgICAgICAgICAgZHVtcFN0
cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3R1YikKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAqc3R1Yik7
CisKKyAgICAgICAgb3V0LnByaW50ZigiKSIpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hl
U3RhdHVzKFByaW50U3RyZWFtJiBvdXQsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAm
IG1hcCkKK3sKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgbG9jYXRpb247CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50
aWZpZXIoaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0o
aWRlbnQpOyAvLyB0ZWxsIHRoZSBjb21waWxlciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZv
cm0gY29uZmlndXJhdGlvbnMuCisKKyAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25bOF0u
dS5wdXRCeUlkRmxhZ3MpOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwor
ICAgICAgICBvdXQucHJpbnQoIiBsbGludCgiKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZUlEIG5l
d1N0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQobmV3U3RydWN0dXJlSUQpOworICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJw
cmV2Iiwgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Cisg
ICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBuZXdTdHJ1Y3R1cmUsIGlkZW50
KTsKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3
XS51LnN0cnVjdHVyZUNoYWluLmdldCgpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIs
ICIpOworICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7Cisg
ICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQ
dHIgPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0
QnlHQykKKyAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKKyAgICAgICAg
CisgICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2gg
KHN0dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJl
cGxhY2U6CisgICAgICAgICAgICBvdXQucHJpbnQoInJlcGxhY2UsICIpOworICAgICAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICAgICAgb3V0LnByaW50KCJzdHViLCAiLCAq
c3R1YkluZm8udS5zdHViKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBvdXQucHJpbnRmKCIpIik7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
bWFwKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJl
YW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9u
KiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgbWFwKQoreworICAg
IGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgIGludCBhcmdDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludChyZWdpc3Rlck5h
bWUoZHN0KSwgIiwgIiwgcmVnaXN0ZXJOYW1lKGZ1bmMpLCAiLCAiLCBhcmdDb3VudCwgIiwgIiwg
cmVnaXN0ZXJPZmZzZXQpOworICAgIG91dC5wcmludCgiICh0aGlzIGF0ICIsIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDAsIC1yZWdpc3Rlck9mZnNldCksICIpIik7CisgICAgaWYgKGNhY2hl
RHVtcE1vZGUgPT0gRHVtcENhY2hlcykgeworICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gaXRbMV0udS5jYWxsTGlua0luZm87CisgICAgICAgIGlmIChjYWxsTGlua0lu
Zm8tPmxhc3RTZWVuQ2FsbGVlKSB7CisgICAgICAgICAgICBvdXQucHJpbnRmKAorICAgICAgICAg
ICAgICAgICIgbGxpbnQoJXAsIGV4ZWMgJXApIiwKKyAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmxhc3RTZWVuQ2FsbGVlLmdldCgpLAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
bGFzdFNlZW5DYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoSklU
KQorICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBpbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGxv
Y2F0aW9uKSkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGluZm8tPmxhc3RT
ZWVuQ2FsbGVlKCk7CisgICAgICAgICAgICBpZiAodGFyZ2V0KQorICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0LCB0YXJnZXQtPmV4ZWN1dGFibGUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29k
ZTo6RlRMSklUKQorICAgICAgICAgICAgb3V0LnByaW50KCIgc3RhdHVzKCIsIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRm9yKHRoaXMsIGxvY2F0aW9uLCBtYXApLCAiKSIpOworI2Vsc2UKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKG1hcCk7CisjZW5kaWYKKyAgICB9CisgICAgKytpdDsKKyAgICArK2l0
OworICAgIGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsK
KyAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVj
U3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3Qg
Y2hhciogb3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IGlk
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1l
KGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
KyAgICBpdCArPSA1OworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcFNvdXJjZSgpCit7CisgICAg
ZHVtcFNvdXJjZShXVEY6OmRhdGFGaWxlKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcFNv
dXJjZShQcmludFN0cmVhbSYgb3V0KQoreworICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBvd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNGdW5j
dGlvbkV4ZWN1dGFibGUoKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CisgICAgICAgIFN0cmluZ1ZpZXcgc291cmNlID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5z
b3VyY2UoKS5wcm92aWRlcigpLT5nZXRSYW5nZSgKKyAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCksCisgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSArIDEpOyAvLyBUeXBlIHByb2ZpbGluZyBl
bmQgb2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSAnfScuCisgICAgICAgIAorICAg
ICAgICBvdXQucHJpbnQoImZ1bmN0aW9uICIsIGluZmVycmVkTmFtZSgpLCBzb3VyY2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG91dC5wcmludChleGVjdXRhYmxlLT5zb3VyY2UoKS52
aWV3KCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKCkKK3sKKyAgICBkdW1w
Qnl0ZWNvZGUoV1RGOjpkYXRhRmlsZSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYgb3V0KQoreworICAgIC8vIFdlIG9ubHkgdXNlIHRoZSBFeGVjU3Rh
dGUqIGZvciB0aGluZ3MgdGhhdCBkb24ndCBhY3R1YWxseSBsZWFkIHRvIEpTIGV4ZWN1dGlvbiwK
KyAgICAvLyBsaWtlIGNvbnZlcnRpbmcgYSBKU1N0cmluZyB0byBhIFN0cmluZy4gSGVuY2UgdGhl
IGdsb2JhbEV4ZWMgaXMgYXBwcm9wcmlhdGUuCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAKKyAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3Vu
dCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluc3RydWN0aW9ucygpLnNpemUo
KTsgaSArPSBvcGNvZGVMZW5ndGhzW2V4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGlu
c3RydWN0aW9ucygpW2ldLnUub3Bjb2RlKV0pCisgICAgICAgICsraW5zdHJ1Y3Rpb25Db3VudDsK
KworICAgIG91dC5wcmludCgqdGhpcyk7CisgICAgb3V0LnByaW50ZigKKyAgICAgICAgIjogJWx1
IG1faW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXM7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJl
Z2lzdGVyKHMpOyAlZCB2YXJpYWJsZShzKSIsCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAor
ICAgICAgICBtX251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlTG9jYWxzLCBtX251bVZhcnMpOwor
ICAgIG91dC5wcmludCgiOyBzY29wZSBhdCAiLCBzY29wZVJlZ2lzdGVyKCkpOworICAgIG91dC5w
cmludGYoIlxuIik7CisgICAgCisgICAgU3R1YkluZm9NYXAgc3R1YkluZm9zOworICAgIENhbGxM
aW5rSW5mb01hcCBjYWxsTGlua0luZm9zOworICAgIGdldFN0dWJJbmZvTWFwKHN0dWJJbmZvcyk7
CisgICAgZ2V0Q2FsbExpbmtJbmZvTWFwKGNhbGxMaW5rSW5mb3MpOworICAgIAorICAgIGNvbnN0
IEluc3RydWN0aW9uKiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgZHVtcEJ5
dGVjb2RlKG91dCwgZXhlYywgYmVnaW4sIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5mb3MpOwor
ICAgIAorICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgb3V0LnByaW50
ZigiXG5JZGVudGlmaWVyczpcbiIpOworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgaWQldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaSksIGlkZW50aWZpZXIoaSkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgIT0gbnVtYmVyT2ZJZGVudGlmaWVycygp
KTsKKyAgICB9CisKKyAgICBpZiAoIW1fY29uc3RhbnRSZWdpc3RlcnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CisgICAgICAgIHNpemVfdCBpID0g
MDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlQ29kZVJlcHJl
c2VudGF0aW9uRGVzY3JpcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgc3dpdGNoIChtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXSkgeworICAgICAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgICAgICAgICBzb3VyY2VD
b2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9ICI6IGluIHNvdXJjZSBhcyBkb3VibGUiOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgaW50ZWdlciI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3Ro
ZXI6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24g
PSAiIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG91dC5wcmludGYoIiAgIGsldSA9ICVzJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwg
dG9DU3RyaW5nKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpLmRhdGEoKSwgc291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24pOworICAgICAgICAgICAgKytpOworICAgICAgICB9
IHdoaWxlIChpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgIH0KKworICAgIGlm
IChzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpIHsKKyAg
ICAgICAgb3V0LnByaW50ZigiXG5tX3JlZ2V4cHM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGkgPSAw
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIHJlJXUgPSAlc1xuIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3VubGlua2Vk
Q29kZS0+cmVnZXhwKGkpKS5kYXRhKCkpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdo
aWxlIChpIDwgY291bnQpOworICAgIH0KKworICAgIGR1bXBFeGNlcHRpb25IYW5kbGVycyhvdXQp
OworICAgIAorICAgIGlmIChtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlN3aXRjaCBKdW1wIFRhYmxl
czpcbiIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgb3V0LnByaW50ZigiICAlMWQgPSB7XG4iLCBpKTsKKyAgICAgICAgICAgIGludCBlbnRyeSA9
IDA7CisgICAgICAgICAgICBWZWN0b3I8aW50MzJfdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmVuZCgpOworICAg
ICAgICAgICAgZm9yIChWZWN0b3I8aW50MzJfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3Jh
cmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0uYnJhbmNoT2Zmc2V0cy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyLCArK2VudHJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCEqaXRlcikK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgb3V0LnByaW50
ZigiXHRcdCU0ZCA9PiAlMDRkXG4iLCBlbnRyeSArIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlc1tpXS5taW4sICppdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiAgICAgIH1cbiIpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChpIDwg
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7CisgICAgfQorICAgIAorICAg
IGlmIChtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlxuU3RyaW5nIFN3aXRjaCBKdW1wIFRh
YmxlczpcbiIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgb3V0LnByaW50ZigiICAlMWQgPSB7XG4iLCBpKTsKKyAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZz
ZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgaXRlci0+a2V5LT51dGY4KCkuZGF0YSgp
LCBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgb3V0LnByaW50ZigiICAg
ICAgfVxuIik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnRmKCJcbiIpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEV4Y2VwdGlvbkhhbmRsZXJz
KFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEt
Pm1fZXhjZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlxu
RXhjZXB0aW9uIEhhbmRsZXJzOlxuIik7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBvdXQucHJpbnRmKCJcdCAlZDogeyBz
dGFydDogWyU0ZF0gZW5kOiBbJTRkXSB0YXJnZXQ6IFslNGRdIH0gJXNcbiIsCisgICAgICAgICAg
ICAgICAgaSArIDEsIGhhbmRsZXIuc3RhcnQsIGhhbmRsZXIuZW5kLCBoYW5kbGVyLnRhcmdldCwg
aGFuZGxlci50eXBlTmFtZSgpKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAo
aSA8IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpiZWdpbkR1bXBQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgYm9v
bCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3sKKyAgICBpZiAoaGFzUHJpbnRlZFByb2ZpbGluZykg
eworICAgICAgICBvdXQucHJpbnQoIjsgIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgb3V0LnByaW50KCIgICAgIik7CisgICAgaGFzUHJpbnRlZFByb2ZpbGluZyA9IHRydWU7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgICsraXQ7
CisgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LnByb2ZpbGUtPmJyaWVmRGVzY3JpcHRp
b24obG9ja2VyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQorICAgICAgICByZXR1
cm47CisgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Cisg
ICAgb3V0LnByaW50KGRlc2NyaXB0aW9uKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBBcnJh
eVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgCisgICAgKytpdDsKKyAgICBpZiAoIWl0LT51LmFycmF5UHJvZmlsZSkK
KyAgICAgICAgcmV0dXJuOworICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVBy
b2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyLCB0aGlzKTsKKyAgICBpZiAoIWRlc2NyaXB0
aW9uLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91
dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0LnByaW50KGRlc2NyaXB0aW9uKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlLCBib29sJiBoYXNQcmlu
dGVkUHJvZmlsaW5nKQoreworICAgIGlmICghcHJvZmlsZSB8fCAhcHJvZmlsZS0+bV9jb3VudGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKKyAgICBvdXQucHJpbnQobmFtZSwgcHJvZmlsZS0+bV9jb3VudGVyKTsK
K30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0mIG91dCwg
QXJpdGhQcm9maWxlKiBwcm9maWxlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQoreworICAg
IGlmICghcHJvZmlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJlZ2luRHVtcFByb2Zp
bGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIG91dC5wcmludCgicmVzdWx0czog
IiwgKnByb2ZpbGUpOworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbkFuZE9wKFBy
aW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiwgY29uc3QgY2hhciogb3ApCit7CisgICAgb3V0LnByaW50ZigiWyU0ZF0gJS0xN3MgIiwg
bG9jYXRpb24sIG9wKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50TG9jYXRpb25PcEFuZFJl
Z2lzdGVyT3BlcmFuZChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2Nh
dGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5k
KQoreworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3Ap
OworICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKG9wZXJhbmQpLmRhdGEoKSk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwg
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0
aW9uKiYgaXQsCisgICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiBjYWxsTGlua0luZm9zKQoreworICAgIGludCBsb2NhdGlvbiA9IGl0IC0gYmVn
aW47CisgICAgYm9vbCBoYXNQcmludGVkUHJvZmlsaW5nID0gZmFsc2U7CisgICAgT3Bjb2RlSUQg
b3Bjb2RlID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsK
KyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2VudGVyOiB7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbnRlciIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfc2Nv
cGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZ2V0X3Njb3BlIiwgcjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czogeworICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRf
YXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9jbG9uZWRfYXJn
dW1lbnRzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
YXJndW1lbnRfY291bnQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiYXJndW1lbnRfY291bnQiLCByMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRPZmZzZXQgPSAoKytp
dCktPnUudW5zaWduZWRWYWx1ZTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9yZXN0Iik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1Iiwg
YXJndW1lbnRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZ2V0X3Jlc3RfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnRPZmZzZXQgPSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgY2FjaGVk
RnVuY3Rpb24gPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV90aGlzIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsICV1LCAldSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSwgY2FjaGVkRnVu
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90
b190aGlzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInRvX3RoaXMiLCByMCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9ICgrK2l0KS0+dS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJl
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBjYWNoZShzdHJ1Y3QgPSAiLCBSYXdQb2lu
dGVyKHN0cnVjdHVyZSksICIpIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgKCsraXQp
LT51LnRvVGhpc1N0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2NoZWNrX3RkejogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9jaGVja190ZHoiLCByMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaW5m
ZXJyZWRJbmxpbmVDYXBhY2l0eSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X29iamVjdCIpOwor
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBvYmpl
Y3QgYWxsb2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5Iik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoYXJndikuZGF0YSgpLCBhcmdjKTsKKyAgICAgICAgICAgICsraXQ7
IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CisgICAgICAg
ICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3Ro
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXlfd2l0aF9zaXplIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShsZW5ndGgpLmRhdGEoKSk7CisgICAgICAgICAgICArK2l0OyAvLyBTa2lwIGFycmF5IGFs
bG9jYXRpb24gcHJvZmlsZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXlfYnVm
ZmVyIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQsICVkIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCBhcmd2LCBhcmdjKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJy
YXkgYWxsb2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByZTAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5l
d19yZWdleHAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCltX3VubGlu
a2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMiLCByZWdleHBOYW1lKHJlMCwgcmVnZXhwKHJlMCkpLmRhdGEoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiYmFkX3JlZ2V4cCglZCkiLCByZTApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tb3Y6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJtb3YiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVf
dHlwZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICArK2l0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAg
ICAgICArK2l0OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfcHJvZmlsZV90eXBlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6IHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gKCsraXQpLT51LmJhc2lj
QmxvY2tMb2NhdGlvbjsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgInByb2ZpbGVfY29udHJvbF9mbG93Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCJbJWQsICVkXSIsIGJhc2ljQmxvY2tMb2NhdGlvbi0+c3RhcnRPZmZzZXQoKSwgYmFz
aWNCbG9ja0xvY2F0aW9uLT5lbmRPZmZzZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibm90Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2VxOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZXEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZXFfbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXE6IHsKKyAgICAgICAgICAgIHByaW50Qmlu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXEiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKKyAgICAgICAgICAgIHBy
aW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcV9udWxsIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7CisgICAg
ICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic3RyaWN0ZXEi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbnN0cmlj
dGVxOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibnN0cmljdGVxIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2xlc3M6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJsZXNzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2xlc3NlcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImxlc3NlcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9ncmVhdGVyOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ3JlYXRlciIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9ncmVhdGVyZXE6IHsKKyAgICAgICAgICAgIHByaW50
QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJncmVhdGVyZXEiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW5jOiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25P
cEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluYyIsIHIwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVjOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRl
YyIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
dG9fbnVtYmVyOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJ0b19udW1iZXIiKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQs
IGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfdG9fc3RyaW5nOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b19zdHJpbmciKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgICAgICBwcmlu
dFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZWdhdGUiKTsKKyAgICAgICAgICAg
ICsraXQ7IC8vIG9wX25lZ2F0ZSBoYXMgYW4gZXh0cmEgb3BlcmFuZCBmb3IgdGhlIEFyaXRoUHJv
ZmlsZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYWRk
OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
YWRkIik7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJtdWwiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RpdjogeworICAgICAgICAgICAg
cHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRpdiIpOworICAgICAgICAg
ICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
bW9kOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibW9kIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3BvdzogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInBvdyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9zdWI6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJzdWIiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2xzaGlmdDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxzaGlmdCIpOworICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyc2hpZnQiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdXJzaGlmdDog
eworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVy
c2hpZnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Yml0YW5kOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiYml0YW5kIik7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKKyAgICAgICAgICAgIHByaW50Qmlu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXR4b3IiKTsKKyAgICAgICAgICAgICsr
aXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdG9y
OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Yml0b3IiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm92
ZXJyaWRlc19oYXNfaW5zdGFuY2UiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5zdGFuY2VvZiIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1
c3RvbTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJpbnN0YW5jZW9mX2N1c3RvbSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
cywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Vuc2lnbmVkOiB7Cisg
ICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ1bnNpZ25l
ZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90eXBl
b2Y6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
InR5cGVvZiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9pc19lbXB0eTogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiaXNfZW1wdHkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc191bmRlZmluZWQiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfYm9vbGVhbiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19udW1iZXI6IHsK
KyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX251
bWJlciIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9p
c19jZWxsX3dpdGhfdHlwZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCB0eXBlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19jZWxsX3dpdGhfdHlwZSIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX29iamVjdDogeworICAgICAgICAgICAgcHJpbnRV
bmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfb2JqZWN0Iik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOiB7
CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19v
YmplY3Rfb3JfbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9pc19mdW5jdGlvbjogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiaXNfZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW46IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidHJ5X2dl
dF9ieV9pZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRl
bnRpZmllcihpZDApKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91
dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3Byb3RvX2xvYWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Vuc2V0OgorICAgICAgICBj
YXNlIG9wX2dldF9hcnJheV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0KTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZENhY2hlU3Rh
dHVzKG91dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CisgICAgICAgICAgICBkdW1wVmFs
dWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6IHsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImdldF9ieV9pZF93aXRoX3RoaXMiKTsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjIpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkp
OworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsX3dpdGhfdGhpczogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfdmFsX3dpdGhfdGhpcyIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjMpLmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3B1dF9ieV9pZDogeworICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJ
ZENhY2hlU3RhdHVzKG91dCwgbG9jYXRpb24sIHN0dWJJbmZvcyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9p
ZF93aXRoX3RoaXMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFs
X3dpdGhfdGhpczogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfdmFsX3dpdGhfdGhpcyIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9n
ZXR0ZXJfYnlfaWQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInB1dF9nZXR0ZXJfYnlfaWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50
aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lk
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBuMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJw
dXRfc2V0dGVyX2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkp
LmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwg
bjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
YnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInB1dF9nZXR0ZXJfYnlfdmFsIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgbjAsIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3NldHRlcl9ieV92YWwi
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIy
KS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9kZWZpbmVfZGF0YV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJkZWZpbmVfZGF0YV9wcm9wZXJ0eSIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjMpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHIzID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjQgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIzKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyNCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
ZGVsX2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBp
ZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV92YWwiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X3ZhbCIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcEFy
cmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAicHV0X2J5X3ZhbF9kaXJlY3QiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1bXBBcnJheVByb2Zp
bGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogeworICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVsX2J5
X3ZhbCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5k
YXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaW5kZXg6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgdW5zaWduZWQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2luZGV4Iik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXUsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIG4wLCBy
ZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2ptcDogeworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiam1wIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlZCgtPiVkKSIsIG9m
ZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1
bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9uLCAianRydWUiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CisgICAgICAgICAg
ICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJq
ZmFsc2UiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
amVxX251bGw6IHsKKyAgICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywg
YmVnaW4sIGl0LCBsb2NhdGlvbiwgImplcV9udWxsIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRD
b25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9uLCAiam5lcV9udWxs
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2puZXFf
cHRyOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIFNwZWNpYWw6OlBvaW50ZXIgcG9pbnRlciA9ICgrK2l0KS0+dS5zcGVjaWFsUG9pbnRlcjsK
KyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpuZXFfcHRyIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQgKCVwKSwgJWQoLT4lZCkiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxPYmplY3QtPmFjdHVhbFBvaW50ZXJG
b3IocG9pbnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgKytp
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6
IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJqbGVzcyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
LCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2psZXNzZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbGVzc2Vx
Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9u
ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfamdyZWF0ZXI6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqZ3JlYXRlciIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJqZ3JlYXRlcmVxIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5sZXNzIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
am5sZXNzZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3NlcSIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImpuZ3JlYXRlciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgt
PiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
b2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5ncmVhdGVy
ZXEiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRp
b24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9sb29wX2hpbnQ6IHsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImxvb3BfaGludCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF93YXRjaGRvZzogeworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAid2F0Y2hkb2ciKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibG9nX3NoYWRvd19jaGlja2VuX3RhaWwiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3N3aXRjaF9pbW06IHsKKyAgICAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJzd2l0Y2hfaW1tIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCks
ICVzIiwgdGFibGVJbmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0
LCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7CisgICAgICAg
ICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY3J1
dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic3dpdGNoX2NoYXIiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwgJXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0
VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFtZShzY3J1dGluZWVS
ZWdpc3RlcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogeworICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInN3aXRjaF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVk
LCAlZCgtPiVkKSwgJXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRl
ZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm5ld19mdW5jIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYl
ZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
ZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19nZW5lcmF0b3JfZnVuYyIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6IHsKKyAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hc3luY19m
dW5jIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm5ld19mdW5jX2V4cCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jX2V4cCIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJu
ZXdfYXN5bmNfZnVuY19leHAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVk
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3NldF9mdW5j
dGlvbl9uYW1lOiB7CisgICAgICAgICAgICBpbnQgZnVuY1JlZyA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IG5hbWVSZWcgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInNldF9mdW5j
dGlvbl9uYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUoZnVuY1JlZykuZGF0YSgpLCByZWdpc3Rlck5hbWUobmFtZVJlZykuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAg
ICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsIiwgRHVtcENh
Y2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDogeworICAgICAgICAg
ICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0YWlsX2NhbGwiLCBEdW1w
Q2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAg
ICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGxfZXZhbCIsIERv
bnREdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgY2FsbGVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgdGhpc1ZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgYXJndW1lbnRzID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RG
cmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCB2YXJBcmdP
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBvcE5hbWU7CisgICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX2NhbGxf
dmFyYXJncykKKyAgICAgICAgICAgICAgICBvcE5hbWUgPSAiY2FsbF92YXJhcmdzIjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAg
ICAgICAgICBvcE5hbWUgPSAiY29uc3RydWN0X3ZhcmFyZ3MiOworICAgICAgICAgICAgZWxzZSBp
ZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAgICAgICAgICAgIG9wTmFt
ZSA9ICJ0YWlsX2NhbGxfdmFyYXJncyI7CisgICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG9wTmFtZSA9
ICJ0YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMiOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3BOYW1lKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUo
cmVzdWx0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHRoaXNWYWx1ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0
RnJlZVJlZ2lzdGVyLCB2YXJBcmdPZmZzZXQpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmls
aW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3JldDogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rl
ck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyZXQiLCByMCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAg
ICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb25zdHJ1Y3QiLCBE
dW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGNvdW50ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJzdHJjYXQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNvdW50KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZl
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fcHJpbWl0aXZlIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBp
dFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBpdFs0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19p
bmRleGVkX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAl
cCIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAg
ICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkgLSAxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0
b3IgPSBpdFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Iik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFt
ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAg
IGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkgLSAxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3Bl
cnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19nZW5lcmljX3Byb3BlcnR5Iik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1l
KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGluZGV4ID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3Ig
PSBpdFs1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBp
dFs2XS51LnByb2ZpbGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZGlyZWN0X3BuYW1lIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRv
cikuZGF0YSgpLCBwcm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2RpcmVjdF9wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvciIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
YmFzZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKKyAgICAgICAgICAg
IGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9
IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
ZW51bWVyYXRvcikuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKSAt
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCByZWdp
c3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RI
KG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAg
IGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFsy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJvcF90b19pbmRleF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4
KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF90b19pbmRleF9z
dHJpbmcpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfcHVzaF93aXRoX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgbmV3U2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBjdXJyZW50U2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1c2hfd2l0
aF9zY29wZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKG5ld1Njb3BlKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShjdXJyZW50U2NvcGUpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6IHsKKyAgICAgICAgICAgIGludCBk
c3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwYXJlbnRTY29wZSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiZ2V0X3BhcmVudF9zY29wZSIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocGFy
ZW50U2NvcGUpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CisgICAgICAgICAgICBpbnQg
ZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZSA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGluaXRpYWxWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXMsICVzIiwgCisgICAgICAgICAgICAgICAgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHN5bWJvbFRhYmxlKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShpbml0aWFsVmFsdWUpLmRhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93OiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRocm93Iiwg
cjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90aHJv
d19zdGF0aWNfZXJyb3I6IHsKKyAgICAgICAgICAgIGludCBrMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgRXJyb3JUeXBlIGsxID0gc3RhdGljX2Nhc3Q8RXJyb3JUeXBlPigoKytp
dCktPnUudW5zaWduZWRWYWx1ZSk7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0aHJvd19zdGF0aWNfZXJyb3IiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAiLCBjb25zdGFudE5hbWUoazApLmRhdGEoKSk7CisgICAgICAgICAg
ICBvdXQucHJpbnQoazEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9kZWJ1ZzogeworICAgICAgICAgICAgaW50IGRlYnVnSG9va1R5cGUgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBoYXNCcmVha3BvaW50RmxhZyA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZGVidWciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCIsIGRl
YnVnSG9va05hbWUoZGVidWdIb29rVHlwZSksIGhhc0JyZWFrcG9pbnRGbGFnKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYXNzZXJ0OiB7CisgICAgICAg
ICAgICBpbnQgY29uZGl0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
bGluZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYXNzZXJ0Iik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJWQiLCByZWdpc3Rlck5hbWUoY29uZGl0aW9uKS5kYXRhKCksIGxpbmUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbmQ6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZW5kIiwg
cjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNv
bHZlX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oKCsraXQpLT51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaW50IGRlcHRoID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB2b2lk
KiBwb2ludGVyID0gKCsraXQpLT51LnBvaW50ZXI7CisgICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyZXNvbHZlX3Njb3BlIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCA8JXM+LCAlZCwgJXAiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50
aWZpZXIoaWQwKSkuZGF0YSgpLCByZXNvbHZlVHlwZU5hbWUocmVzb2x2ZVR5cGUpLCBkZXB0aCwg
cG9pbnRlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2dldF9mcm9tX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gR2V0UHV0SW5mbygoKytpdCktPnUub3BlcmFuZCk7CisgICAgICAgICAgICArK2l0
OyAvLyBTdHJ1Y3R1cmUKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJh
bmQ7IC8vIE9wZXJhbmQKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9mcm9tX3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJpbnQo
cmVnaXN0ZXJOYW1lKHIwKSwgIiwgIiwgcmVnaXN0ZXJOYW1lKHIxKSk7CisgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlkMCkgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsIGFub255bW91cyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpKTsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiLCAiLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSwgIjwiLCByZXNv
bHZlTW9kZU5hbWUoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpKSwgInwiLCByZXNvbHZlVHlwZU5h
bWUoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpKSwgInwiLCBpbml0aWFsaXphdGlvbk1vZGVOYW1l
KGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLCAiPiwgIiwgb3BlcmFuZCk7CisgICAg
ICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF90b19z
Y29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdl
dFB1dEluZm8oKCsraXQpLT51Lm9wZXJhbmQpOworICAgICAgICAgICAgKytpdDsgLy8gU3RydWN0
dXJlCisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9ICgrK2l0KS0+dS5vcGVyYW5kOyAvLyBPcGVy
YW5kCisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJwdXRfdG9fc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludChyZWdpc3Rlck5hbWUo
cjApKTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5U
X01BWCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgYW5vbnltb3VzIik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIGlkTmFtZShpZDAsIGlk
ZW50aWZpZXIoaWQwKSkpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIHJlZ2lzdGVyTmFt
ZShyMSksICIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29sdmVNb2RlTmFtZShn
ZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFtZShnZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUoZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSksICI+LCA8c3RydWN0dXJlPiwgIiwgb3BlcmFuZCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3Vt
ZW50czogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9mcm9tX2FyZ3VtZW50cyIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGlu
ZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
InB1dF90b19hcmd1bWVudHMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgb2Zmc2V0LCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBkdW1w
UmFyZUNhc2VQcm9maWxlKG91dCwgInJhcmUgY2FzZTogIiwgcmFyZUNhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQobG9jYXRpb24pLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB7CisgICAg
ICAgIGR1bXBBcml0aFByb2ZpbGUob3V0LCBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChs
b2NhdGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICBWZWN0b3I8REZHOjpGcmVxdWVudEV4aXRTaXRlPiBleGl0U2l0ZXMgPSBl
eGl0UHJvZmlsZSgpLmV4aXRTaXRlc0Zvcihsb2NhdGlvbik7CisgICAgaWYgKCFleGl0U2l0ZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludCgiICEhIGZyZXF1ZW50IGV4aXRzOiAiKTsK
KyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhpdFNpdGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBleGl0U2l0ZXNbaV0ua2luZCgpLCAiICIsIGV4aXRTaXRlc1tpXS5qaXRUeXBlKCkpOworICAg
IH0KKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgb3V0LnByaW50KCJcbiIpOworfQorCit2
b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LAorICAgIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYgY2FsbExpbmtJbmZvcykKK3sKKyAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIGNvbnN0IEluc3RydWN0aW9u
KiBpdCA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldDsKKyAgICBkdW1w
Qnl0ZWNvZGUob3V0LCBleGVjLCBpbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBpdCwgc3R1YkluZm9z
LCBjYWxsTGlua0luZm9zKTsKK30KKworI2RlZmluZSBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SKG1h
Y3JvKSBcCisgICAgbWFjcm8oaW5zdHJ1Y3Rpb25zKSBcCisgICAgbWFjcm8oY2FsbExpbmtJbmZv
cykgXAorICAgIG1hY3JvKGxpbmtlZENhbGxlckxpc3QpIFwKKyAgICBtYWNybyhpZGVudGlmaWVy
cykgXAorICAgIG1hY3JvKGZ1bmN0aW9uRXhwcmVzc2lvbnMpIFwKKyAgICBtYWNybyhjb25zdGFu
dFJlZ2lzdGVycykKKworI2RlZmluZSBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX1JBUkVfREFUQSht
YWNybykgXAorICAgIG1hY3JvKHJlZ2V4cHMpIFwKKyAgICBtYWNybyhmdW5jdGlvbnMpIFwKKyAg
ICBtYWNybyhleGNlcHRpb25IYW5kbGVycykgXAorICAgIG1hY3JvKHN3aXRjaEp1bXBUYWJsZXMp
IFwKKyAgICBtYWNybyhzdHJpbmdTd2l0Y2hKdW1wVGFibGVzKSBcCisgICAgbWFjcm8oZXZhbENv
ZGVDYWNoZSkgXAorICAgIG1hY3JvKGV4cHJlc3Npb25JbmZvKSBcCisgICAgbWFjcm8obGluZUlu
Zm8pIFwKKyAgICBtYWNybyhjYWxsUmV0dXJuSW5kZXhWZWN0b3IpCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9y
KQoreworICAgIHJldHVybiB2ZWN0b3IuY2FwYWNpdHkoKSAqIHNpemVvZihUKTsKK30KKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgUHV0VG9TY29wZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFp
bCB7CitwdWJsaWM6CisgICAgUHV0VG9TY29wZUZpcmVEZXRhaWwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKKyAgICAgICAgLCBtX2lkZW50KGlkZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBvdXQucHJpbnQoIkxpbmtpbmcgcHV0X3RvX3Njb3BlIGluICIsIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAoanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpLCAiIGZvciAiLCBtX2lkZW50KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9j
ayYgb3RoZXIpCisgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9i
amVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVy
Lm1fbnVtQ2FsbGVlTG9jYWxzKQorICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKKyAg
ICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisjaWYgRU5BQkxFKEpJVCkKKyAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCisjZW5k
aWYKKyAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFs
c2UpCisgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQorICAgICwg
bV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCisgICAgLCBtX2NvZGVUeXBlKG90
aGVyLm1fY29kZVR5cGUpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgdGhpcywg
b3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50
KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAg
LCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92
bSwgdGhpcywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBtX3ZtKG90aGVy
Lm1fdm0pCisgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKKyAgICAs
IG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQorICAgICwgbV9zY29wZVJlZ2lz
dGVyKG90aGVyLm1fc2NvcGVSZWdpc3RlcikKKyAgICAsIG1faGFzaChvdGhlci5tX2hhc2gpCisg
ICAgLCBtX3NvdXJjZShvdGhlci5tX3NvdXJjZSkKKyAgICAsIG1fc291cmNlT2Zmc2V0KG90aGVy
Lm1fc291cmNlT2Zmc2V0KQorICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQob3RoZXIubV9m
aXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1f
Y29uc3RhbnRSZWdpc3RlcnMpCisgICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihvdGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKKyAgICAsIG1f
ZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCisgICAgLCBtX2Z1bmN0aW9uRXhw
cnMob3RoZXIubV9mdW5jdGlvbkV4cHJzKQorICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAg
ICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6Om5vdygpKQoreworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZh
bHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKworICAgIEFTU0VSVChoZWFwKCktPmlz
RGVmZXJyZWQoKSk7CisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisg
ICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworfQorCit2b2lkIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVC
bG9jayYgb3RoZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgb3B0
aW1pemVBZnRlcldhcm1VcCgpOworICAgIGppdEFmdGVyV2FybVVwKCk7CisKKyAgICBpZiAob3Ro
ZXIubV9yYXJlRGF0YSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgIAorICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzID0gb3RoZXIu
bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9j
b25zdGFudEJ1ZmZlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyczsKKyAg
ICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgfQorICAgIAorICAgIGhlYXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7Cit9CisKK0Nv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLAorICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVD
b2x1bW5PZmZzZXQpCisgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2Jh
bE9iamVjdChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHNjb3BlLT5nbG9iYWxP
YmplY3QoKSkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5tX251
bUNhbGxlZUxvY2FscykKKyAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1W
YXJzKQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKKyNpZiBFTkFCTEUoSklU
KQorICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNl
dCkKKyNlbmRpZgorICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBt
X2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTChmYWxzZSkKKyAgICAsIG1faXNDb25zdHJ1Y3Rvcih1bmxpbmtlZENvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpKQorICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpKQorICAgICwgbV9jb2RlVHlwZSh1bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5
cGUoKSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB1
bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisg
ICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJl
YWtwb2ludHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgp
LCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2NrLT52
bSgpKQorICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3Rl
cigpKQorICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJlZ2lz
dGVyKCkpCisgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKKyAgICAsIG1fc291cmNlT2Zm
c2V0KHNvdXJjZU9mZnNldCkKKyAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCkKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
KDApCisgICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3co
KSkKK3sKKyAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisKKyAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkp
OworICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKKworICAgIEFTU0VSVCht
X3NvdXJjZSk7CisgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2ssCisgICAgSlNTY29wZSogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworCisgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xG
bG93UHJvZmlsZXIoKSkKKyAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJl
bW92ZVVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG93bmVyRXhl
Y3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG93bmVyRXhlY3V0YWJsZS0+dHlw
ZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKworICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycygpLCB1bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkpOworICAgIGlmICh1bmxpbmtlZENvZGVC
bG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQorICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Vu
bGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgp
XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgeworICAgICAgICBM
aW5rVGltZUNvbnN0YW50IHR5cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsK
KyAgICAgICAgaWYgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+
cmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpCisgICAgICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxP
YmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOworICAgIH0KKworICAgIC8v
IFdlIGFscmVhZHkgaGF2ZSB0aGUgY2xvbmVkIHN5bWJvbCB0YWJsZSBmb3IgdGhlIG1vZHVsZSBl
bnZpcm9ubWVudCBzaW5jZSB3ZSBuZWVkIHRvIGluc3RhbnRpYXRlCisgICAgLy8gdGhlIG1vZHVs
ZSBlbnZpcm9ubWVudHMgYmVmb3JlIGxpbmtpbmcgdGhlIGNvZGUgYmxvY2suIFdlIHJlcGxhY2Ug
dGhlIHN0b3JlZCBzeW1ib2wgdGFibGUgd2l0aCB0aGUgYWxyZWFkeSBjbG9uZWQgb25lLgorICAg
IGlmIChVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
Kj4odW5saW5rZWRDb2RlQmxvY2spKSB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZWRTeW1i
b2xUYWJsZSA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSktPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKTsKKyAgICAgICAgaWYgKG1fdm0tPnR5
cGVQcm9maWxlcigpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihj
bG9uZWRTeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxl
LT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisgICAgICAgIHJl
cGxhY2VDb25zdGFudCh1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmly
b25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRh
YmxlKTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSA9IHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKTsKKyAg
ICBtX2Z1bmN0aW9uRGVjbHMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9u
RXhlY3V0YWJsZT4+KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7
CisgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5j
dGlvbkRlY2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChpKTsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSkKKyAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5p
bnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtl
ZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tp
XS5zZXQoKm1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJF
eGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgIH0KKworICAgIG1fZnVuY3Rpb25FeHBycyA9IFJl
ZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4odW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxp
bmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOworICAg
ICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQorICAgICAgICAg
ICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShv
d25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9m
ZnNldCgpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgdGhpcywgdW5s
aW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7
CisgICAgfQorCisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT5oYXNSYXJlRGF0YSgpKSB7Cisg
ICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaWYgKHNpemVfdCBj
b3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlckNvdW50KCkpIHsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmdyb3coY291bnQpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRDb2RlQmxvY2s6OkNvbnN0YW50QnVmZmVyJiBidWZmZXIgPSB1bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIoaSk7CisgICAgICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4Y2Vw
dGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworI2lmIEVOQUJMRShKSVQpCisgICAg
ICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MoTExJbnQ6OmdldENvZGVQdHIob3BfY2F0Y2gpKSkpOworI2Vsc2UKKyAgICAgICAgICAgICAg
ICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyKTsKKyNlbmRpZgorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBw
dHIgPSB1bmxpbmtlZENvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNldFRh
YmxlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0
cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB1bmxpbmtlZENvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgICAgIGZv
ciAoOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgICAgICAgICBPZmZzZXRMb2Nh
dGlvbiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldC5icmFuY2hPZmZzZXQgPSBw
dHItPnZhbHVlLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmFkZChwdHItPmtleSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mU3dpdGNo
SnVtcFRhYmxlcygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc291cmNl
VGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzW2ldOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0g
c291cmNlVGFibGUuYnJhbmNoT2Zmc2V0czsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUubWlu
ID0gc291cmNlVGFibGUubWluOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWxsb2NhdGUgbWV0YWRhdGEgYnVmZmVycyBmb3IgdGhlIGJ5dGVjb2RlCisgICAgaWYg
KHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mTExpbnRDYWxsTGlua0lu
Zm9zKCkpCisgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zID0gUmVmQ291bnRlZEFycmF5PExM
SW50Q2FsbExpbmtJbmZvPihzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkpCisgICAgICAgIG1fYXJyYXlQcm9maWxl
cy5ncm93KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZkFycmF5QWxsb2NhdGlvblByb2ZpbGVzKCkpCisgICAgICAgIG1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZT4oc2l6
ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVmFs
dWVQcm9maWxlcygpKQorICAgICAgICBtX3ZhbHVlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8
VmFsdWVQcm9maWxlPihzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMoKSkKKyAgICAgICAgbV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8T2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU+KHNpemUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyNl
bmRpZgorCisgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBVbmxpbmtlZEluc3RydWN0aW9u
cworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuY291bnQoKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOjpSZWFk
ZXIgaW5zdHJ1Y3Rpb25SZWFkZXIodW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsK
KworICAgIC8vIEJvb2trZWVwIHRoZSBzdHJvbmdseSByZWZlcmVuY2VkIG1vZHVsZSBlbnZpcm9u
bWVudHMuCisgICAgSGFzaFNldDxKU01vZHVsZUVudmlyb25tZW50Kj4gc3Ryb25nbHlSZWZlcmVu
Y2VkTW9kdWxlRW52aXJvbm1lbnRzOworCisgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9u
PiBpbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3VudCk7CisKKyAgICB1bnNpZ25lZCB2YWx1ZVBy
b2ZpbGVDb3VudCA9IDA7CisgICAgYXV0byBsaW5rVmFsdWVQcm9maWxlID0gWyZdKHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBvcExlbmd0aCkgeworICAgICAgICB1bnNpZ25lZCB2
YWx1ZVByb2ZpbGVJbmRleCA9IHZhbHVlUHJvZmlsZUNvdW50Kys7CisgICAgICAgIFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbdmFsdWVQcm9maWxlSW5kZXhdOworICAg
ICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgIHBy
b2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPSBieXRlY29kZU9mZnNldDsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zW2J5dGVjb2RlT2Zmc2V0ICsgb3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CisgICAgfTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFpbnN0cnVjdGlvblJlYWRlci5hdEVuZCgpOyAp
IHsKKyAgICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSBpbnN0cnVjdGlvblJl
YWRlci5uZXh0KCk7CisKKyAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgo
cGNbMF0udS5vcGNvZGUpOworCisgICAgICAgIGluc3RydWN0aW9uc1tpXSA9IHZtLmludGVycHJl
dGVyLT5nZXRPcGNvZGUocGNbMF0udS5vcGNvZGUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0g
MTsgaiA8IG9wTGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkg
IT0gc2l6ZW9mKGludHB0cl90KSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpd
LnUucG9pbnRlciA9IDA7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFu
ZCA9IHBjW2pdLnUub3BlcmFuZDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBjWzBdLnUu
b3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6IHsKKyAgICAg
ICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5
UHJvZmlsZShpKTsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFd
ID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHM6CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4
ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmls
ZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworCisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJv
ZmlsZUluZGV4XTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgY2FzZSBvcF90cnlf
Z2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAg
ICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgY2FzZSBvcF90b19udW1iZXI6
IHsKKyAgICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAg
ICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJh
eVByb2ZpbGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6IHsKKyAgICAg
ICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5
UHJvZmlsZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9
ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgY2FzZSBv
cF9uZXdfYXJyYXlfYnVmZmVyOgorICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6
IHsKKyAgICAgICAgICAgIGludCBhcnJheUFsbG9jYXRpb25Qcm9maWxlSW5kZXggPSBwY1tvcExl
bmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5n
dGggLSAxXSA9ICZtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzW2FycmF5QWxsb2NhdGlvblByb2Zp
bGVJbmRleF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X25ld19vYmplY3Q6IHsKKyAgICAgICAgICAgIGludCBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
ZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgPSAmbV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZXNbb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBp
bnQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOwor
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBvYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTsKKyAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5pbml0
aWFsaXplKHZtLAorICAgICAgICAgICAgICAgIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGw6CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBsaW5rVmFs
dWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRl
eCA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVByb2Zp
bGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9m
aWxlSW5kZXhdOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XSA9ICZtX2xsaW50Q2Fs
bExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbNV0udS5vcGVyYW5kXTsKKyAgICAg
ICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICAg
ICAgQ1JBU0goKTsKKworICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKKyAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBl
PihwY1s0XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZSAhPSBM
b2NhbENsb3N1cmVWYXIpOworICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzVd
LnUub3BlcmFuZDsKKworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJh
Y3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwg
c2NvcGUsIGlkZW50LCBHZXQsIHR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6
YXRpb24pOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBvcC50
eXBlOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51Lm9wZXJhbmQgPSBvcC5kZXB0
aDsKKyAgICAgICAgICAgIGlmIChvcC5sZXhpY2FsRW52aXJvbm1lbnQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAob3AudHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
S2VlcCB0aGUgbGlua2VkIG1vZHVsZSBlbnZpcm9ubWVudCBzdHJvbmdseSByZWZlcmVuY2VkLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryb25nbHlSZWZlcmVuY2VkTW9kdWxlRW52aXJvbm1l
bnRzLmFkZChqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KG9wLmxleGljYWxFbnZpcm9ubWVu
dCkpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdGFudChvcC5s
ZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2
XS51LnN5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50LT5zeW1i
b2xUYWJsZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2sob3AudHlwZSwgdGhpcykpCisg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMs
IGNvbnN0YW50U2NvcGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogeworICAgICAgICAg
ICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisKKyAgICAgICAgICAgIC8vIGdldF9m
cm9tX3Njb3BlIGRzdCwgc2NvcGUsIGlkLCBHZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQK
KworICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzVdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5wb2ludGVyID0gbnVsbHB0cjsKKworICAg
ICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhwY1s0XS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgQVNTRVJUKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA0XSA9IEdldFB1dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBDbG9zdXJlVmFy
LCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUmVz
b2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisK
KyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhn
ZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IE1vZHVsZVZh
cikKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1
dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBDbG9zdXJlVmFyLCBnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CisgICAgICAgICAgICBpZiAob3AudHlwZSA9
PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAg
IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IDVdLnUuc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Aub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOiB7CisgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUs
IGlkLCB2YWx1ZSwgR2V0UHV0SW5mbywgU3RydWN0dXJlLCBPcGVyYW5kCisgICAgICAgICAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikg
eworICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdl
J3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHBjWzJdLnUub3BlcmFuZCkgIT0gVUlOVF9NQVgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBwY1s1XS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1i
b2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xU
YWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpdGVyICE9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7CisgICAgICAgICAgICAgICAg
ICAgIGl0ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7CisgICAgICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2lu
dFNldCgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaW50IGxv
Y2FsU2NvcGVEZXB0aCA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9
IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBs
b2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgUHV0LCBnZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCksIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworCisgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZl
TW9kZSgpLCBvcC50eXBlLCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5k
KCk7CisgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0g
b3Aud2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gQ2xvc3Vy
ZVZhciB8fCBvcC50eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wLndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAgICAg
IG9wLndhdGNocG9pbnRTZXQtPmludmFsaWRhdGUodm0sIFB1dFRvU2NvcGVGaXJlRGV0YWlsKHRo
aXMsIGlkZW50KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCh2bSwgdGhpcywg
b3Auc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVy
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CisKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6IHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxlcigpKTsKKyAgICAgICAgICAgIC8v
IFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogb3BfcHJvZmlsZV90eXBlIHJlZ1Rv
UHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPwor
ICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOworICAgICAgICAgICAg
R2xvYmFsVmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEID0gMDsKKyAgICAgICAgICAgIFJlZlB0
cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OworICAgICAgICAgICAgYm9vbCBzaG91bGRBbmFseXpl
ID0gbV91bmxpbmtlZENvZGUtPnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVP
ZmZzZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9maWxlUmVnaXN0ZXIocGNbMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIFByb2ZpbGVUeXBlQnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2FzdDxQcm9m
aWxlVHlwZUJ5dGVjb2RlRmxhZz4ocGNbM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZmxh
ZykgeworICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlQ2xvc3VyZVZhcjogewor
ICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1s0
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1sy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19j
YXN0PFJlc29sdmVUeXBlPihwY1s1XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIC8vIEV2
ZW4gdGhvdWdoIHR5cGUgcHJvZmlsaW5nIG1heSBiZSBwcm9maWxpbmcgZWl0aGVyIGEgR2V0IG9y
IGEgUHV0LCB3ZSBjYW4gYWx3YXlzIGNsYWltIGEgR2V0IGJlY2F1c2UKKyAgICAgICAgICAgICAg
ICAvLyB3ZSdyZSBhYnN0cmFjdGx5ICJyZWFkImluZyBmcm9tIGEgSlNTY29wZS4KKyAgICAgICAg
ICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwg
dHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisKKyAgICAgICAg
ICAgICAgICBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gTW9kdWxlVmFy
KQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG9wLmxleGljYWxFbnZpcm9ubWVu
dC0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcC50eXBlID09IEds
b2JhbFZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBtX2dsb2JhbE9iamVj
dC5nZXQoKS0+c3ltYm9sVGFibGUoKTsKKworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBpbXBsID0gKG9wLnR5cGUgPT0gTW9kdWxlVmFyKSA/IG9wLmltcG9ydGVkTmFtZS5nZXQo
KSA6IGlkZW50LmltcGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVGFibGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2Fz
IGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBw
cmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAg
IGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2Nr
ZXIsIGltcGwsIHZtKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJv
bFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQg
PSBUeXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzOworCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVMb2Nh
bGx5UmVzb2x2ZWQ6IHsKKyAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBj
WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUg
PSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBz
Y29wZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5v
dCBoYXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgorICAgICAgICAgICAgICAgIGdsb2Jh
bFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlk
ZW50LmltcGwoKSwgdm0pOworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xU
YWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7
CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQ6IAorICAgICAgICAgICAg
Y2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudDogeworICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBUeXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9m
aWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQ6IHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChvd25lckV4ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkp
OworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKS0+cmV0dXJuU3RhdGVtZW50VHlwZVNldCgpOworICAgICAg
ICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBUeXBlUHJvZmlsZXJSZXR1cm5TdGF0ZW1lbnQ7
CisgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRBbmFseXplKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEJlY2F1c2UgYSByZXR1cm4gc3RhdGVtZW50IGNhbiBiZSBhZGRlZCBpbXBsaWNpdGx5
IHRvIHJldHVybiB1bmRlZmluZWQgYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAvLyBhbmQgdGhlc2Ugbm9kZXMgZG9uJ3QgZW1pdCBleHByZXNzaW9uIHJhbmdl
cyBiZWNhdXNlIHRoZXkgYXJlbid0IGluIHRoZSBhY3R1YWwgc291cmNlIHRleHQgb2YKKyAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFtLCBnaXZlIHRoZSB0eXBlIHByb2Zp
bGVyIHNvbWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0dXJuIHN0YXRlbWVudHMuCisgICAg
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRleHQgb2Zmc2V0IHRoYXQgaXMgdXNl
ZCBhcyBpZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1bmN0aW9uIGtleXdvcmQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBUeXBlTG9jYXRpb24ncyBtX2Rpdm90
Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBtZW1iZXIgdmFyaWFibGUuCisgICAg
ICAgICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVuZCA9IG93bmVyRXhlY3V0YWJsZS0+
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEFu
YWx5emUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RkOjpwYWlyPFR5
cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtLnR5cGVQcm9maWxlcigpLT50eXBl
TG9jYXRpb25DYWNoZSgpLT5nZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKKyAgICAg
ICAgICAgICAgICBvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90
RW5kLCBnbG9iYWxUeXBlU2V0LCAmdm0pOworICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2Nh
dGlvbiA9IGxvY2F0aW9uUGFpci5maXJzdDsKKyAgICAgICAgICAgIGJvb2wgaXNOZXdMb2NhdGlv
biA9IGxvY2F0aW9uUGFpci5zZWNvbmQ7CisKKyAgICAgICAgICAgIGlmIChmbGFnID09IFByb2Zp
bGVUeXBlQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCkKKyAgICAgICAgICAgICAgICBs
b2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25l
ckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworCisgICAgICAgICAgICBp
ZiAoc2hvdWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQorICAgICAgICAgICAgICAgIHZtLnR5
cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CisKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgMl0udS5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CisgICAgICAgICAg
ICBpZiAocGNbMV0udS5pbmRleCA9PSBEaWRSZWFjaEJyZWFrcG9pbnQpCisgICAgICAgICAgICAg
ICAgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAgIGlu
dCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0aW9uc1tpICsgM10udS5vcGVyYW5k
OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAgPj0gMCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID09IG51bVBhcmFtZXRlcnMoKSAtIDEsICJXZSBh
c3N1bWUgdGhhdCB0aGlzIGlzIHRydWUgd2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3QgcGFy
YW1ldGVyIGR1cmluZyBPU1IgZXhpdCBpbiB0aGUgRlRMIEpJVC4iKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGkgKz0gb3BMZW5ndGg7CisgICAgfQorCisgICAgaWYgKHZtLmNv
bnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNG
b3JDb250cm9sRmxvd1Byb2ZpbGVyKGluc3RydWN0aW9ucyk7CisKKyAgICBtX2luc3RydWN0aW9u
cyA9IFdURk1vdmUoaW5zdHJ1Y3Rpb25zKTsKKworICAgIC8vIFNldCBvcHRpbWl6YXRpb24gdGhy
ZXNob2xkcyBvbmx5IGFmdGVyIG1faW5zdHJ1Y3Rpb25zIGlzIGluaXRpYWxpemVkLCBzaW5jZSB0
aGVzZQorICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRo
ZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQorICAgIC8vIGluc3RydWN0aW9uIHN0
cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KKyAgICBv
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsKKworICAgIC8vIElm
IHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0
aGVuIGNvbXB1dGUgaXQgaGVyZQorICAgIC8vIHN5bmNocm9ub3VzbHkuCisgICAgaWYgKE9wdGlv
bnM6OmFsd2F5c0NvbXB1dGVIYXNoKCkpCisgICAgICAgIGhhc2goKTsKKworICAgIGlmIChPcHRp
b25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCisgICAgICAgIGR1bXBCeXRlY29kZSgpOwor
ICAgIAorICAgIGhlYXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7CisgICAgaGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2Yo
SW5zdHJ1Y3Rpb24pKTsKK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK0NvZGVCbG9jazo6
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCB0aGlzLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZUxvY2Fscygw
KQorICAgICwgbV9udW1WYXJzKDApCisgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZChmYWxz
ZSkKKyNpZiBFTkFCTEUoSklUKQorICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNh
bm5vdENvbXBpbGUpCisjZW5kaWYKKyAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNl
KQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5D
b21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoZmFsc2UpCisgICAg
LCBtX2lzU3RyaWN0TW9kZShmYWxzZSkKKyAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQor
ICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBpbmdNb2Rl
KFN0ZXBwaW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVha3BvaW50cygwKQorICAgICwg
bV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93bmVyRXhlY3V0
YWJsZSkKKyAgICAsIG1fdm0odm0pCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBt
X29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigwKQorICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkpCit7CisgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKwor
ICAgIGhlYXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7Cit9CisjZW5kaWYKKworQ29kZUJs
b2NrOjp+Q29kZUJsb2NrKCkKK3sKKyAgICBpZiAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
KQorICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9u
KHRoaXMpOworCisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkgPT0g
TWl4ZWRUcmlTdGF0ZSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1p
emUoRmFsc2VUcmlTdGF0ZSk7CisKKyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQor
ICAgIGR1bXBWYWx1ZVByb2ZpbGVzKCk7CisjZW5kaWYKKworICAgIC8vIFdlIG1heSBiZSBkZXN0
cm95ZWQgYmVmb3JlIGFueSBDb2RlQmxvY2tzIHRoYXQgcmVmZXIgdG8gdXMgYXJlIGRlc3Ryb3ll
ZC4KKyAgICAvLyBDb25zaWRlciB0aGF0IHR3byBDb2RlQmxvY2tzIGJlY29tZSB1bnJlYWNoYWJs
ZSBhdCB0aGUgc2FtZSB0aW1lLiBUaGVyZQorICAgIC8vIGlzIG5vIGd1YXJhbnRlZSBhYm91dCB0
aGUgb3JkZXIgaW4gd2hpY2ggdGhlIENvZGVCbG9ja3MgYXJlIGRlc3Ryb3llZC4KKyAgICAvLyBT
bywgaWYgd2UgZG9uJ3QgcmVtb3ZlIGluY29taW5nIGNhbGxzLCBhbmQgZ2V0IGRlc3Ryb3llZCBi
ZWZvcmUgdGhlCisgICAgLy8gQ29kZUJsb2NrKHMpIHRoYXQgaGF2ZSBjYWxscyBpbnRvIHVzLCB0
aGVuIHRoZSBDYWxsTGlua0luZm8gdmVjdG9yJ3MKKyAgICAvLyBkZXN0cnVjdG9yIHdpbGwgdHJ5
IHRvIHJlbW92ZSBub2RlcyBmcm9tIG91ciAobm8gbG9uZ2VyIHZhbGlkKSBsaW5rZWQgbGlzdC4K
KyAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgCisgICAgLy8gTm90ZSB0aGF0IG91ciBv
dXRnb2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJworICAg
IC8vIG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9m
IHRoZSB+Q2FsbExpbmtJbmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCisKKyNpZiBFTkFCTEUoSklU
KQorICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1
YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViID0gKml0ZXI7CisgICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKKyAgICAgICAg
c3R1Yi0+ZGVyZWYoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBD
b2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCit7CisgICAgQVNTRVJUKGNv
bnN0YW50cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUo
KSk7CisgICAgc2l6ZV90IGNvdW50ID0gY29uc3RhbnRzLnNpemUoKTsKKyAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICBib29sIGhhc1R5cGVQcm9maWxlciA9
ICEhbV92bS0+dHlwZVByb2ZpbGVyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBjb25zdGFudHNbaV0uZ2V0KCk7
CisKKyAgICAgICAgaWYgKCFjb25zdGFudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4oY29u
c3RhbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc1R5cGVQcm9maWxlcikgeworICAgICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9s
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJv
ZmlsaW5nKGxvY2tlcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGUqIGNsb25lID0gc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKTsKKyAg
ICAgICAgICAgICAgICBpZiAod2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKQorICAg
ICAgICAgICAgICAgICAgICBjbG9uZS0+c2V0UmFyZURhdGFDb2RlQmxvY2sodGhpcyk7CisKKyAg
ICAgICAgICAgICAgICBjb25zdGFudCA9IGNsb25lOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIHRoaXMsIGNvbnN0
YW50KTsKKyAgICB9CisKKyAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKK30KKwordm9pZCBDb2RlQmxvY2s6
OnNldEFsdGVybmF0aXZlKFZNJiB2bSwgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSkKK3sKKyAgICBt
X2FsdGVybmF0aXZlLnNldCh2bSwgdGhpcywgYWx0ZXJuYXRpdmUpOworfQorCit2b2lkIENvZGVC
bG9jazo6c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpCit7CisgICAgbV9udW1QYXJhbWV0
ZXJzID0gbmV3VmFsdWU7CisKKyAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyA9IFJlZkNvdW50
ZWRBcnJheTxWYWx1ZVByb2ZpbGU+KG5ld1ZhbHVlKTsKK30KKwordm9pZCBFdmFsQ29kZUNhY2hl
Ojp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBFdmFsQ2FjaGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CisgICAgZm9yIChFdmFsQ2FjaGVN
YXA6Oml0ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIp
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKK30KKworQ29kZUJsb2NrKiBD
b2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkKK3sKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKyAgICBpZiAoaml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKKyAg
ICByZXR1cm4gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9K
SVQpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCit9CisKK3ZvaWQg
Q29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBib29s
IHNldEJ5TWUgPSAhbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ry
b25nKGZhbHNlLCB0cnVlKTsKKyAgICBpZiAoIXNldEJ5TWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgeworICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0
aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCisgICAgLy8gYW5kIGpldHRp
c29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUg
b2YgdGhvc2UgdGhpbmdzCisgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28g
d2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAorICAgIC8vIGZp
Z3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgorICAgIHZpc2l0b3IuYWRk
VW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKworICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElmIHdlIGpldHRpc29uIG91cnNlbHZlcyB3ZSdsbCBpbnN0YWxsIG91ciBh
bHRlcm5hdGl2ZSwgc28gbWFrZSBzdXJlIHRoYXQgaXQKKyAgICAvLyBzdXJ2aXZlcyBHQyBldmVu
IGlmIHdlIGRvbid0LgorICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVybmF0aXZlKTsKKyAgICAK
KyAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IHdlIHVzZSB3ZWFrIHJlZmVyZW5jZSBo
YXJ2ZXN0ZXJzIGZvcjogREZHIGZpeHBvaW50IGZvcgorICAgIC8vIGpldHRpc29uaW5nLCBhbmQg
dHJ5aW5nIHRvIGZpbmQgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGxpdmUgYmFzZWQgb24gc29t
ZQorICAgIC8vIGlubGluZSBjYWNoZS4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gcmVnaXN0ZXIgdGhl
bSByZWdhcmRsZXNzLgorICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcigmbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFdl
IGdldCBoZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhlIHNlbnNlIHRoYXQgb3VyIG93bmVyIGV4ZWN1
dGFibGUgaXMgbGl2ZSwKKyAgICAvLyBidXQgd2UncmUgbm90IHlldCBsaXZlIGZvciBzdXJlIGlu
IGFub3RoZXIgc2Vuc2U6IHdlIG1heSB5ZXQgZGVjaWRlIHRoYXQgdGhpcworICAgIC8vIGNvZGUg
YmxvY2sgc2hvdWxkIGJlIGpldHRpc29uZWQgYmFzZWQgb24gaXRzIG91dGdvaW5nIHdlYWsgcmVm
ZXJlbmNlcyBiZWluZworICAgIC8vIHN0YWxlLiBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQg
d2UncmUgc3RpbGwgYXNzdW1pbmcgdGhhdCB3ZSdyZSBkZWFkLCBhbmQKKyAgICAvLyBwZXJmb3Jt
IG9uZSByb3VuZCBvZiBkZXRlcm1pbmluZyBpZiB3ZSdyZSBsaXZlLiBUaGUgR0MgbWF5IGRldGVy
bWluZSwgYmFzZWQgb24KKyAgICAvLyBlaXRoZXIgdXMgbWFya2luZyBhZGRpdGlvbmFsIG9iamVj
dHMsIG9yIGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2VkIGZvcgorICAgIC8vIG90aGVyIHJl
YXNvbnMsIHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1biBhZ2FpbjsgaXQgd2lsbCBub3Rp
ZnkgdXMgb2YgdGhpcworICAgIC8vIGRlY2lzaW9uIGJ5IGNhbGxpbmcgaGFydmVzdFdlYWtSZWZl
cmVuY2VzKCkuCisKKyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsK
KyAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKworICAgIG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAgIGRldGVybWluZUxp
dmVuZXNzKHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCitzaXplX3Qg
Q29kZUJsb2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBDb2RlQmxvY2sq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CisgICAgc2l6ZV90IGV4dHJh
TWVtb3J5QWxsb2NhdGVkID0gdGhpc09iamVjdC0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6
ZW9mKEluc3RydWN0aW9uKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9qaXRDb2RlKQorICAgICAg
ICBleHRyYU1lbW9yeUFsbG9jYXRlZCArPSB0aGlzT2JqZWN0LT5tX2ppdENvZGUtPnNpemUoKTsK
KyAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJhTWVtb3J5QWxsb2Nh
dGVkOworfQorCit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2Fz
dDxDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFs
aXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmluZworICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhl
IHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRo
aW5ncworICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUg
bm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKKyAgICAvLyBmaWd1cmVzIG91dCB3
aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisKKyAgICBpZiAoQ29kZUJs
b2NrKiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihvdGhlckJsb2NrKTsKKwor
ICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkKG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICBpZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgpKQor
ICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2luc3RydWN0aW9ucy5z
aXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7
CisKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICBzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisKKyAgICBtX2FsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKKyAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoKQoreworICAgIGlm
IChPcHRpb25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgLy8gdGhlaXIgd2VhayByZWZl
cmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCisgICAg
Ly8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUu
CisgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpz
aG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpCit7CisgICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiAhSGVhcDo6aXNNYXJrZWQodGhpcyk7Cit9CisKK3N0YXRpYyBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIHRpbWVUb0xpdmUoSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjp1c2VFYWdlckNvZGVCbG9ja0pldHRpc29uVGltaW5nKCkpKSB7
CisgICAgICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bms6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cygxMCk7CisgICAgICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMCArIDIwKTsKKyAgICAgICAgY2FzZSBK
SVRDb2RlOjpERkdKSVQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyg0MCk7CisgICAgICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTIwKTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgIGNhc2UgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9j
YXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpKTsK
KyAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgorICAgICAgICAvLyBFZmZlY3RpdmVseSAx
MCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAorICAgICAgICAvLyBJ
bnRlcnByZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgorICAgICAgICByZXR1cm4gc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJv
bm86OnNlY29uZHMoNSArIDEwKSk7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CisgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCkpOworICAgIGNhc2UgSklUQ29kZTo6RlRMSklU
OgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNjApKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7CisgICAgfQor
fQorCitib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpCit7CisgICAg
aWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29u
RHVlVG9PbGRBZ2UoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICh0aW1l
U2luY2VDcmVhdGlvbigpIDwgdGltZVRvTGl2ZShqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0YXRpYyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5z
aXRpb24mIHRyYW5zaXRpb24pCit7CisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYm
ICFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCit2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworCisgICAgaWYgKG1fYWxsVHJh
bnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBhbGxB
cmVNYXJrZWRTb0ZhciA9IHRydWU7CisgICAgICAgIAorICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlciA9IG1fdm0tPmludGVycHJldGVyOworICAgIGlmIChqaXRUeXBlKCkgPT0gSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNb
aV1dOworICAgICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUpKSB7CisgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25b
NF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1
cmVJRCA9IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQ7CisgICAgICAgICAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJlSUQpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0KKyAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVj
dHVyZUlEKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CisgICAg
ICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KG9sZFN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIobmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisj
aWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgeworICAg
ICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJ
bmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNv
RmFyICY9ICgqaXRlciktPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIH0KKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgIGZvciAo
YXV0byYgd2Vha1JlZmVyZW5jZSA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMp
CisgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciAmPSB3ZWFrUmVmZXJlbmNlLT5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkTWFya1RyYW5zaXRpb24oZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXSkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhl
biB0aGUgdGFyZ2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxz
byBsaXZlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBUaGlzIGNv
ZGUgYmxvY2suIFdlIGtub3cgaXQncyBsaXZlIGFscmVhZHkgYmVjYXVzZSBvdGhlcndpc2UKKyAg
ICAgICAgICAgICAgICAvLyAgIHdlIHdvdWxkbid0IGJlIHNjYW5uaW5nIG91cnNlbHZlcy4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gVGhlIGNvZGUgb3JpZ2luIG9m
IHRoZSB0cmFuc2l0aW9uLiBUcmFuc2l0aW9ucyBtYXkgYXJpc2UgZnJvbQorICAgICAgICAgICAg
ICAgIC8vICAgY29kZSB0aGF0IHdhcyBpbmxpbmVkLiBUaGV5IGFyZSBub3QgcmVsZXZhbnQgaWYg
dGhlIHVzZXIncworICAgICAgICAgICAgICAgIC8vICAgb2JqZWN0IHRoYXQgaXMgcmVxdWlyZWQg
Zm9yIHRoZSBpbmxpbmVlIHRvIHJ1biBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyAg
IGxpdmUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBzb3Vy
Y2Ugb2YgdGhlIHRyYW5zaXRpb24uIFRoZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisgICAg
ICAgICAgICAgICAgLy8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBz
bywgc3RvcmVzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291
cmNlIG11c3QgYmUgbGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvcnQtY2lyY3VpdCB0aGUg
bGl2ZW5lc3MgaWYgdGhlIHN0cnVjdHVyZSBpcyBoYXJtbGVzcworICAgICAgICAgICAgICAgIC8v
IHRvIG1hcmsgKGkuZS4gaXRzIGdsb2JhbCBvYmplY3QgYW5kIHByb3RvdHlwZSBhcmUgYm90aCBh
bHJlYWR5CisgICAgICAgICAgICAgICAgLy8gbGl2ZSkuCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90
byk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0Zh
ciA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
ICAgIAorICAgIGlmIChhbGxBcmVNYXJrZWRTb0ZhcikKKyAgICAgICAgbV9hbGxUcmFuc2l0aW9u
c0hhdmVCZWVuTWFya2VkID0gdHJ1ZTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxp
dmVuZXNzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFu
eSByZW1haW5pbmcgd29yayB0byBkby4KKyAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgaWYgKGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gTm93IGNoZWNrIGFsbCBv
ZiBvdXIgd2VhayByZWZlcmVuY2VzLiBJZiBhbGwgb2YgdGhlbSBhcmUgbGl2ZSwgdGhlbiB3ZQor
ICAgIC8vIGhhdmUgcHJvdmVkIGxpdmVuZXNzIGFuZCBzbyB3ZSBzY2FuIG91ciBzdHJvbmcgcmVm
ZXJlbmNlcy4gSWYgYXQgZW5kIG9mCisgICAgLy8gR0Mgd2Ugc3RpbGwgaGF2ZSBub3QgcHJvdmVk
IGxpdmVuZXNzLCB0aGVuIHRoaXMgY29kZSBibG9jayBpcyB0b2FzdC4KKyAgICBib29sIGFsbEFy
ZUxpdmVTb0ZhciA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1v
bi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpKSkgewor
ICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAg
ICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgc29t
ZSB3ZWFrIHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24g
d2FzCisgICAgLy8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4g
UmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAgICAvLyBjb21lIGJhY2sgaGVy
ZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgorICAgIGRmZ0NvbW1vbi0+
bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQor
Cit2b2lkIENvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJl
bmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
CisgICAgICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIpKTsKKworICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnMo
dmlzaXRvcik7CisgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQoreworICAgIGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9w
Y29kZShvcF9nZXRfYnlfaWQpOworICAgIGluc3RydWN0aW9uWzRdLnUucG9pbnRlciA9IG51bGxw
dHI7CisgICAgaW5zdHJ1Y3Rpb25bNV0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICBpbnN0cnVj
dGlvbls2XS51LnBvaW50ZXIgPSBudWxscHRyOworfQorCit2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlcygpCit7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlm
IChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCisKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5p
bnRlcnByZXRlcjsKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygp
OworICAgIGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXpl
KCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0
cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07
CisgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9u
WzBdLnUub3Bjb2RlKSkgeworICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5z
ZXQ6IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5zdHJ1
Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQg
fHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBM
TEludCBwcm9wZXJ0eSBhY2Nlc3MuXG4iKTsKKyAgICAgICAgICAgIGNsZWFyTExJbnRHZXRCeUlk
Q2FjaGUoY3VySW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAg
IFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1
cmVJRDsKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGN1ckluc3RydWN0aW9u
WzddLnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCk7CisgICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1
cmVJRCB8fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpKSkgJiYKKyAgICAgICAgICAgICAgICAoIW5ld1N0cnVjdHVyZUlEIHx8
IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCkpKSAmJgorICAgICAgICAgICAgICAgICghY2hhaW4gfHwgSGVhcDo6aXNNYXJrZWQo
Y2hhaW4pKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50
IHB1dCB0cmFuc2l0aW9uLlxuIik7CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0
cnVjdHVyZUlEID0gMDsKKyAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzVdLnUub3BlcmFuZCA9
IDA7CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEID0gMDsKKyAg
ICAgICAgICAgIGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xl
bmd0aDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAg
ICAgICAgICBpZiAoIWN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFy
a2VkKGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHRvX3RoaXMgd2l0aCBzdHJ1Y3R1cmUg
JXAuXG4iLCBjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAg
ICBjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgY3Vy
SW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMgPSBtZXJnZSgKKyAgICAgICAgICAgICAgICBj
dXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5R0MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAgICAg
ICAgIGF1dG8mIGNhY2hlV3JpdGVCYXJyaWVyID0gY3VySW5zdHJ1Y3Rpb25bNF0udS5qc0NlbGw7
CisgICAgICAgICAgICBpZiAoIWNhY2hlV3JpdGVCYXJyaWVyIHx8IGNhY2hlV3JpdGVCYXJyaWVy
LnVudmFsaWRhdGVkR2V0KCkgPT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBKU0NlbGwqIGNhY2hlZEZ1bmN0
aW9uID0gY2FjaGVXcml0ZUJhcnJpZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQoY2FjaGVkRnVuY3Rpb24pKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
Q2xlYXJpbmcgTExJbnQgY3JlYXRlX3RoaXMgd2l0aCBjYWNoZWQgY2FsbGVlICVwLlxuIiwgY2Fj
aGVkRnVuY3Rpb24pOworICAgICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29w
ZTogeworICAgICAgICAgICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNz
YXJ5LiBBbnkgc3ltYm9sIHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZlciB0bworICAgICAgICAg
ICAgLy8gYXJlIGZvciBvdXRlciBmdW5jdGlvbnMsIGFuZCB3ZSByZWZlciB0byB0aG9zZSBmdW5j
dGlvbnMgc3Ryb25nbHksIGFuZCB0aGV5IHJlZmVyCisgICAgICAgICAgICAvLyB0byB0aGUgc3lt
Ym9sIHRhYmxlIHN0cm9uZ2x5LiBCdXQgaXQncyBuaWNlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUu
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUg
PSBjdXJJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlOworICAgICAgICAgICAgaWYgKCFzeW1i
b2xUYWJsZSB8fCBIZWFwOjppc01hcmtlZChzeW1ib2xUYWJsZS5nZXQoKSkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIHN5bWJvbFRhYmxlICVwLlxuIiwg
c3ltYm9sVGFibGUuZ2V0KCkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CisgICAgICAgICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1ckluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhciB8
fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyAKKyAgICAgICAgICAgICAgICB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9j
YWxDbG9zdXJlVmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiYgc3RydWN0dXJlID0gY3VySW5zdHJ1Y3Rpb25b
NV0udS5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSB8fCBIZWFwOjppc01h
cmtlZChzdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
Q2xlYXJpbmcgc2NvcGUgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdl
dCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2Rl
KTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKG9wY29kZUlELCBmYWxz
ZSwgIlVuaGFuZGxlZCBvcGNvZGUgaW4gQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSwgJXMoJWQpIGF0IGJjICV1Iiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCBvcGNvZGVJRCwgcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
V2UgY2FuJ3QganVzdCByZW1vdmUgYWxsIHRoZSBzZXRzIHdoZW4gd2UgY2xlYXIgdGhlIGNhY2hl
cyBzaW5jZSB3ZSBtaWdodCBoYXZlIGNyZWF0ZWQgYSB3YXRjaHBvaW50IHNldAorICAgIC8vIHRo
ZW4gY2xlYXJlZCB0aGUgY2FjaGUgd2l0aG91dCBHQ2luZyBpbiBiZXR3ZWVuLgorICAgIG1fbGxp
bnRHZXRCeUlkV2F0Y2hwb2ludE1hcC5yZW1vdmVJZihbXShjb25zdCBTdHJ1Y3R1cmVXYXRjaHBv
aW50TWFwOjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWlyKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJu
ICFIZWFwOjppc01hcmtlZChwYWlyLmtleSk7CisgICAgfSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sbGludENhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2Vk
KG1fbGxpbnRDYWxsTGlua0luZm9zW2ldLmNhbGxlZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJp
bmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzLCAiXG4iKTsKKyAgICAgICAgICAgIG1fbGxpbnRD
YWxsTGlua0luZm9zW2ldLnVubGluaygpOworICAgICAgICB9CisgICAgICAgIGlmICghIW1fbGxp
bnRDYWxsTGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlICYmICFIZWFwOjppc01hcmtlZChtX2xs
aW50Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkpCisgICAgICAgICAgICBt
X2xsaW50Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZS5jbGVhcigpOworICAgIH0KK30K
Kwordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQorewor
I2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CisK
KyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJ
bmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSAqKml0ZXI7CisgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5j
ZXModGhpcyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpVbmNvbmRpdGlv
bmFsRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXIpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChjb2RlQmxv
Y2stPnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCkpIHsKKyAgICAgICAgY29kZUJs
b2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisgICAgaWYg
KGNvZGVCbG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKSB7CisgICAgICAgIGNvZGVC
bG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpCisgICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVMTEludElubGlu
ZUNhY2hlcygpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoISFjb2RlQmxvY2stPmppdENv
ZGUoKSkKKyAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVz
KCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KQoreworI2lmIEVOQUJMRShK
SVQpCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpCisgICAgICAgIHRvSGFzaE1h
cChtX3N0dWJJbmZvcywgZ2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luLCByZXN1bHQpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVC
bG9jazo6Z2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCkKK3sKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldFN0dWJJbmZvTWFwKGxvY2tlciwg
cmVzdWx0KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01hcChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5B
QkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdG9I
YXNoTWFwKG1fY2FsbExpbmtJbmZvcywgZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbiwgcmVzdWx0
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordm9pZCBD
b2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01hcChDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldENhbGxMaW5r
SW5mb01hcChsb2NrZXIsIHJlc3VsdCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRCeVZhbElu
Zm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KQor
eworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsK
KyAgICAgICAgZm9yIChhdXRvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCisgICAgICAgICAg
ICByZXN1bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KSwgYnlWYWxJ
bmZvKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBnZXRCeVZh
bEluZm9NYXAobG9ja2VyLCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1N0cnVjdHVy
ZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBt
X3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7Cit9CisKK0pJVEFkZElDKiBDb2RlQmxvY2s6OmFk
ZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKK30KKworSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fbXVsSUNz
LmFkZChhcml0aFByb2ZpbGUpOworfQorCitKSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJ
QyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gbV9zdWJJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7Cit9CisKK0pJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoYXJp
dGhQcm9maWxlKTsKK30KKworU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJ
bmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29kZU9y
aWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQnlWYWxJbmZvKiBDb2RlQmxvY2s6OmFkZEJ5VmFs
SW5mbygpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBy
ZXR1cm4gbV9ieVZhbEluZm9zLmFkZCgpOworfQorCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6
YWRkQ2FsbExpbmtJbmZvKCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYWRkKCk7Cit9CisKK0NhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5jb2RlT3JpZ2luKCkgPT0gQ29k
ZU9yaWdpbihpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gKml0ZXI7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCit2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICAvLyBXZSBjYW4gY2xlYXIg
dGhlc2UgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQgd2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gYW55
IHN0dWIgaW5mb3MsIGNhbGwKKyAgICAvLyBsaW5rIGluZm9zLCBvciBieSB2YWwgaW5mb3MgaWYg
d2UgZG9uJ3QgaGF2ZSBKSVQgY29kZS4gQXR0ZW1wdHMgdG8gcXVlcnkgdGhlc2UgZGF0YQorICAg
IC8vIHN0cnVjdHVyZXMgdXNpbmcgdGhlIGNvbmN1cnJlbnQgQVBJIChnZXRTdHViSW5mb01hcCBh
bmQgZnJpZW5kcykgd2lsbCByZXR1cm4gbm90aGluZyBpZiB3ZQorICAgIC8vIGRvbid0IGhhdmUg
SklUIGNvZGUuCisgICAgbV9zdHViSW5mb3MuY2xlYXIoKTsKKyAgICBtX2NhbGxMaW5rSW5mb3Mu
Y2xlYXIoKTsKKyAgICBtX2J5VmFsSW5mb3MuY2xlYXIoKTsKKyAgICAKKyAgICAvLyBXZSBjYW4g
Y2xlYXIgdGhpcyBiZWNhdXNlIHRoZSBERkcncyBxdWVyaWVzIHRvIHRoZXNlIGRhdGEgc3RydWN0
dXJlcyBhcmUgZ3VhcmRlZCBieSB3aGV0aGVyCisgICAgLy8gdGhlcmUgaXMgSklUIGNvZGUuCisg
ICAgbV9yYXJlQ2FzZVByb2ZpbGVzLmNsZWFyKCk7Cit9CisjZW5kaWYKKwordm9pZCBDb2RlQmxv
Y2s6OnZpc2l0T1NSRXhpdFRhcmdldHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8g
V2Ugc3Ryb25nbHkgdmlzaXQgT1NSIGV4aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50
IHRvIGRlYWwgd2l0aAorICAgIC8vIHRoZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhp
dCB0YXJnZXQgQ29kZUJsb2NrIG9uIGRlbWFuZCBhbmQKKyAgICAvLyBndWFyYW50ZWVpbmcgdGhh
dCBpdCBtYXRjaGVzIHRoZSBkZXRhaWxzIG9mIHRoZSBDb2RlQmxvY2sgd2UgY29tcGlsZWQKKyAg
ICAvLyB0aGUgT1NSIGV4aXQgYWdhaW5zdC4KKworICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVy
bmF0aXZlKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICBpZiAoZGZnQ29tbW9uLT5pbmxp
bmVDYWxsRnJhbWVzKSB7CisgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmRm
Z0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICB9CisgICAgfQor
I2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxP
YmplY3QpOworICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CisgICAgdmlz
aXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKKyAgICBpZiAobV9yYXJlRGF0YSkKKyAgICAg
ICAgbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1
bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0
aW9uRXhwcnNbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlY2xz
LnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5jdGlvbkRlY2xzW2ld
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzW2ldLnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3IgKEJ5VmFs
SW5mbyogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
YnlWYWxJbmZvLT5jYWNoZWRTeW1ib2wpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAgIHZp
c2l0T1NSRXhpdFRhcmdldHModmlzaXRvcik7CisjZW5kaWYKKworICAgIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwor
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIERGRzo6Q29tbW9uRGF0YSog
ZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghIWRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luKQorICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2lu
KTsgLy8gQWxtb3N0IGNlcnRhaW5seSBub3QgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgY29kZSBvcmln
aW4gc2hvdWxkIGFsc28gYmUgYSB3ZWFrIHJlZmVyZW5jZS4gQmV0dGVyIHRvIGJlIHNhZmUsIHRo
b3VnaC4KKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0u
bV9mcm9tKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNb
aV0ubV90byk7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdD
b21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXNbaV0pOworCisgICAgZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSB0cnVlOwor
I2VuZGlmICAgIAorfQorCitDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHRoaXM7Cisg
ICAgd2hpbGUgKHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0
LT5hbHRlcm5hdGl2ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUocmVzdWx0LT5qaXRUeXBlKCkpIHx8IHJl
c3VsdC0+aml0VHlwZSgpID09IEpJVENvZGU6Ok5vbmUpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIHJldHVybiB0aGlzOworI2VuZGlmCit9CisKK0NvZGVCbG9jayogQ29kZUJsb2Nr
OjpiYXNlbGluZVZlcnNpb24oKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIENv
ZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UncmUgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIENv
ZGVCbG9jayBmb3IgYW4gZXhlY3V0YWJsZS4KKyAgICAgICAgLy8gQXNzdW1lIHRoYXQgd2UncmUg
dGhlIGJhc2VsaW5lIENvZGVCbG9jay4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgp
ID09IEpJVENvZGU6Ok5vbmUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgcmVz
dWx0ID0gcmVzdWx0LT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShKSVQpCiti
b29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0
eXBlVG9SZXBsYWNlKQoreworICAgIHJldHVybiBKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFj
ZW1lbnQoKS0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNlKTsKK30KKworYm9vbCBDb2RlQmxvY2s6
Omhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoaml0VHlwZSgpKTsKK30KKyNlbmRpZgorCitIYW5kbGVySW5mbyogQ29kZUJsb2Nr
OjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVp
cmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBoYW5kbGVyRm9y
SW5kZXgoYnl0ZWNvZGVPZmZzZXQsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK0hhbmRsZXJJbmZv
KiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5k
bGVyIHJlcXVpcmVkSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQorCitD
YWxsU2l0ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4
KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7
CisgICAgQVNTRVJUKCEhaGFuZGxlckZvckluZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7
CisgICAgQ29kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxs
U2l0ZSk7CisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmFkZFVuaXF1ZUNhbGxT
aXRlSW5kZXgob3JpZ2luYWxPcmlnaW4pOworI2Vsc2UKKyAgICAvLyBXZSBuZXZlciBjcmVhdGUg
bmV3IG9uLXRoZS1mbHkgZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgLy8gY2FsbCBzaXRlcyBvdXRz
aWRlIHRoZSBERkcvRlRMIGlubGluZSBjYWNoZXMuCisgICAgVU5VU0VEX1BBUkFNKG9yaWdpbmFs
Q2FsbFNpdGUpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IENhbGxTaXRlSW5kZXgoMHUpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpyZW1vdmVF
eGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOworICAgIFZlY3RvcjxIYW5kbGVySW5m
bz4mIGV4Y2VwdGlvbkhhbmRsZXJzID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
SGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgaWYg
KGhhbmRsZXIuc3RhcnQgPD0gaW5kZXggJiYgaGFuZGxlci5lbmQgPiBpbmRleCkgeworICAgICAg
ICAgICAgZXhjZXB0aW9uSGFuZGxlcnMucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KwordW5zaWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQg
PCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKS0+Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKK30KKwordW5zaWduZWQgQ29kZUJsb2NrOjpjb2x1bW5O
dW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBp
bnQgZGl2b3Q7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRPZmZzZXQ7CisgICAg
dW5zaWduZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIHJldHVybiBjb2x1bW47Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVu
c2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAoreworICAgIG1fdW5saW5rZWRD
b2RlLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2
b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZGl2b3QgKz0g
bV9zb3VyY2VPZmZzZXQ7CisgICAgY29sdW1uICs9IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KCk7CisgICAgbGluZSArPSBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5l
KCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNp
Z25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0g
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogZW5kID0gaW5z
dHJ1Y3Rpb25zKCkuZW5kKCk7CisgICAgZm9yIChjb25zdCBJbnN0cnVjdGlvbiogaXQgPSBiZWdp
bjsgaXQgIT0gZW5kOykgeworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVy
LT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOworICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
ZGVidWcpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gaXQgLSBiZWdp
bjsKKyAgICAgICAgICAgIGludCB1bnVzZWQ7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVn
TGluZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdDb2x1bW47CisgICAgICAgICAgICBl
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgdW51c2VkLCB1
bnVzZWQsIHVudXNlZCwgb3BEZWJ1Z0xpbmUsIG9wRGVidWdDb2x1bW4pOworICAgICAgICAgICAg
aWYgKGxpbmUgPT0gb3BEZWJ1Z0xpbmUgJiYgKGNvbHVtbiA9PSBCcmVha3BvaW50Ojp1bnNwZWNp
ZmllZENvbHVtbiB8fCBjb2x1bW4gPT0gb3BEZWJ1Z0NvbHVtbikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaXQgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNv
ZGVJRF07CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNo
cmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworCisgICAgbV9yYXJlQ2FzZVByb2ZpbGVzLnNocmlua1RvRml0
KCk7CisgICAgCisgICAgaWYgKHNocmlua01vZGUgPT0gRWFybHlTaHJpbmspIHsKKyAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKyAgICB9IC8vIGVsc2UgZG9u
J3Qgc2hyaW5rIHRoZXNlLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwb2ludGVkIHBv
aW50ZXJzIGludG8gdGhlc2UgdGFibGVzLgorfQorCisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5r
SW5mbyogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsK
KyAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9s
eW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNh
bGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5n
KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCit2b2lkIENvZGVCbG9jazo6dW5saW5rSW5j
b21pbmdDYWxscygpCit7CisgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkg
IT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdMTEludENh
bGxzLmJlZ2luKCktPnVubGluaygpOworI2lmIEVOQUJMRShKSVQpCisgICAgd2hpbGUgKG1faW5j
b21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9p
bmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgd2hpbGUgKG1faW5jb21p
bmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
ZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGlu
aygqdm0oKSk7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8q
IGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CisgICAg
bV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKK0NvZGVCbG9jayogQ29k
ZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7
Cit9CisKKyNpZiBFTkFCTEUoSklUKQorQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnJlcGxhY2VtZW50
KCkKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygp
OworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKQorICAg
ICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29kZUJsb2NrRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkK
KyAgICAgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29kZUJsb2NrKCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6
OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGNsYXNzSW5mbyA9PSBXZWJBc3NlbWJseUNv
ZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
REZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCkK
K3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygpOwor
CisgICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKSB7CisgICAg
ICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCisgICAgICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlv
bkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIERGRzo6
ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworICAgIH0KKworICAgIGlmIChj
bGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpl
dmFsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9ncmFt
Q29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5
TGV2ZWwodGhpcyk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0
aGlzKTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoY2xhc3NJbmZvID09IFdl
YkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OkNhbm5vdENv
bXBpbGU7CisjZW5kaWYKKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisK
K3ZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29u
LCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQorewor
I2lmICFFTkFCTEUoREZHX0pJVCkKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VE
X1BBUkFNKGRldGFpbCk7CisjZW5kaWYKKyAgICAKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKHRo
aXMsICJqZXR0aXNvbiIsICgiZHVlIHRvICIsIHJlYXNvbiwgIiwgY291bnRpbmcgPSAiLCBtb2Rl
ID09IENvdW50UmVvcHRpbWl6YXRpb24sICIsIGRldGFpbCA9ICIsIHBvaW50ZXJEdW1wKGRldGFp
bCkpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlYXNvbiAhPSBQcm9maWxlcjo6Tm90SmV0dGlz
b25lZCk7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygiSmV0dGlzb25pbmcgIiwgKnRoaXMp
OworICAgICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKQorICAgICAgICAgICAg
ZGF0YUxvZygiIGFuZCBjb3VudGluZyByZW9wdGltaXphdGlvbiIpOworICAgICAgICBkYXRhTG9n
KCIgZHVlIHRvICIsIHJlYXNvbik7CisgICAgICAgIGlmIChkZXRhaWwpCisgICAgICAgICAgICBk
YXRhTG9nKCIsICIsICpkZXRhaWwpOworICAgICAgICBkYXRhTG9nKCIuXG4iKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHJlYXNvbiA9PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVu
Y2UpIHsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coKnRoaXMsICIgd2lsbCBiZSBqZXR0aXNvbmVkIGJlY2F1c2Ugb2YgdGhl
IGZvbGxvd2luZyBkZWFkIHJlZmVyZW5jZXM6XG4iKTsKKyAgICAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNp
dGlvbiA9IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV07CisgICAgICAgICAgICAgICAgSlNDZWxs
KiBvcmlnaW4gPSB0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBKU0NlbGwqIGZyb20gPSB0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBKU0NlbGwqIHRvID0gdHJhbnNpdGlvbi5tX3RvLmdldCgpOworICAgICAgICAgICAgICAgIGlm
ICgoIW9yaWdpbiB8fCBIZWFwOjppc01hcmtlZChvcmlnaW4pKSAmJiBIZWFwOjppc01hcmtlZChm
cm9tKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgIFRyYW5zaXRpb24gdW5kZXIgIiwgUmF3UG9pbnRlcihvcmlnaW4pLCAiLCAiLCBS
YXdQb2ludGVyKGZyb20pLCAiIC0+ICIsIFJhd1BvaW50ZXIodG8pLCAiLlxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53
ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogd2Vh
ayA9IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
aWYgKEhlYXA6OmlzTWFya2VkKHdlYWspKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgV2VhayByZWZlcmVuY2UgIiwgUmF3UG9pbnRl
cih3ZWFrKSwgIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFw
KCkpOworICAgIAorICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6
CisgICAgLy8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0
YWNrIHJpZ2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAgICB3ZSBzaG91
bGQgT1NSIGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBh
ZnRlciB0aGUgcmV0dXJuLgorICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhl
IG93bmVyIGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2su
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvT2xkQWdlKSB7CisgICAgICAgIGlmIChQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNv
bXBpbGF0aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCkpCisg
ICAgICAgICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwp
OworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBp
dHMgb3duIGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVk
LgorICAgICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgewor
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8IChtX3ZtLT5oZWFwLmlz
Q3VycmVudFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRh
YmxlKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIiAg
ICBEaWQgaW52YWxpZGF0ZSAiLCAqdGhpcywgIlxuIik7CisgICAgCisgICAgLy8gQ291bnQgdGhl
IHJlb3B0aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KKyAgICBpZiAo
bW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0
aGlzIHNob3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKKyAgICAgICAgYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIGlmIChERkc6OnNob3VsZER1
bXBEaXNhc3NlbWJseSgpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9w
dGltaXphdGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAodGhp
cyAhPSByZXBsYWNlbWVudCgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3ZXJl
IG5ldmVyIHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBjb2Rl
CisgICAgICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
bHRlcm5hdGl2ZSgpKQorICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CisKKyAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKQor
ICAgICAgICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2Fu
dCB0byBpbnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKKyAgICAvLyBiZWNhdXNlIHRo
YXQgd291bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgorICAgIGlm
IChtX3ZtLT5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGFj
Y29tcGxpc2hlcyAoMikuCisgICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KAorICAgICAgICBtX2dsb2JhbE9iamVjdC0+dm0oKSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUo
KSwgc3BlY2lhbGl6YXRpb25LaW5kKCkpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYg
KERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIiAgICBEaWQg
aW5zdGFsbCBiYXNlbGluZSB2ZXJzaW9uIG9mICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKK30KKworSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2Jq
ZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJu
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Cit9CisKK2NsYXNzIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciB7CitwdWJsaWM6CisgICAg
UmVjdXJzaW9uQ2hlY2tGdW5jdG9yKENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCB1bnNpZ25lZCBkZXB0aFRvQ2hlY2spCisgICAgICAgIDogbV9zdGFydENh
bGxGcmFtZShzdGFydENhbGxGcmFtZSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CisgICAgICAgICwgbV9kZXB0aFRvQ2hlY2soZGVwdGhUb0NoZWNrKQorICAgICAgICAsIG1fZm91
bmRTdGFydENhbGxGcmFtZShmYWxzZSkKKyAgICAgICAgLCBtX2RpZFJlY3Vyc2UoZmFsc2UpCisg
ICAgeyB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRv
ciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIENhbGxGcmFtZSogY3VycmVudENhbGxG
cmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOworCisgICAgICAgIGlmIChjdXJyZW50Q2FsbEZy
YW1lID09IG1fc3RhcnRDYWxsRnJhbWUpCisgICAgICAgICAgICBtX2ZvdW5kU3RhcnRDYWxsRnJh
bWUgPSB0cnVlOworCisgICAgICAgIGlmIChtX2ZvdW5kU3RhcnRDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5jYWxsRnJhbWUoKS0+Y29kZUJsb2NrKCkgPT0gbV9jb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBtX2RpZFJlY3Vyc2UgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghbV9kZXB0aFRvQ2hlY2stLSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
Q29udGludWU7CisgICAgfQorCisgICAgYm9vbCBkaWRSZWN1cnNlKCkgY29uc3QgeyByZXR1cm4g
bV9kaWRSZWN1cnNlOyB9CisKK3ByaXZhdGU6CisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0Q2FsbEZy
YW1lOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBt
X2RlcHRoVG9DaGVjazsKKyAgICBtdXRhYmxlIGJvb2wgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lOwor
ICAgIG11dGFibGUgYm9vbCBtX2RpZFJlY3Vyc2U7Cit9OworCit2b2lkIENvZGVCbG9jazo6bm90
aWNlSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUpCit7CisgICAgQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICBkYXRhTG9nKCJOb3RpY2lu
ZyBjYWxsIGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIs
ICp0aGlzLCAiXG4iKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIW1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFjYWxs
ZXJDb2RlQmxvY2spIHsKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0
YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgbmF0aXZlLlxuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghREZHOjptaWdodElubGluZUZ1bmN0aW9u
KHRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5
TGV2ZWxTdGF0ZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghREZHOjppc1Nt
YWxsRW5vdWdoVG9JbmxpbmVDb2RlSW50byhjYWxsZXJDb2RlQmxvY2spKSB7CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJl
Y2F1c2UgY2FsbGVyIGlzIHRvbyBsYXJnZS5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBzdGlsbCBpbiB0aGUgaW50
ZXJwcmV0ZXIsIHRoZW4gd2UgY2FuJ3QgZXhwZWN0IGlubGluaW5nIHRvCisgICAgICAgIC8vIGhh
cHBlbiBhbnl0aW1lIHNvb24uIEFzc3VtZSBpdCdzIHByb2ZpdGFibGUgdG8gb3B0aW1pemUgaXQg
c2VwYXJhdGVseS4gVGhpcworICAgICAgICAvLyBlbnN1cmVzIHRoYXQgYSBmdW5jdGlvbiBpcyBT
QUJJIG9ubHkgaWYgaXQgaXMgY2FsbGVkIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuCisgICAgICAg
IC8vIGFueSBvZiBpdHMgY2FsbGVycy4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAg
ICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgaW4gTExJ
bnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBi
Y2F1c2UgY2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC5cbiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVu
Y3Rpb25Db2RlKSB7CisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgZWl0aGVyIGV2YWwgb3Ig
Z2xvYmFsIGNvZGUsIGFzc3VtZSB0aGF0IHRoYXQgd29uJ3QgYmUKKyAgICAgICAgLy8gb3B0aW1p
emVkIGFueXRpbWUgc29vbi4gRm9yIGV2YWwgY29kZSB0aGlzIGlzIHBhcnRpY3VsYXJseSB0cnVl
IHNpbmNlIHdlCisgICAgICAgIC8vIGRlbGF5IGV2YWwgb3B0aW1pemF0aW9uIGJ5IGEgKmxvdCou
CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVh
cmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlzIG5vdCBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZWN1cnNpdmUgY2FsbHMgd29uJ3QgYmUgaW5saW5l
ZC4KKyAgICBSZWN1cnNpb25DaGVja0Z1bmN0b3IgZnVuY3RvcihjYWxsZXJGcmFtZSwgdGhpcywg
T3B0aW9uczo6bWF4aW11bUlubGluaW5nRGVwdGgoKSk7CisgICAgdm0oKS0+dG9wQ2FsbEZyYW1l
LT5pdGVyYXRlKGZ1bmN0b3IpOworCisgICAgaWYgKGZ1bmN0b3IuZGlkUmVjdXJzZSgpKSB7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgcmVjdXJzaW9uIHdhcyBkZXRlY3RlZC5cbiIp
OworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZl
bFN0YXRlKCkgPT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxv
ZygiSW4gY2FsbCBmcm9tICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNv
ZGVPcmlnaW4oKSwgIiB0byAiLCAqdGhpcywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2
ZWwgaXMgbm90IHNldC5cbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBp
ZiAoY2FuQ29tcGlsZShjYWxsZXJDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygp
KQorICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIHRoZSBjYWxsZXIg
aXMgbm90IGEgREZHIGNhbmRpZGF0ZS5cbiIpOworICAgIAorICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkID0gZmFsc2U7CisjZW5kaWYKK30KKwordW5zaWduZWQgQ29kZUJsb2NrOjpyZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NF
UlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlv
blJldHJ5Q291bnRlck1heCgpKTsKKyAgICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwor
I2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhS
ZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQoreworICAgIG1fY2FsbGVlU2F2ZVJlZ2lz
dGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KGNhbGxlZVNhdmVS
ZWdpc3RlcnMpOworfQorCit2b2lkIENvZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhz
dGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IHJlZ2lzdGVyQXRPZmZzZXRMaXN0
KQoreworICAgIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNl
dExpc3QpOworfQorICAgIAorc3RhdGljIHNpemVfdCByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycyhzaXplX3QgY2FsbGVlU2F2ZVJlZ2lzdGVycykKK3sKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY3B1UmVnaXN0ZXJTaXplID0gc2l6ZW9mKHZvaWQqKTsKKyAgICByZXR1
cm4gKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzaXplb2YoUmVnaXN0ZXIpLCBjYWxsZWVTYXZl
UmVnaXN0ZXJzICogY3B1UmVnaXN0ZXJTaXplKSAvIHNpemVvZihSZWdpc3RlcikpOworCit9CisK
K3NpemVfdCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKQoreworICAgIHJldHVybiByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycyhudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQor
CitzaXplX3QgQ29kZUJsb2NrOjpjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKQor
eworICAgIHJldHVybiByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyhtX2Nh
bGxlZVNhdmVSZWdpc3RlcnMtPnNpemUoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3VudFJl
b3B0aW1pemF0aW9uKCkKK3sKKyAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgaWYgKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiBPcHRpb25zOjpyZW9wdGltaXph
dGlvblJldHJ5Q291bnRlck1heCgpKQorICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKK30KKwordW5z
aWduZWQgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKCkKK3sKKyAgICBBU1NFUlQoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CisgICAgaWYgKE9wdGlvbnM6OnRlc3RU
aGVGVEwoKSkgeworICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCisgICAgICAg
ICAgICByZXR1cm4gMTAwMDAwMDsKKyAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdp
dGhGVEwgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIH0KKyAg
ICByZXR1cm4gKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBl
KCkpID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKK30KKworaW50MzJf
dCBDb2RlQmxvY2s6OmNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0Cit7CisgICAg
aWYgKGNvZGVUeXBlKCkgPT0gRXZhbENvZGUpCisgICAgICAgIHJldHVybiBPcHRpb25zOjpldmFs
VGhyZXNob2xkTXVsdGlwbGllcigpOworICAgIAorICAgIHJldHVybiAxOworfQorCitkb3VibGUg
Q29kZUJsb2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCkKK3sKKyAgICAv
LyBUaGlzIGV4cHJlc3Npb24gYXJpc2VzIGZyb20gZG9pbmcgYSBsZWFzdC1zcXVhcmVzIGZpdCBv
ZgorICAgIC8vCisgICAgLy8gRlt4X10gPTogYSAqIFNxcnRbeCArIGJdICsgQWJzW2MgKiB4XSAr
IGQKKyAgICAvLworICAgIC8vIGFnYWluc3QgdGhlIGRhdGEgcG9pbnRzOgorICAgIC8vCisgICAg
Ly8gICAgeCAgICAgICBGW3hfXQorICAgIC8vICAgIDEwICAgICAgIDAuOSAgICAgICAgICAoc21h
bGxlc3QgcmVhc29uYWJsZSBjb2RlIGJsb2NrKQorICAgIC8vICAgMjAwICAgICAgIDEuMCAgICAg
ICAgICAodHlwaWNhbCBzbWFsbC1pc2ggY29kZSBibG9jaykKKyAgICAvLyAgIDMyMCAgICAgICAx
LjIgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJlIHRoYXQgSSB3YW50ZWQgdG8g
b3B0aW1pemUpCisgICAgLy8gIDEyNjggICAgICAgNS4wICAgICAgICAgIChzb21ldGhpbmcgSSBz
YXcgaW4gM2QtY3ViZSB0aGF0IEkgZGlkbid0IHdhbnQgdG8gb3B0aW1pemUpCisgICAgLy8gIDQw
MDAgICAgICAgNS41ICAgICAgICAgIChyYW5kb20gbGFyZ2Ugc2l6ZSwgdXNlZCB0byBjYXVzZSB0
aGUgZnVuY3Rpb24gdG8gY29udmVyZ2UgdG8gYSBzaGFsbG93IGN1cnZlIG9mIHNvbWUgc29ydCkK
KyAgICAvLyAxMDAwMCAgICAgICA2LjAgICAgICAgICAgKHNpbWlsYXIgdG8gYWJvdmUpCisgICAg
Ly8KKyAgICAvLyBJIGFjaGlldmUgdGhlIG1pbmltaXphdGlvbiB1c2luZyB0aGUgZm9sbG93aW5n
IE1hdGhlbWF0aWNhIGNvZGU6CisgICAgLy8KKyAgICAvLyBNeUZ1bmN0aW9uVGVtcGxhdGVbeF8s
IGFfLCBiXywgY18sIGRfXSA6PSBhKlNxcnRbeCArIGJdICsgQWJzW2MqeF0gKyBkCisgICAgLy8K
KyAgICAvLyBzYW1wbGVzID0ge3sxMCwgMC45fSwgezIwMCwgMX0sIHszMjAsIDEuMn0sIHsxMjY4
LCA1fSwgezQwMDAsIDUuNX0sIHsxMDAwMCwgNn19CisgICAgLy8KKyAgICAvLyBzb2x1dGlvbiA9
IAorICAgIC8vICAgICBNaW5pbWl6ZVtQbHVzIEBAICgoTXlGdW5jdGlvblRlbXBsYXRlWyNbWzFd
XSwgYSwgYiwgYywgZF0gLSAjW1syXV0pXjIgJiAvQCBzYW1wbGVzKSwKKyAgICAvLyAgICAgICAg
IHthLCBiLCBjLCBkfV1bWzJdXQorICAgIC8vCisgICAgLy8gQW5kIHRoZSBjb2RlIGJlbG93ICh0
byBpbml0aWFsaXplIGEsIGIsIGMsIGQpIGlzIGdlbmVyYXRlZCBieToKKyAgICAvLworICAgIC8v
IFByaW50WyJjb25zdCBkb3VibGUgIiA8PiBUb1N0cmluZ1sjW1sxXV1dIDw+ICIgPSAiIDw+Cisg
ICAgLy8gICAgIElmWyNbWzJdXSA8IDAuMDAwMDEsICIwLjAiLCBUb1N0cmluZ1sjW1syXV1dXSA8
PiAiOyJdICYgL0Agc29sdXRpb24KKyAgICAvLworICAgIC8vIFdlJ3ZlIGxvbmcga25vd24gdGhl
IGZvbGxvd2luZyB0byBiZSB0cnVlOgorICAgIC8vIC0gU21hbGwgY29kZSBibG9ja3MgYXJlIGNo
ZWFwIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgZG8gaXQgc29vbmVyIHJhdGhlcgorICAg
IC8vICAgdGhhbiBsYXRlci4KKyAgICAvLyAtIExhcmdlIGNvZGUgYmxvY2tzIGFyZSBleHBlbnNp
dmUgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBwb3N0cG9uZSBkb2luZyBzbywKKyAgICAv
LyAgIGFuZCBzb21ldGltZXMgaGF2ZSBhIGxhcmdlIGVub3VnaCB0aHJlc2hvbGQgdGhhdCB3ZSBu
ZXZlciBvcHRpbWl6ZSB0aGVtLgorICAgIC8vIC0gVGhlIGRpZmZlcmVuY2UgaW4gY29zdCBpcyBu
b3QgdG90YWxseSBsaW5lYXIgYmVjYXVzZSAoYSkganVzdCBpbnZva2luZyB0aGUKKyAgICAvLyAg
IERGRyBpbmN1cnMgc29tZSBiYXNlIGNvc3QgYW5kIChiKSBmb3IgbGFyZ2UgY29kZSBibG9ja3Mg
dGhlcmUgaXMgZW5vdWdoIHNsb3AKKyAgICAvLyAgIGluIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVu
IGluc3RydWN0aW9uIGNvdW50IGFuZCB0aGUgYWN0dWFsIGNvbXBpbGF0aW9uIGNvc3QKKyAgICAv
LyAgIHRoYXQgZm9yIHRob3NlIGxhcmdlIGJsb2NrcywgdGhlIGluc3RydWN0aW9uIGNvdW50IHNo
b3VsZCBub3QgaGF2ZSBhIHN0cm9uZworICAgIC8vICAgaW5mbHVlbmNlIG9uIG91ciB0aHJlc2hv
bGQuCisgICAgLy8KKyAgICAvLyBJIGtuZXcgdGhlIGdvYWxzIGJ1dCBJIGRpZG4ndCBrbm93IGhv
dyB0byBhY2hpZXZlIHRoZW07IHNvIEkgcGlja2VkIGFuIGludGVyZXN0aW5nCisgICAgLy8gZXhh
bXBsZSB3aGVyZSB0aGUgaGV1cmlzdGljcyB3ZXJlIHJpZ2h0IChjb2RlIGJsb2NrIGluIDNkLWN1
YmUgd2l0aCBpbnN0cnVjdGlvbgorICAgIC8vIGNvdW50IDMyMCwgd2hpY2ggZ290IGNvbXBpbGVk
IGVhcmx5IGFzIGl0IHNob3VsZCBoYXZlIGJlZW4pIGFuZCBvbmUgd2hlcmUgdGhleSB3ZXJlCisg
ICAgLy8gdG90YWxseSB3cm9uZyAoY29kZSBibG9jayBpbiAzZC1jdWJlIHdpdGggaW5zdHJ1Y3Rp
b24gY291bnQgMTI2OCwgd2hpY2ggd2FzIGV4cGVuc2l2ZQorICAgIC8vIHRvIGNvbXBpbGUgYW5k
IGRpZG4ndCBydW4gb2Z0ZW4gZW5vdWdoIHRvIHdhcnJhbnQgY29tcGlsYXRpb24gaW4gbXkgb3Bp
bmlvbiksIGFuZAorICAgIC8vIHRoZW4gdGhyZXcgaW4gYWRkaXRpb25hbCBkYXRhIHBvaW50cyB0
aGF0IHJlcHJlc2VudGVkIG15IG93biBndWVzcyBvZiB3aGF0IG91cgorICAgIC8vIGhldXJpc3Rp
Y3Mgc2hvdWxkIGRvIGZvciBzb21lIHJvdW5kLW51bWJlcmVkIGV4YW1wbGVzLgorICAgIC8vCisg
ICAgLy8gVGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggSSBkZWNpZGVkIHRvIGZpdCB0aGUgZGF0YSBh
cm9zZSBiZWNhdXNlIEkgc3RhcnRlZCB3aXRoIGFuCisgICAgLy8gYWZmaW5lIGZ1bmN0aW9uLCBh
bmQgdGhlbiBkaWQgdHdvIHRoaW5nczogcHV0IHRoZSBsaW5lYXIgcGFydCBpbiBhbiBBYnMgdG8g
ZW5zdXJlCisgICAgLy8gdGhhdCB0aGUgZml0IGRpZG4ndCBlbmQgdXAgY2hvb3NpbmcgYSBuZWdh
dGl2ZSB2YWx1ZSBvZiBjICh3aGljaCB3b3VsZCByZXN1bHQgaW4KKyAgICAvLyB0aGUgZnVuY3Rp
b24gdHVybmluZyBvdmVyIGFuZCBnb2luZyBuZWdhdGl2ZSBmb3IgbGFyZ2UgeCkgYW5kIEkgdGhy
ZXcgaW4gYSBTcXJ0CisgICAgLy8gdGVybSBiZWNhdXNlIFNxcnQgcmVwcmVzZW50cyBteSBpbnR1
dGlvbiB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgbW9yZSBzZW5zaXRpdmUKKyAgICAvLyB0
byBzbWFsbCBjaGFuZ2VzIGluIHNtYWxsIHZhbHVlcyBvZiB4LCBidXQgbGVzcyBzZW5zaXRpdmUg
d2hlbiB4IGdldHMgbGFyZ2UuCisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBjdXJyZW50IGZp
dCBlc3NlbnRpYWxseSBlbGltaW5hdGVzIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUKKyAgICAv
LyBleHByZXNzaW9uIChjID09IDAuMCkuCisgICAgY29uc3QgZG91YmxlIGEgPSAwLjA2MTUwNDsK
KyAgICBjb25zdCBkb3VibGUgYiA9IDEuMDI0MDY7CisgICAgY29uc3QgZG91YmxlIGMgPSAwLjA7
CisgICAgY29uc3QgZG91YmxlIGQgPSAwLjgyNTkxNDsKKyAgICAKKyAgICBkb3VibGUgaW5zdHJ1
Y3Rpb25Db3VudCA9IHRoaXMtPmluc3RydWN0aW9uQ291bnQoKTsKKyAgICAKKyAgICBBU1NFUlQo
aW5zdHJ1Y3Rpb25Db3VudCk7IC8vIE1ha2Ugc3VyZSB0aGlzIGlzIGNhbGxlZCBvbmx5IGFmdGVy
IHdlIGhhdmUgYW4gaW5zdHJ1Y3Rpb24gc3RyZWFtOyBvdGhlcndpc2UgaXQnbGwganVzdCByZXR1
cm4gdGhlIHZhbHVlIG9mIGQsIHdoaWNoIG1ha2VzIG5vIHNlbnNlLgorICAgIAorICAgIGRvdWJs
ZSByZXN1bHQgPSBkICsgYSAqIHNxcnQoaW5zdHJ1Y3Rpb25Db3VudCArIGIpICsgYyAqIGluc3Ry
dWN0aW9uQ291bnQ7CisgICAgCisgICAgcmVzdWx0ICo9IGNvZGVUeXBlVGhyZXNob2xkTXVsdGlw
bGllcigpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygKKyAgICAgICAgICAgICp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBpcyAiLCBp
bnN0cnVjdGlvbkNvdW50LAorICAgICAgICAgICAgIiwgc2NhbGluZyBleGVjdXRpb24gY291bnRl
ciBieSAiLCByZXN1bHQsICIgKiAiLCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSwKKyAg
ICAgICAgICAgICJcbiIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
aW50MzJfdCBjbGlwVGhyZXNob2xkKGRvdWJsZSB0aHJlc2hvbGQpCit7CisgICAgaWYgKHRocmVz
aG9sZCA8IDEuMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgaWYgKHRocmVzaG9sZCA+
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
KQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCk7Cisg
ICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHRocmVzaG9sZCk7Cit9CisKK2lu
dDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZENvdW50ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJl
c2hvbGQpCit7CisgICAgcmV0dXJuIGNsaXBUaHJlc2hvbGQoCisgICAgICAgIHN0YXRpY19jYXN0
PGRvdWJsZT4oZGVzaXJlZFRocmVzaG9sZCkgKgorICAgICAgICBvcHRpbWl6YXRpb25UaHJlc2hv
bGRTY2FsaW5nRmFjdG9yKCkgKgorICAgICAgICAoMSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKERGRzo6V29ya2xp
c3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCkpIHsK
KyAgICAgICAgaWYgKHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6Q29tcGlsYXRpb25L
ZXkodGhpcywgREZHOjpERkdNb2RlKSkKKyAgICAgICAgICAgID09IERGRzo6V29ya2xpc3Q6OkNv
bXBpbGVkKSB7CisgICAgICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIAorICAgIHJl
dHVybiBtX2ppdEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRo
aXMpOworfQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbigpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjog
T3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
LnNldE5ld1RocmVzaG9sZCgwLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRvbnRPcHRp
bWl6ZUFueXRpbWVTb29uKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICBkYXRhTG9nKCp0aGlzLCAiOiBOb3Qgb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4iKTsK
KyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIHdh
cm0tdXAuXG4iKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVy
LnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisjZW5kaWYKK30KKwor
dm9pZCBDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKK3sKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5n
IGFmdGVyIGxvbmcgd2FybS11cC5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1faml0
RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAgICAgICBhZGp1c3RlZENvdW50ZXJW
YWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgdGhp
cyk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6Om9wdGltaXplU29vbigpCit7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0
aW1pemluZyBzb29uLlxuIik7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9qaXRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplU29vbigpKSwgdGhpcyk7CisjZW5kaWYKK30KKwor
dm9pZCBDb2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKQor
eworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMs
ICI6IEZvcmNpbmcgc2xvdyBwYXRoIGNvbmN1cnJlbnRseS5cbiIpOworICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIuZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOworfQorCisjaWYgRU5BQkxFKERG
R19KSVQpCit2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBKSVRDb2Rl
OjpKSVRUeXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgaWYgKHR5cGUgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpIHsKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBi
YXNlbGluZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIHRoZVJlcGxh
Y2VtZW50ID0gcmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1
Y2Nlc3NmdWwpICE9ICh0aGVSZXBsYWNlbWVudCAhPSB0aGlzKSkgeworICAgICAgICBkYXRhTG9n
KCp0aGlzLCAiOiB3ZSBoYXZlIHJlc3VsdCA9ICIsIHJlc3VsdCwgIiBidXQgIik7CisgICAgICAg
IGlmICh0aGVSZXBsYWNlbWVudCA9PSB0aGlzKQorICAgICAgICAgICAgZGF0YUxvZygid2UgYXJl
IG91ciBvd24gcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0
YUxvZygib3VyIHJlcGxhY2VtZW50IGlzICIsIHBvaW50ZXJEdW1wKHRoZVJlcGxhY2VtZW50KSwg
IlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNl
bWVudCgpLT5qaXRUeXBlKCkpKTsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAgICAgZG9u
dE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGls
YXRpb25EZWZlcnJlZDoKKyAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGRvIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCkgYnV0IHdlIGNhbm5vdCBiZWNhdXNlCisgICAgICAgIC8vIGZvcmNlT3B0aW1p
emF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKSBpcyBpbmhlcmVudGx5IHJhY3kuIEl0IHdvbid0
CisgICAgICAgIC8vIG5lY2Vzc2FyaWx5IGd1YXJhbnRlZSBhbnl0aGluZy4gU28sIHdlIG1ha2Ug
c3VyZSB0aGF0IGV2ZW4gaWYgdGhhdAorICAgICAgICAvLyBmdW5jdGlvbiBlbmRzIHVwIGJlaW5n
IGEgbm8tb3AsIHdlIHN0aWxsIGV2ZW50dWFsbHkgcmV0cnkgYW5kIHJlYWxpemUKKyAgICAgICAg
Ly8gdGhhdCB3ZSBoYXZlIG9wdGltaXplZCBjb2RlIHJlYWR5LgorICAgICAgICBvcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CisgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KKyAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGF0YUxvZygiVW5yZWNvZ25pemVk
IHJlc3VsdDogIiwgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpLCAiXG4iKTsKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCisjZW5kaWYKKyAgICAKK3VpbnQzMl90IENvZGVC
bG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9s
ZCkKK3sKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwor
ICAgIC8vIENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRo
aXMgaXMgY2FsbGVkIGluZnJlcXVlbnRseQorICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3
b24ndCBodXJ0IHVzLgorICAgIHVuc2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7Cisg
ICAgZm9yICh1bnNpZ25lZCBuID0gYmFzZWxpbmVWZXJzaW9uKCktPnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCk7IG4tLTspIHsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVzdWx0ID0gcmVzdWx0
IDw8IDE7CisgICAgICAgIGlmIChuZXdSZXN1bHQgPCByZXN1bHQpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXN1bHQg
PSBuZXdSZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3VpbnQzMl90IENv
ZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKQoreworICAgIHJl
dHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JS
ZW9wdGltaXphdGlvbigpICogY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkpOworfQorCit1
aW50MzJfdCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJv
bUxvb3AoKQoreworICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25z
Ojpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkgKiBjb2RlVHlwZVRocmVz
aG9sZE11bHRpcGxpZXIoKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXpl
Tm93KCkKK3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hv
bGRGb3JSZW9wdGltaXphdGlvbigpOworfQorCitib29sIENvZGVCbG9jazo6c2hvdWxkUmVvcHRp
bWl6ZUZyb21Mb29wTm93KCkKK3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7Cit9CisjZW5kaWYKKwor
QXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9hcnJheVByb2ZpbGVzW2ldLmJ5dGVjb2RlT2Zmc2V0KCkgPT0gYnl0ZWNvZGVPZmZzZXQpCisg
ICAgICAgICAgICByZXR1cm4gJm1fYXJyYXlQcm9maWxlc1tpXTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICByZXR1cm4gZ2V0QXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQp
OworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBtX2Fy
cmF5UHJvZmlsZXMuYXBwZW5kKEFycmF5UHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJl
dHVybiAmbV9hcnJheVByb2ZpbGVzLmxhc3QoKTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxv
Y2s6OmFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBhZGRBcnJheVByb2Zp
bGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Cit9CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2Nr
OjpnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFycmF5UHJvZmlsZSogcmVzdWx0ID0g
Z2V0QXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChyZXN1bHQp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGFkZEFycmF5UHJvZmlsZShsb2Nr
ZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9y
QWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldE9yQWRkQXJyYXlQcm9m
aWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitW
ZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBDb2RlQmxvY2s6OmNv
ZGVPcmlnaW5zKCkKK3sKKyAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+Y29kZU9y
aWdpbnM7Cit9CisKK3NpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMoKSBj
b25zdAoreworICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
LT5kZmdJZGVudGlmaWVycy5zaXplKCk7Cit9CisKK2NvbnN0IElkZW50aWZpZXImIENvZGVCbG9j
azo6aWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHVubGlua2VkSWRl
bnRpZmllcnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOworICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKKyAg
ICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKKyAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIHJldHVybiBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRp
ZmllcnNdOworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
CisgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICBudW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVu
IHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gZ2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMoaSk7CisgICAgICAgIHVuc2lnbmVk
IG51bVNhbXBsZXMgPSBwcm9maWxlLT50b3RhbE51bWJlck9mU2FtcGxlcygpOworICAgICAgICBp
ZiAobnVtU2FtcGxlcyA+IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzKQorICAgICAgICAg
ICAgbnVtU2FtcGxlcyA9IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24n
dCB3YW50IHByb2ZpbGVzIHRoYXQgYXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3
ZWlnaHQuCisgICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsK
KyAgICAgICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7CisgICAgICAgICAg
ICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9maWxlLT5udW1iZXJPZlNhbXBs
ZXMoKSB8fCBwcm9maWxlLT5tX3ByZWRpY3Rpb24gIT0gU3BlY05vbmUpCisgICAgICAgICAgICBu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMrKzsKKyAgICAgICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgfQorICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbnMobG9ja2VyKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKQoreworICAgIHVuc2lnbmVkIGlnbm9yZWRWYWx1
ZTEsIGlnbm9yZWRWYWx1ZTI7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVu
ZXNzKGlnbm9yZWRWYWx1ZTEsIGlnbm9yZWRWYWx1ZTIpOworfQorCit2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJvZmls
ZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgdGhpcyk7CisgICAgCisgICAgLy8gRG9uJ3QgY291bnQgdGhl
c2UgZWl0aGVyLCBmb3Igc2ltaWxhciByZWFzb25zLgorICAgIGZvciAodW5zaWduZWQgaSA9IG1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2FycmF5QWxs
b2NhdGlvblByb2ZpbGVzW2ldLnVwZGF0ZUluZGV4aW5nVHlwZSgpOworfQorCit2b2lkIENvZGVC
bG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMoKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICBpZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25zKCk7CisgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworfQorCitib29sIENvZGVC
bG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIu
Li5cbiIpOworCisgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9wdGlvbnM6
Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CisgICAgCisgICAgdW5zaWduZWQgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG51bWJlck9m
U2FtcGxlc0luUHJvZmlsZXM7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVu
ZXNzKG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcyk7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAg
IGRhdGFMb2dGKAorICAgICAgICAgICAgIlByb2ZpbGUgaG90bmVzczogJWxmICgldSAvICV1KSwg
JWxmICgldSAvICV1KVxuIiwKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCisgICAgICAgICAg
ICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mVmFsdWVQcm9m
aWxlcygpLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwK
KyAgICAgICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVt
YmVyT2ZCdWNrZXRzICogbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOworICAgIH0KKworICAgIGlm
ICgoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6
ZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKKyAgICAgICAgJiYgKCF0b3RhbE51bWJlck9m
VmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZh
bHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQorICAgICAgICAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIpICsgMSA+PSBP
cHRpb25zOjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgQVNTRVJUKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpOworICAgIG1fb3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyKys7CisgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworI2lmIEVOQUJMRShERkdfSklUKQordm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0
U2l0ZXMoKQoreworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSk7CisgICAgQVNTRVJUKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRp
dmUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6
REZHSklUOiB7CisgICAgICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZn
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBERkc6Ok9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5v
c3JFeGl0W2ldOworICAgICAgICAgICAgZXhpdC5jb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZShwcm9maWxlZEJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogeworICAgICAg
ICAvLyBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGlzIGNvZGUg
c2luY2UgdGhlIEZUTDo6SklUQ29kZTo6b3NyRXhpdAorICAgICAgICAvLyB2ZWN0b3IgY29udGFp
bnMgYSB0b3RhbGx5IGRpZmZlcmVudCB0eXBlLCB0aGF0IGp1c3Qgc28gaGFwcGVucyB0byBiZWhh
dmUgbGlrZQorICAgICAgICAvLyBERkc6OkpJVENvZGU6Om9zckV4aXQuCisgICAgICAgIEZUTDo6
SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZnRsKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBGVEw6Ok9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAg
ZXhpdC5jb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZEJsb2NrKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjaWYgRU5BQkxFKFZF
UkJPU0VfVkFMVUVfUFJPRklMRSkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygp
Cit7CisgICAgZGF0YUxvZygiVmFsdWVQcm9maWxlIGZvciAiLCAqdGhpcywgIjpcbiIpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpOyAr
K2kpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0RnJvbUFsbFZhbHVlUHJv
ZmlsZXMoaSk7CisgICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewor
ICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgIGFyZyA9ICV1OiAiLCBpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9m
ZnNldCk7CisgICAgICAgIGlmICghcHJvZmlsZS0+bnVtYmVyT2ZTYW1wbGVzKCkgJiYgcHJvZmls
ZS0+bV9wcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiPGVt
cHR5PlxuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwcm9m
aWxlLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAg
IH0KKyAgICBkYXRhTG9nKCJSYXJlQ2FzZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpOyAr
K2kpIHsKKyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxl
KGkpOworICAgICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CisgICAgfQorfQorI2VuZGlmIC8vIEVO
QUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCisKK3Vuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVS
ZWdpc3RlckNvdW50KCkKK3sKKyAgICBzd2l0Y2ggKGppdFR5cGUoKSkgeworICAgIGNhc2UgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgcmV0dXJuIExMSW50OjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IodGhpcyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGNhc2UgSklUQ29kZTo6
QmFzZWxpbmVKSVQ6CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0
aGlzKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
Y2FzZSBKSVRDb2RlOjpERkdKSVQ6CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAg
IHJldHVybiBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5mcmFtZVJlZ2lzdGVyQ291bnQ7CisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworaW50IENvZGVCbG9jazo6c3RhY2tQb2ludGVyT2Zmc2V0KCkKK3sKKyAgICByZXR1cm4gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50KCkgLSAxKS5vZmZzZXQoKTsK
K30KKworc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKK3sKKyAg
ICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3Jl
IGVpdGhlciBtX3ZtIG9yIHRoZQorICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlh
bGl6ZWQuIEl0J3MgT0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CisgICAg
Ly8gbWF0dGVyIGlzIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xv
dyBwYXRoIGlzIHRyaWdnZXJlZC4KKyAgICBpZiAoIW1fdm0pCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIGlmICghKm1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JC
YXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIDA7IC8vIEl0J3MgYXMgZ29vZCBvZiBhIHByZWRp
Y3Rpb24gYXMgd2UnbGwgZ2V0LgorICAgIAorICAgIC8vIEJlIGNvbnNlcnZhdGl2ZTogcmV0dXJu
IGEgc2l6ZSB0aGF0IHdpbGwgYmUgYW4gb3ZlcmVzdGltYXRpb24gODQlIG9mIHRoZSB0aW1lLgor
ICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklULT5tZWFuKCkgKworICAgICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5
dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPnN0YW5kYXJkRGV2aWF0aW9uKCk7Cisg
ICAgCisgICAgLy8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJz
LiBTaWxlbnRseSBkb2luZyB0aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNp
bmNlIHRoaXMgd2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRp
cGxpZXIgPCAwIHx8IG11bHRpcGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICBkb3VibGUgZG91YmxlUmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNp
emUoKTsKKyAgICAKKyAgICAvLyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVj
dCB2YWx1ZXMgdGhhdCB3b24ndCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVu
Y3Rpb24gaXMgc28gaHVnZSB0aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBt
ZW1vcnkgdGhlbiB3ZQorICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3Vh
cmRzIGluIHBsYWNlIHRvIHByZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0
aGlzIHBvaW50LgorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihkb3VibGVSZXN1bHQpOworfQorCitib29sIENvZGVCbG9jazo6dXNlc09w
Y29kZShPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSB2bSgpLT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4g
PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQg
PSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAg
ICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5
dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIHsKKyNkZWZpbmUgREVGSU5FX09QKGN1ck9wY29kZSwg
bGVuZ3RoKSAgICAgICAgXAorICAgICAgICBjYXNlIGN1ck9wY29kZTogICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBpZiAoY3VyT3Bjb2RlID09IG9wY29kZUlEKSAgICAgIFwKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9JRChERUZJTkVfT1ApCisjdW5kZWYgREVGSU5FX09Q
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5nZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3lt
Ym9sVGFibGUqPihtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKSkgeworICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAg
ICAgICBhdXRvIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBwdHIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytw
dHIpIHsKKyAgICAgICAgICAgICAgICBpZiAocHRyLT52YWx1ZS52YXJPZmZzZXQoKSA9PSBWYXJP
ZmZzZXQodmlydHVhbFJlZ2lzdGVyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyB3b24ndCB3b3JrIGZyb20gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTMw
MAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHRyLT5rZXkuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICh2aXJ0dWFs
UmVnaXN0ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
InRoaXMiKTsKKyAgICBpZiAodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJhcmd1bWVudHNbJTNkXSIsIHZpcnR1YWxSZWdpc3Rlci50
b0FyZ3VtZW50KCkpOworCisgICAgcmV0dXJuICIiOworfQorCitWYWx1ZVByb2ZpbGUqIENvZGVC
bG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV92bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICByZXR1cm4gaW5zdHJ1Y3Rpb25z
KClbYnl0ZWNvZGVPZmZzZXQgKyBsZW5ndGggLSAxXS51LnByb2ZpbGU7Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrOjp2YWxpZGF0ZSgpCit7CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVu
ZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0
IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZUF0SGVhZCA9IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoMCk7Cisg
ICAgCisgICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
bV9udW1DYWxsZWVMb2NhbHMpKSB7CisgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsK
KyAgICAgICAgZGF0YUxvZygiICAgIFdyb25nIG51bWJlciBvZiBiaXRzIGluIHJlc3VsdCFcbiIp
OworICAgICAgICBkYXRhTG9nKCIgICAgUmVzdWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiICAgIEJpdCBjb3VudDogIiwgbGl2ZUF0SGVhZC5udW1CaXRzKCksICJc
biIpOworICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIH0KKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX251bUNhbGxlZUxvY2FsczsgaS0tOykgeworICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7CisgICAgICAgIAor
ICAgICAgICBpZiAobGl2ZUF0SGVhZFtpXSkgeworICAgICAgICAgICAgYmVnaW5WYWxpZGF0aW9u
RGlkRmFpbCgpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlICIsIHJlZywgIiBp
cyBleHBlY3RlZCB0byBiZSBkZWFkLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVz
dWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIGVuZFZhbGlkYXRpb25EaWRG
YWlsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpiZWdpblZhbGlk
YXRpb25EaWRGYWlsKCkKK3sKKyAgICBkYXRhTG9nKCJWYWxpZGF0aW9uIGZhaWx1cmUgaW4gIiwg
KnRoaXMsICI6XG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworfQorCit2b2lkIENvZGVCbG9jazo6
ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKQoreworICAgIGRhdGFMb2coIlxuIik7CisgICAgZHVtcEJ5
dGVjb2RlKCk7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCJWYWxpZGF0aW9uIGZh
aWx1cmUuXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IENvZGVCbG9jazo6YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKK3sKKyAg
ICBtX251bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOworICAgIEFTU0VSVChtX251bUJy
ZWFrcG9pbnRzKTsKKyAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
CisgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3Bv
aW50KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0
ZXBwaW5nTW9kZSBtb2RlKQoreworICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKKyAgICBpZiAo
bW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQorICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVn
Z2VyU3RlcHBpbmcpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6YWRkUmFyZUNh
c2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBtX3JhcmVDYXNlUHJvZmlsZXMu
YXBwZW5kKFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAmbV9y
YXJlQ2FzZVByb2ZpbGVzLmxhc3QoKTsKK30KKworUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6
OnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sK
KyAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKKyAgICAg
ICAgbV9yYXJlQ2FzZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29k
ZU9mZnNldCwKKyAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOworfQor
Cit1bnNpZ25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZz
ZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9
IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBp
ZiAocHJvZmlsZSkKKyAgICAgICAgcmV0dXJuIHByb2ZpbGUtPm1fY291bnRlcjsKKyAgICByZXR1
cm4gMDsKK30KKworQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICByZXR1cm4gYXJpdGhQcm9maWxl
Rm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworQXJp
dGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvclBDKEluc3RydWN0aW9uKiBwYykK
K3sKKyAgICBhdXRvIG9wY29kZUlEID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBj
WzBdLnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9uZWdh
dGU6CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzNdLnUu
b3BlcmFuZCk7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICBj
YXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2FkZDoKKyAgICBjYXNlIG9wX211bDoKKyAgICBj
YXNlIG9wX3N1YjoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxBcml0aFByb2ZpbGUqPigmcGNbNF0udS5vcGVyYW5kKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBDb2RlQmxv
Y2s6OmNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQXJpdGhQcm9maWxlKiBwcm9maWxlID0gYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpOworICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBwcm9maWxlLT50b29rU3BlY2lhbEZhc3RQYXRoKCk7Cit9CisKKyNpZiBF
TkFCTEUoSklUKQorREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2
ZWwoKQoreworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IGNvbXB1dGVDYXBhYmls
aXR5TGV2ZWwoKTsKKyAgICBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlID0gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwordm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxv
Y2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihSZWZDb3VudGVkQXJyYXk8SW5zdHJ1
Y3Rpb24+JiBpbnN0cnVjdGlvbnMpCit7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaygpLT5o
YXNPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpKQorICAgICAgICByZXR1cm47
CisgICAgY29uc3QgVmVjdG9yPHNpemVfdD4mIGJ5dGVjb2RlT2Zmc2V0cyA9IHVubGlua2VkQ29k
ZUJsb2NrKCktPm9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDAsIG9mZnNldHNMZW5ndGggPSBieXRlY29kZU9mZnNldHMuc2l6ZSgpOyBp
IDwgb2Zmc2V0c0xlbmd0aDsgaSsrKSB7CisgICAgICAgIC8vIEJlY2F1c2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3cgaXMgZW1pdHRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGJhc2ljIGJs
b2NrLCBmaW5kaW5nIAorICAgICAgICAvLyB0aGUgbmV4dCBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyB3aWxsIGdpdmUgdXMgdGhlIHRleHQgcmFuZ2Ugb2YgYSBzaW5nbGUgYmFzaWMgYmxvY2suCisg
ICAgICAgIHNpemVfdCBzdGFydElkeCA9IGJ5dGVjb2RlT2Zmc2V0c1tpXTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc1tz
dGFydElkeF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKKyAgICAgICAg
aW50IGJhc2ljQmxvY2tTdGFydE9mZnNldCA9IGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUu
b3BlcmFuZDsKKyAgICAgICAgaW50IGJhc2ljQmxvY2tFbmRPZmZzZXQ7CisgICAgICAgIGlmIChp
ICsgMSA8IG9mZnNldHNMZW5ndGgpIHsKKyAgICAgICAgICAgIHNpemVfdCBlbmRJZHggPSBieXRl
Y29kZU9mZnNldHNbaSArIDFdOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc1tlbmRJZHhdLnUub3Bjb2RlKSA9PSBv
cF9wcm9maWxlX2NvbnRyb2xfZmxvdyk7CisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0
ID0gaW5zdHJ1Y3Rpb25zW2VuZElkeCArIDFdLnUub3BlcmFuZCAtIDE7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0ID0gbV9zb3VyY2VPZmZzZXQgKyBv
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkubGVuZ3RoKCkgLSAxOyAvLyBPZmZzZXQg
YmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgorICAgICAgICAgICAgYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBhdCB0aGUgY2xvc2luZyBicmFjZSwgZW5z
dXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgorICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IGZvbGxvd2luZyBjaGVjayBhbGxvd3MgZm9yIHRoZSBzYW1lIHRleHR1YWwgSmF2YVNjcmlwdCBi
YXNpYyBibG9jayB0byBoYXZlIGl0cyBieXRlY29kZSBlbWl0dGVkIG1vcmUKKyAgICAgICAgLy8g
dGhhbiBvbmNlIGFuZCBzdGlsbCBwbGF5IG5pY2Ugd2l0aCB0aGUgY29udHJvbCBmbG93IHByb2Zp
bGVyLiBXaGVuIGJhc2ljQmxvY2tTdGFydE9mZnNldCBpcyBsYXJnZXIgdGhhbiAKKyAgICAgICAg
Ly8gYmFzaWNCbG9ja0VuZE9mZnNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGJ5dGVjb2RlIGdl
bmVyYXRvciBoYXMgZW1pdHRlZCBjb2RlIGZvciB0aGUgc2FtZSBBU1Qgbm9kZSAKKyAgICAgICAg
Ly8gbW9yZSB0aGFuIG9uY2UgKGZvciBleGFtcGxlOiBGb3JJbk5vZGUsIEZpbmFsbHkgYmxvY2tz
IGluIFRyeU5vZGUsIGV0YykuIFRob3VnaCB0aGVzZSBhcmUgZGlmZmVyZW50IAorICAgICAgICAv
LyBiYXNpYyBibG9ja3MgYXQgdGhlIGJ5dGVjb2RlIGxldmVsLCB0aGV5IGFyZSBnZW5lcmF0ZWQg
ZnJvbSB0aGUgc2FtZSB0ZXh0dWFsIGJhc2ljIGJsb2NrIGluIHRoZSBKYXZhU2NyaXB0IAorICAg
ICAgICAvLyBwcm9ncmFtLiBUaGUgY29uZGl0aW9uOiAKKyAgICAgICAgLy8gKGJhc2ljQmxvY2tF
bmRPZmZzZXQgPCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQpIAorICAgICAgICAvLyBpcyBlbmNvdW50
ZXJlZCB3aGVuIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IGxpZXMgYWNyb3NzIHRoZSBib3VuZGFy
eSBvZiB0aGVzZSBkdXBsaWNhdGVkIGJ5dGVjb2RlIGJhc2ljIAorICAgICAgICAvLyBibG9ja3Mg
YW5kIHRoZSB0ZXh0dWFsIG9mZnNldCBnb2VzIGZyb20gdGhlIGVuZCBvZiB0aGUgZHVwbGljYXRl
ZCBibG9jayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuIFRoZXNlIAorICAgICAgICAvLyByYW5nZXMg
YXJlIGR1bW15IHJhbmdlcyBhbmQgYXJlIGlnbm9yZWQuIFRoZSBkdXBsaWNhdGVkIGJ5dGVjb2Rl
IGJhc2ljIGJsb2NrcyBwb2ludCB0byB0aGUgc2FtZSAKKyAgICAgICAgLy8gaW50ZXJuYWwgZGF0
YSBzdHJ1Y3R1cmUsIHNvIGlmIGFueSBvZiB0aGVtIGV4ZWN1dGUsIGl0IHdpbGwgcmVjb3JkIHRo
ZSBzYW1lIHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIAorICAgICAgICAvLyBKYXZhU2NyaXB0
IHByb2dyYW0gYXMgZXhlY3V0aW5nLgorICAgICAgICAvLyBBdCB0aGUgYnl0ZWNvZGUgbGV2ZWws
IHRoaXMgc2l0dWF0aW9uIGxvb2tzIGxpa2U6CisgICAgICAgIC8vIGo6IG9wX3Byb2ZpbGVfY29u
dHJvbF9mbG93IChmcm9tIGotPmssIHdlIGhhdmUgYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2lj
QmxvY2tTdGFydE9mZnNldCkKKyAgICAgICAgLy8gLi4uCisgICAgICAgIC8vIGs6IG9wX3Byb2Zp
bGVfY29udHJvbF9mbG93ICh3ZSB3YW50IHRvIHNraXAgb3ZlciB0aGUgai0+ayBibG9jayBhbmQg
c3RhcnQgZnJlc2ggYXQgb2Zmc2V0IGsgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3IGJhc2ljIGJsb2Nr
IGstPm0pLgorICAgICAgICAvLyAuLi4KKyAgICAgICAgLy8gbTogb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cKKyAgICAgICAgaWYgKGJhc2ljQmxvY2tFbmRPZmZzZXQgPCBiYXNpY0Jsb2NrU3RhcnRP
ZmZzZXQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgKyAxIDwgb2Zmc2V0c0xlbmd0
aCk7IC8vIFdlIHNob3VsZCBuZXZlciBlbmNvdW50ZXIgZHVtbXkgYmxvY2tzIGF0IHRoZSBlbmQg
b2YgYSBDb2RlQmxvY2suCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51
LmJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtbXlC
YXNpY0Jsb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZs
b3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJTY3JpcHRFeGVjdXRhYmxl
KCktPnNvdXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNl
dCk7CisKKyAgICAgICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2VkIHdp
dGhpbiB0aGUgcmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZz
ZXRdCisgICAgICAgIC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zm
c2V0cyBhcyBnYXBzIGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KKyAgICAgICAg
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRleHQg
b2YgYSBKYXZhU2NyaXB0IHByb2dyYW0sIAorICAgICAgICAvLyBmdW5jdGlvbiBsaXRlcmFscyBm
b3JtIG5ldyBiYXNpYyBibG9ja3MgYm91bmRhcmllcywgYnV0IHRoZXkgYXJlbid0IHJlcHJlc2Vu
dGVkIAorICAgICAgICAvLyBpbnNpZGUgdGhlIENvZGVCbG9jaydzIGluc3RydWN0aW9uIHN0cmVh
bS4KKyAgICAgICAgYXV0byBpbnNlcnRGdW5jdGlvbkdhcHMgPSBbYmFzaWNCbG9ja0xvY2F0aW9u
LCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdIChjb25zdCBXcml0
ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZnVuY3Rpb25FeGVjdXRhYmxlKSB7CisgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxlKCk7CisgICAgICAgICAgICBpbnQg
ZnVuY3Rpb25TdGFydCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwor
ICAgICAgICAgICAgaW50IGZ1bmN0aW9uRW5kID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0Vu
ZE9mZnNldCgpOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uU3RhcnQgPj0gYmFzaWNCbG9ja1N0
YXJ0T2Zmc2V0ICYmIGZ1bmN0aW9uRW5kIDw9IGJhc2ljQmxvY2tFbmRPZmZzZXQpCisgICAgICAg
ICAgICAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5pbnNlcnRHYXAoZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25FbmQpOworICAgICAgICB9OworCisgICAgICAgIGZvciAoY29uc3QgV3JpdGVCYXJyaWVy
PEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUgOiBtX2Z1bmN0aW9uRGVjbHMpCisgICAg
ICAgICAgICBpbnNlcnRGdW5jdGlvbkdhcHMoZXhlY3V0YWJsZSk7CisgICAgICAgIGZvciAoY29u
c3QgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUgOiBtX2Z1bmN0
aW9uRXhwcnMpCisgICAgICAgICAgICBpbnNlcnRGdW5jdGlvbkdhcHMoZXhlY3V0YWJsZSk7CisK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5iYXNpY0Jsb2NrTG9jYXRpb24g
PSBiYXNpY0Jsb2NrTG9jYXRpb247CisgICAgfQorfQorCisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQg
Q29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVP
cmlnaW5NYXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUo
bWFwKTsKK30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCog
cGMpCit7CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsKKyAgICAgICAgaWYgKE9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMo
cGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCisgICAgZm9yIChC
YWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAq
aXRlcjsKKyAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQorICAgICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNvZGVPcmlnaW4pOworICAgIH0KKworICAg
IGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9qaXRDb2RlLT5maW5kUEMo
dGhpcywgcGMpKQorICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKworICAgIHJldHVybiBOdWxs
b3B0OworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK09wdGlvbmFsPHVuc2lnbmVkPiBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldDsKKyAg
ICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5qaXRUeXBlKCk7CisgICAgaWYgKGpp
dFR5cGUgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCBqaXRUeXBlID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgYnl0ZWNvZGVPZmZz
ZXQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKKyNlbHNlCisgICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGNhbGxTaXRlSW5kZXguYml0
cygpKTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9u
cygpLmJlZ2luKCk7CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6RlRMSklUKSB7CisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRl
eCkpOworICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRl
eCk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisjZWxz
ZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQor
CisgICAgcmV0dXJuIGJ5dGVjb2RlT2Zmc2V0OworfQorCitpbnQzMl90IENvZGVCbG9jazo6dGhy
ZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQoreworICAgIHN3aXRjaCAodW5saW5rZWRD
b2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgeworICAgIGNhc2UgTWl4ZWRUcmlTdGF0ZToKKyAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIEZhbHNlVHJpU3RhdGU6CisgICAgICAg
IHJldHVybiB0aHJlc2hvbGQgKiA0OworICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgorICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKwordm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVw
KCkKK3sKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9s
ZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3sKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JK
SVRTb29uKCkpLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygp
Cit7CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgZG91YmxlIG51bUFkZHMgPSAwLjA7
CisgICAgZG91YmxlIHRvdGFsQWRkU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtTXVscyA9IDAu
MDsKKyAgICBkb3VibGUgdG90YWxNdWxTaXplID0gMC4wOworICAgIGRvdWJsZSBudW1OZWdzID0g
MC4wOworICAgIGRvdWJsZSB0b3RhbE5lZ1NpemUgPSAwLjA7CisgICAgZG91YmxlIG51bVN1YnMg
PSAwLjA7CisgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKKworICAgIGF1dG8gY291bnRJ
Q3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgIGZvciAoSklUQWRkSUMq
IGFkZElDIDogY29kZUJsb2NrLT5tX2FkZElDcykgeworICAgICAgICAgICAgbnVtQWRkcysrOwor
ICAgICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBjb2RlQmxvY2stPm1fbXVsSUNzKSB7
CisgICAgICAgICAgICBudW1NdWxzKys7CisgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVs
SUMtPmNvZGVTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJ
QyA6IGNvZGVCbG9jay0+bV9uZWdJQ3MpIHsKKyAgICAgICAgICAgIG51bU5lZ3MrKzsKKyAgICAg
ICAgICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAoSklUU3ViSUMqIHN1YklDIDogY29kZUJsb2NrLT5tX3N1YklDcykgeworICAg
ICAgICAgICAgbnVtU3VicysrOworICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5j
b2RlU2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07Cisg
ICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsKKworICAgIGRhdGFMb2coIk51
bSBBZGRzOiAiLCBudW1BZGRzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBBZGQgc2l6ZSBp
biBieXRlczogIiwgdG90YWxBZGRTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIEFk
ZCBzaXplOiAiLCB0b3RhbEFkZFNpemUgLyBudW1BZGRzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJc
biIpOworICAgIGRhdGFMb2coIk51bSBNdWxzOiAiLCBudW1NdWxzLCAiXG4iKTsKKyAgICBkYXRh
TG9nKCJUb3RhbCBNdWwgc2l6ZSBpbiBieXRlczogIiwgdG90YWxNdWxTaXplLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJBdmVyYWdlIE11bCBzaXplOiAiLCB0b3RhbE11bFNpemUgLyBudW1NdWxzLCAi
XG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIk51bSBOZWdzOiAiLCBudW1O
ZWdzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBOZWcgc2l6ZSBpbiBieXRlczogIiwgdG90
YWxOZWdTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIE5lZyBzaXplOiAiLCB0b3Rh
bE5lZ1NpemUgLyBudW1OZWdzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFM
b2coIk51bSBTdWJzOiAiLCBudW1TdWJzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBTdWIg
c2l6ZSBpbiBieXRlczogIiwgdG90YWxTdWJTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVy
YWdlIFN1YiBzaXplOiAiLCB0b3RhbFN1YlNpemUgLyBudW1TdWJzLCAiXG4iKTsKKworICAgIGRh
dGFMb2coIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyNlbmRpZgorfQorCitCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMmIENvZGVCbG9jazo6bGl2ZW5lc3NBbmFseXNpc1Nsb3coKQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IGFuYWx5c2lzID0g
c3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+KHRoaXMpOworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgaWYg
KCFtX2xpdmVuZXNzQW5hbHlzaXMpCisgICAgICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMgPSBX
VEZNb3ZlKGFuYWx5c2lzKTsKKyAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Cisg
ICAgfQorfQorCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw0NjM4ICsyOCwxOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLQotI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgot
I2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJh
dG9yLmgiCi0jaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCi0jaW5jbHVkZSAi
Qnl0ZWNvZGVVc2VEZWYuaCIKLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1ZGUg
IkNvZGVCbG9ja1NldC5oIgotI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgotI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkRGR0RyaXZlci5oIgotI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCi0j
aW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgotI2luY2x1ZGUgIkdldFB1dEluZm8u
aCIKLSNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgotI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgotI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCi0jaW5jbHVk
ZSAiTExJbnREYXRhLmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCi0jaW5jbHVkZSAi
TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVk
ZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgi
Ci0jaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3Bh
Y2UuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKLSNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIlR5cGVQcm9m
aWxlci5oIgotI2luY2x1ZGUgIlVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKLSNpbmNsdWRl
ICJWTUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUV4ZWN1dGFibGUuaCIKLSNpbmNs
dWRlIDx3dGYvQmFnVG9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgot
I2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShGVExfSklUKQotI2lu
Y2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNlbmRpZgorI2luY2x1ZGUgIkV2YWxDb2RlQmxvY2suaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBDb2RlQmxvY2s6OnNfaW5mbyA9
IHsKLSAgICAiQ29kZUJsb2NrIiwgMCwgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKENvZGVC
bG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0g
ewotICAgICJGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRF
X01FVEhPRF9UQUJMRShGdW5jdGlvbkNvZGVCbG9jaykKLX07Ci0KLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi1jb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsK
LSAgICAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFU
RV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlDb2RlQmxvY2spCi19OwotI2VuZGlmCi0KLWNvbnN0
IENsYXNzSW5mbyBHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiR2xvYmFsQ29kZUJs
b2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbENv
ZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8g
PSB7Ci0gICAgIlByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFU
RV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUNvZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIk1vZHVsZVByb2dyYW1Db2Rl
QmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUoTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jaykKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBFdmFsQ29kZUJsb2NrOjpz
X2luZm8gPSB7CiAgICAgIkV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAogICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoRXZhbENvZGVCbG9jaykKIH07CiAKLXZvaWQgRnVuY3Rpb25Db2Rl
QmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxGdW5jdGlvbkNvZGVC
bG9jayo+KGNlbGwpLT5+RnVuY3Rpb25Db2RlQmxvY2soKTsKLX0KLQotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLXZvaWQgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQotewotICAgIGpzQ2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5+V2ViQXNzZW1i
bHlDb2RlQmxvY2soKTsKLX0KLSNlbmRpZgotCi12b2lkIFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCkt
Pn5Qcm9ncmFtQ29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqPihjZWxsKS0+fk1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKLX0KLQogdm9pZCBFdmFsQ29k
ZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBqc0Nhc3Q8RXZhbENvZGVCbG9j
ayo+KGNlbGwpLT5+RXZhbENvZGVCbG9jaygpOwogfQogCi1DU3RyaW5nIENvZGVCbG9jazo6aW5m
ZXJyZWROYW1lKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKLSAgICBjYXNl
IEdsb2JhbENvZGU6Ci0gICAgICAgIHJldHVybiAiPGdsb2JhbD4iOwotICAgIGNhc2UgRXZhbENv
ZGU6Ci0gICAgICAgIHJldHVybiAiPGV2YWw+IjsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAg
ICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgICAg
IHJldHVybiAiPG1vZHVsZT4iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpo
YXNIYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX2hhc2g7Ci19Ci0KLWJvb2wgQ29kZUJs
b2NrOjppc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWlzQ29tcGls
YXRpb25UaHJlYWQoKTsKLX0KLQotQ29kZUJsb2NrSGFzaCBDb2RlQmxvY2s6Omhhc2goKSBjb25z
dAotewotICAgIGlmICghbV9oYXNoKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzU2FmZVRv
Q29tcHV0ZUhhc2goKSk7Ci0gICAgICAgIG1faGFzaCA9IENvZGVCbG9ja0hhc2gob3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBtX2hhc2g7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlRm9y
VG9vbHMoKSBjb25zdAotewotICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKLSAg
ICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1VURjgoKTsK
LSAgICAKLSAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKTsKLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxp
bmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwotICAgIHVuc2lnbmVkIHVu
bGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKLSAgICB1bnNpZ25l
ZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7
Ci0gICAgaW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxpbmtlZFN0YXJ0T2Zmc2V0
OwotICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSArIHVubGlua2VkLT51bmxpbmtlZEZ1
bmN0aW9uTmFtZVN0YXJ0KCk7Ci0gICAgdW5zaWduZWQgcmFuZ2VFbmQgPSBkZWx0YSArIHVubGlu
a2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0aCgpOwotICAgIHJldHVy
biB0b0NTdHJpbmcoCi0gICAgICAgICJmdW5jdGlvbiAiLAotICAgICAgICBwcm92aWRlci0+c291
cmNlKCkuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFuZ2VTdGFydCkudXRmOCgp
KTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9uZUxpbmUoKSBjb25zdAot
ewotICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVGb3JUb29scygpKTsKLX0K
LQotQ1N0cmluZyBDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAotewot
ICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgpKQotICAgICAgICByZXR1
cm4gdG9DU3RyaW5nKGhhc2goKSk7Ci0gICAgcmV0dXJuICI8bm8taGFzaD4iOwotfQotCi12b2lk
IENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYgb3V0LCBKSVRDb2Rl
OjpKSVRUeXBlIGppdFR5cGUpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KGluZmVycmVkTmFtZSgp
LCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7Ci0gICAgb3V0LnByaW50KCI6WyIsIFJh
d1BvaW50ZXIodGhpcyksICItPiIpOwotICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCi0gICAgICAg
IG91dC5wcmludChSYXdQb2ludGVyKGFsdGVybmF0aXZlKCkpLCAiLT4iKTsKLSAgICBvdXQucHJp
bnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGppdFR5cGUsIGNvZGVUeXBl
KCkpOwotCi0gICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQotICAgICAgICBvdXQu
cHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOwotICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVj
dGlvbkNvdW50KCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCi0gICAgICAgIG91dC5wcmludCgiIChT
aG91bGRBbHdheXNCZUlubGluZWQpIik7Ci0gICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
LT5uZXZlcklubGluZSgpKQotICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7Ci0g
ICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGltaXplKCkpCi0gICAgICAg
IG91dC5wcmludCgiIChOZXZlck9wdGltaXplKSIpOwotICAgIGVsc2UgaWYgKG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5uZXZlckZUTE9wdGltaXplKCkpCi0gICAgICAgIG91dC5wcmludCgiIChO
ZXZlckZUTE9wdGltaXplKSIpOwotICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlk
VHJ5VG9FbnRlckluTG9vcCgpKQotICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9FbnRlcklu
TG9vcCkiKTsKLSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKLSAgICBpZiAobV9kaWRGYWls
SklUQ29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChKSVRGYWlsKSIpOwotICAgIGlm
ICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChGVExGYWlsKSIpOwotICAgIGlmICh0
aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMKQotICAgICAgICBvdXQucHJpbnQoIiAoSGFkRlRMUmVwbGFjZW1lbnQpIik7Ci0g
ICAgb3V0LnByaW50KCJdIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEFzc3VtaW5nSklUVHlwZShvdXQsIGppdFR5cGUoKSk7
Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQiLCBpZDAs
ICIpIik7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0
Ci17Ci0gICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQotICAgICAgICByZXR1cm4g
Y29uc3RhbnROYW1lKHIpOwotCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0ZXIo
cikpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6Y29uc3RhbnROYW1lKGludCBpbmRleCkgY29u
c3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnQoaW5kZXgpOwotICAgIHJldHVy
biB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsKLX0K
LQotc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHApCi17
Ci0gICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAgfTsKLSAgICBpbnQgaW5k
ZXggPSAxOwotICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQotICAgICAgICBwb3N0Zml4W2luZGV4
KytdID0gJ2cnOwotICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkKLSAgICAgICAgcG9zdGZp
eFtpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAocmVnRXhwLT5tdWx0aWxpbmUoKSkKLSAgICAgICAg
cG9zdGZpeFtpbmRleF0gPSAnbSc7Ci0gICAgaWYgKHJlZ0V4cC0+c3RpY2t5KCkpCi0gICAgICAg
IHBvc3RmaXhbaW5kZXgrK10gPSAneSc7Ci0gICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKQotICAg
ICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOwotCi0gICAgcmV0dXJuIHRvQ1N0cmluZygiLyIs
IHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5n
IHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKLXsKLSAgICByZXR1cm4gdG9DU3Ry
aW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUsICIpIik7Ci19Ci0K
LU5FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb29rTmFtZShpbnQgZGVidWdI
b29rVHlwZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERlYnVnSG9va1R5cGU+KGRlYnVn
SG9va1R5cGUpKSB7Ci0gICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6Ci0gICAgICAgICAg
ICByZXR1cm4gImRpZEVudGVyQ2FsbEZyYW1lIjsKLSAgICAgICAgY2FzZSBXaWxsTGVhdmVDYWxs
RnJhbWU6Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxMZWF2ZUNhbGxGcmFtZSI7Ci0gICAgICAg
IGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxFeGVj
dXRlU3RhdGVtZW50IjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4cHJlc3Npb246Ci0gICAg
ICAgICAgICByZXR1cm4gIndpbGxFeGVjdXRlRXhwcmVzc2lvbiI7Ci0gICAgICAgIGNhc2UgV2ls
bEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgcmV0dXJuICJ3aWxsRXhlY3V0ZVByb2dyYW0i
OwotICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgcmV0dXJuICJk
aWRFeGVjdXRlUHJvZ3JhbSI7Ci0gICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3BvaW50OgotICAg
ICAgICAgICAgcmV0dXJuICJkaWRSZWFjaEJyZWFrcG9pbnQiOwotICAgIH0KLQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCi12b2lkIENvZGVC
bG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKLXsKLSAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLQotICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
b3ApOwotICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludEJpbmFy
eU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKLXsKLSAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQg
cjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjIpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENvbmRpdGlvbmFsSnVtcChQ
cmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiBpdCwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKLXsKLSAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotfQotCi12b2lkIENvZGVCbG9jazo6
cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCi17Ci0gICAgY29uc3QgY2hhciogb3A7Ci0g
ICAgc3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUp
KSB7Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9pZCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6Ci0gICAgICAg
IG9wID0gImdldF9ieV9pZF9wcm90b19sb2FkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9pZF91bnNldCI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAgb3AgPSAi
YXJyYXlfbGVuZ3RoIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNf
VU5SRUFDSEFCTEVfQ09ERSkKLSAgICAgICAgb3AgPSAwOwotI2VuZGlmCi0gICAgfQotICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBp
ZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAgaXQgKz0gNDsgLy8gSW5j
cmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KLX0KLQotc3RhdGljIHZvaWQgZHVtcFN0
cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1lLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0gICAgaWYgKCFzdHJ1Y3R1cmUp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBvdXQucHJpbnRmKCIlcyA9ICVwIiwgbmFtZSwg
c3RydWN0dXJlKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseShpZGVudC5pbXBsKCkpOwotICAgIGlmIChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkKLSAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAlZCkiLCBvZmZzZXQpOwot
fQotCi1zdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91dCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBvdXQucHJpbnRmKCJj
aGFpbiA9ICVwOiBbIiwgY2hhaW4pOwotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGZvciAo
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+aGVhZCgp
OwotICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7Ci0gICAgICAgICArK2N1cnJlbnRTdHJ1Y3R1
cmUpIHsKLSAgICAgICAgaWYgKGZpcnN0KQotICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgZHVtcFN0
cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBjdXJyZW50U3RydWN0dXJlLT5nZXQoKSwgaWRlbnQpOwot
ICAgIH0KLSAgICBvdXQucHJpbnRmKCJdIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludEdl
dEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBs
b2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKLXsKLSAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRpb247Ci0KLSAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOyAvLyB0ZWxsIHRoZSBjb21waWxlciB0
byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29uZmlndXJhdGlvbnMuCi0gICAgCi0gICAg
aWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3RydWN0aW9uWzBdLnUub3Bj
b2RlKSA9PSBvcF9nZXRfYXJyYXlfbGVuZ3RoKQotICAgICAgICBvdXQucHJpbnRmKCIgbGxpbnQo
YXJyYXlfbGVuZ3RoKSIpOwotICAgIGVsc2UgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0g
aW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0g
ICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKLSAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQs
ICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgb3V0LnByaW50ZigiKSIpOwot
ICAgICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUpID09IG9wX2dldF9ieV9pZF9wcm90b19sb2FkKQotICAgICAgICAgICAgb3V0
LnByaW50ZigiIHByb3RvKCVwKSIsIGluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQdHIgPSBt
YXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSAqc3R1YlB0cjsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0QnlHQykK
LSAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKLSAgICAgICAgCi0gICAg
ICAgIG91dC5wcmludGYoIiBqaXQoIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgU3RydWN0dXJl
KiBiYXNlU3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0
dWIgPSBudWxscHRyOwotICAgICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc3R1YkluZm8uY2Fj
aGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKLSAgICAgICAg
ICAgIG91dC5wcmludGYoInNlbGYiKTsKLSAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHVi
SW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCJzdHViIik7Ci0gICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5zdHViOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICAgICAgICAg
IG91dC5wcmludGYoInVuc2V0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
YWNoZVR5cGU6OkFycmF5TGVuZ3RoOgotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJyYXlMZW5n
dGgiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUpIHsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0
cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChz
dHViKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsKLQotICAgICAgICBvdXQu
cHJpbnRmKCIpIik7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWFwKTsKLSNlbmRp
ZgotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJl
YW0mIG91dCwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQotewotICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBsb2NhdGlv
bjsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7IC8vIHRlbGwg
dGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25maWd1cmF0aW9u
cy4KLQotICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbls4XS51LnB1dEJ5SWRGbGFncyk7
Ci0gICAgCi0gICAgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25bNF0u
dS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0tPmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIG91dC5wcmlu
dCgiIGxsaW50KCIpOwotICAgICAgICBpZiAoU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBp
bnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1
cmVJRCk7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHJ1Y3R1cmUs
IGlkZW50KTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUob3V0LCAibmV4dCIsIG5ld1N0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAg
aWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hh
aW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAgICAgICAg
ICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0cnVj
dHVyZSwgaWRlbnQpOwotICAgICAgICBvdXQucHJpbnQoIikiKTsKLSAgICB9Ci0KLSNpZiBFTkFC
TEUoSklUKQotICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0ciA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihsb2NhdGlvbikpKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
byA9ICpzdHViUHRyOwotICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRCeUdDKQotICAgICAgICAg
ICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdDKSIpOwotICAgICAgICAKLSAgICAgICAgb3V0LnBy
aW50ZigiIGppdCgiKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAgICAgICAg
ICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgaWRlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpzdHViSW5mby51LnN0dWIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgotICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmlu
dGYoIikiKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3Rh
dGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hh
ciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2Zp
bGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCi17Ci0gICAgaW50IGRzdCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50
IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShkc3QpLCAiLCAiLCBy
ZWdpc3Rlck5hbWUoZnVuYyksICIsICIsIGFyZ0NvdW50LCAiLCAiLCByZWdpc3Rlck9mZnNldCk7
Ci0gICAgb3V0LnByaW50KCIgKHRoaXMgYXQgIiwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MCwgLXJlZ2lzdGVyT2Zmc2V0KSwgIikiKTsKLSAgICBpZiAoY2FjaGVEdW1wTW9kZSA9PSBEdW1w
Q2FjaGVzKSB7Ci0gICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBpdFsx
XS51LmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUpIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAgICAgIiBsbGludCgl
cCwgZXhlYyAlcCkiLAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS0+
ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGlmIChD
YWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgewotICAg
ICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNlZW5DYWxsZWUoKTsKLSAg
ICAgICAgICAgIGlmICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIGppdCgl
cCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpGVExKSVQpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3Io
dGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
bWFwKTsKLSNlbmRpZgotICAgIH0KLSAgICArK2l0OwotICAgICsraXQ7Ci0gICAgZHVtcEFycmF5
UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIGR1bXBWYWx1ZVBy
b2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLX0KLQotdm9pZCBDb2RlQmxv
Y2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKLXsKLSAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVy
KGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgIGl0ICs9IDU7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkKLXsKLSAgICBkdW1wU291cmNlKFdURjo6
ZGF0YUZpbGUoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKFByaW50U3RyZWFt
JiBvdXQpCi17Ci0gICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJsZSgp
KSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gcmVp
bnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAg
U3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVy
KCktPmdldFJhbmdlKAotICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJz
U3RhcnRPZmZzZXQoKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ0VuZE9mZnNldCgpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5nIGVuZCBvZmZzZXQgaXMgdGhl
IGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KLSAgICAgICAgCi0gICAgICAgIG91dC5wcmludCgi
ZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCksIHNvdXJjZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgb3V0LnByaW50KGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZpZXcoKSk7Ci19Ci0KLXZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoKQotewotICAgIGR1bXBCeXRlY29kZShXVEY6OmRh
dGFGaWxlKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFt
JiBvdXQpCi17Ci0gICAgLy8gV2Ugb25seSB1c2UgdGhlIEV4ZWNTdGF0ZSogZm9yIHRoaW5ncyB0
aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhlY3V0aW9uLAotICAgIC8vIGxpa2UgY29u
dmVydGluZyBhIEpTU3RyaW5nIHRvIGEgU3RyaW5nLiBIZW5jZSB0aGUgZ2xvYmFsRXhlYyBpcyBh
cHByb3ByaWF0ZS4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwotICAgIAotICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBpICs9IG9wY29kZUxl
bmd0aHNbZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zKClbaV0u
dS5vcGNvZGUpXSkKLSAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50OwotCi0gICAgb3V0LnByaW50
KCp0aGlzKTsKLSAgICBvdXQucHJpbnRmKAotICAgICAgICAiOiAlbHUgbV9pbnN0cnVjdGlvbnM7
ICVsdSBieXRlczsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIocyk7ICVkIHZh
cmlhYmxlKHMpIiwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCi0gICAgICAgIG1fbnVtUGFy
YW1ldGVycywgbV9udW1DYWxsZWVMb2NhbHMsIG1fbnVtVmFycyk7Ci0gICAgb3V0LnByaW50KCI7
IHNjb3BlIGF0ICIsIHNjb3BlUmVnaXN0ZXIoKSk7Ci0gICAgb3V0LnByaW50ZigiXG4iKTsKLSAg
ICAKLSAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7Ci0gICAgQ2FsbExpbmtJbmZvTWFwIGNhbGxM
aW5rSW5mb3M7Ci0gICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKLSAgICBnZXRDYWxsTGlu
a0luZm9NYXAoY2FsbExpbmtJbmZvcyk7Ci0gICAgCi0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogZW5k
ID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChjb25zdCBJbnN0cnVjdGlvbiogaXQg
PSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkdW1wQnl0ZWNvZGUob3V0LCBleGVj
LCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Ci0gICAgCi0gICAgaWYgKG51
bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJcbklkZW50aWZpZXJz
OlxuIik7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAg
b3V0LnByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgaWRl
bnRpZmllcihpKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICsraTsKLSAg
ICAgICAgfSB3aGlsZSAoaSAhPSBudW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAgIH0KLQotICAg
IGlmICghbV9jb25zdGFudFJlZ2lzdGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50
ZigiXG5Db25zdGFudHM6XG4iKTsKLSAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAgICBkbyB7
Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlw
dGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgotICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGRvdWJsZSI7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdl
cjoKLSAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9
ICI6IGluIHNvdXJjZSBhcyBpbnRlZ2VyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjoKLSAgICAgICAgICAg
ICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9ICIiOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50ZigiICAg
ayV1ID0gJXMlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0b0NTdHJpbmcobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpLCBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25E
ZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgaWYgKHNpemVfdCBjb3VudCA9
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgewotICAgICAgICBvdXQucHJpbnRm
KCJcbm1fcmVnZXhwczpcbiIpOwotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaSkp
LmRhdGEoKSk7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBjb3VudCk7
Ci0gICAgfQotCi0gICAgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKG91dCk7Ci0gICAgCi0gICAgaWYg
KG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgb3V0LnByaW50ZigiU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7Ci0gICAgICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIg
ICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgaW50IGVudHJ5ID0gMDsKLSAgICAgICAgICAg
IFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZl
Y3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmFyZURhdGEtPm1fc3dpdGNo
SnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIs
ICsrZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoISppdGVyKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0JTRkID0+ICUw
NGRcbiIsIGVudHJ5ICsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLm1pbiwgKml0
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAgfVxuIik7
Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmFyZURhdGEg
JiYgIW1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgb3V0LnByaW50ZigiXG5TdHJpbmcgU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7Ci0gICAg
ICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCIgICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdP
ZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwotICAgICAgICAgICAgZm9yIChTdHJp
bmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiXHRcdFwi
JXNcIiA9PiAlMDRkXG4iLCBpdGVyLT5rZXktPnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZhbHVlLmJy
YW5jaE9mZnNldCk7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsKLSAgICAg
ICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5zaXplKCkpOwotICAgIH0KLQotICAgIG91dC5wcmludGYoIlxuIik7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJlYW0mIG91
dCkKLXsKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiXG5FeGNlcHRpb24gSGFuZGxl
cnM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
c1tpXTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlx0ICVkOiB7IHN0YXJ0OiBbJTRkXSBlbmQ6
IFslNGRdIHRhcmdldDogWyU0ZF0gfSAlc1xuIiwKLSAgICAgICAgICAgICAgICBpICsgMSwgaGFu
ZGxlci5zdGFydCwgaGFuZGxlci5lbmQsIGhhbmRsZXIudGFyZ2V0LCBoYW5kbGVyLnR5cGVOYW1l
KCkpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOwotICAgIH0KLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBib29sJiBoYXNQcmludGVkUHJv
ZmlsaW5nKQotewotICAgIGlmIChoYXNQcmludGVkUHJvZmlsaW5nKSB7Ci0gICAgICAgIG91dC5w
cmludCgiOyAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBvdXQucHJpbnQo
IiAgICAiKTsKLSAgICBoYXNQcmludGVkUHJvZmlsaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVj
dGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQotewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgKytpdDsKLSAgICBDU3RyaW5nIGRl
c2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIpOwotICAg
IGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBiZWdpbkR1
bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICBvdXQucHJpbnQoZGVz
Y3JpcHRpb24pOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5nKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9m
aWxpbmcpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAK
LSAgICArK2l0OwotICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQotICAgICAgICByZXR1cm47
Ci0gICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJvZmlsZS0+YnJpZWZEZXNj
cmlwdGlvbihsb2NrZXIsIHRoaXMpOwotICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKLSAgICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOwotfQotCi12b2lkIENvZGVCbG9j
azo6ZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1l
LCBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17
Ci0gICAgaWYgKCFwcm9maWxlIHx8ICFwcm9maWxlLT5tX2NvdW50ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwot
ICAgIG91dC5wcmludChuYW1lLCBwcm9maWxlLT5tX2NvdW50ZXIpOwotfQotCi12b2lkIENvZGVC
bG9jazo6ZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBBcml0aFByb2ZpbGUqIHBy
b2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAgaWYgKCFwcm9maWxlKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7Ci0gICAgb3V0LnByaW50KCJyZXN1bHRzOiAiLCAqcHJvZmlsZSk7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3AoUHJpbnRTdHJlYW0mIG91dCwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFy
KiBvcCkKLXsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAlLTE3cyAiLCBsb2NhdGlvbiwgb3ApOwot
fQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKFBy
aW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0
cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpCi17Ci0gICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50
ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0YSgpKTsKLX0KLQotdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZSgKLSAgICBQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwKLSAgICBj
b25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxM
aW5rSW5mb3MpCi17Ci0gICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdpbjsKLSAgICBib29sIGhh
c1ByaW50ZWRQcm9maWxpbmcgPSBmYWxzZTsKLSAgICBPcGNvZGVJRCBvcGNvZGUgPSBleGVjLT5p
bnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOwotICAgIHN3aXRjaCAob3Bj
b2RlKSB7Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29wZTogewotICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
T3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfc2NvcGUi
LCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Ny
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyIpOwotICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMiKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hcmd1bWVudF9jb3VudDog
ewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBw
cmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJhcmd1bWVudF9jb3VudCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgrK2l0KS0+dS51bnNpZ25lZFZh
bHVlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiY3JlYXRlX3Jlc3QiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNldCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9yZXN0
X2xlbmd0aDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRf
cmVzdF9sZW5ndGgiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgr
K2l0KS0+dS51bnNpZ25lZFZhbHVlOwotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1lbnRz
T2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRGdW5jdGlvbiA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiY3JlYXRlX3RoaXMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXUsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBjYWNoZWRGdW5jdGlvbik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX3RoaXM6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fdGhp
cyIsIHIwKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gKCsraXQpLT51LnN0
cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIsIGNhY2hlKHN0cnVjdCA9ICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSwg
IikiKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAoKytpdCktPnUudG9UaGlzU3RhdHVz
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2hlY2tf
dGR6OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm9wX2NoZWNrX3RkeiIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewotICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFj
aXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfb2JqZWN0Iik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTa2lwIG9iamVjdCBhbGxvY2F0aW9uIHBy
b2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
d19hcnJheTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBh
cmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXkiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShhcmd2KS5kYXRhKCksIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJheSBh
bGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm5ld19hcnJheV93aXRoX3NpemUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCkuZGF0
YSgpKTsKLSAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlvbiBwcm9maWxl
LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfYXJy
YXlfYnVmZmVyOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV9idWZmZXIiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIGFy
Z3YsIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJheSBhbGxvY2F0aW9uIHBy
b2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
d19yZWdleHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X3JlZ2V4cCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZlJlZ0V4cHMoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2V4cE5hbWUo
cmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21vdjogewotICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm1vdiIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7Ci0gICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgICsraXQ7Ci0gICAg
ICAgICAgICArK2l0OwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgICsraXQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9w
cm9maWxlX3R5cGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogewotICAgICAgICAgICAgQmFzaWNCbG9ja0xvY2F0
aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSAoKytpdCktPnUuYmFzaWNCbG9ja0xvY2F0aW9uOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
cHJvZmlsZV9jb250cm9sX2Zsb3ciKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslZCwgJWRd
IiwgYmFzaWNCbG9ja0xvY2F0aW9uLT5zdGFydE9mZnNldCgpLCBiYXNpY0Jsb2NrTG9jYXRpb24t
PmVuZE9mZnNldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3Bfbm90OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJub3QiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJlcV9udWxsIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm5lcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAibmVxX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIHByaW50Qmlu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzdHJpY3RlcSIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uc3RyaWN0ZXE6IHsKLSAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuc3RyaWN0ZXEiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbGVzczogewot
ICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxlc3Mi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbGVzc2Vx
OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
bGVzc2VxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2dyZWF0ZXI6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJncmVhdGVyIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2dyZWF0ZXJlcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXJlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbmM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVy
YW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5jIiwgcjApOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWM6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVjIiwgcjApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19udW1iZXI6IHsKLSAg
ICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX251bWJl
ciIpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQ
cm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF90b19zdHJpbmc6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInRvX3N0cmluZyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm5lZ2F0ZSIpOwotICAgICAgICAgICAgKytpdDsgLy8gb3BfbmVn
YXRlIGhhcyBhbiBleHRyYSBvcGVyYW5kIGZvciB0aGUgQXJpdGhQcm9maWxlLgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAg
IHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJhZGQiKTsKLSAgICAgICAg
ICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X211bDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm11bCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGl2Iik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJtb2QiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG93OiB7Ci0gICAgICAg
ICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicG93Iik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAg
ICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN1YiIpOwotICAg
ICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAibHNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJzaGlmdCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7Ci0gICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidXJzaGlmdCIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKLSAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRhbmQiKTsK
LSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImJpdHhvciIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAgICAgICAg
IHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRvciIpOwotICAgICAg
ICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5k
YXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9p
bnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0YW5jZW9mIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOiB7Ci0gICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluc3RhbmNlb2ZfY3Vz
dG9tIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIy
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdW5zaWduZWQ6IHsKLSAgICAgICAgICAgIHByaW50
VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVuc2lnbmVkIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3R5cGVvZjogewotICAgICAgICAg
ICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidHlwZW9mIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2VtcHR5OiB7Ci0g
ICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19lbXB0
eSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc191
bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImlzX3VuZGVmaW5lZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19ib29sZWFuIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewotICAgICAgICAgICAgcHJp
bnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfbnVtYmVyIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHR5cGUgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImlzX2NlbGxfd2l0aF90eXBlIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfaXNfb2JqZWN0OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6IHsKLSAgICAgICAgICAgIHBy
aW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVjdF9vcl9udWxsIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2Z1bmN0
aW9uOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJpc19mdW5jdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9pbjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImluIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3RyeV9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0cnlfZ2V0X2J5X2lkIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRl
ZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKLSAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5
X2xlbmd0aDogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQpOwotICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBleGVjLCBs
b2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQs
IGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczogewotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkX3dpdGhf
dGhpcyIpOwotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0
YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAgICAgICAgICBk
dW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90
aGlzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImdldF9ieV92YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5
X2lkOiB7Ci0gICAgICAgICAgICBwcmludFB1dEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInB1dF9ieV9pZCIpOwotICAgICAgICAgICAgcHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMob3V0
LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczogewotICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkX3dpdGhfdGhpcyIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIo
aWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV92
YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dl
dHRlcl9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRh
KCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9zZXR0ZXJfYnlfaWQi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dldHRlcl9i
eV92YWwiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJO
YW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0dGVyX2J5X3ZhbCIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3By
b3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImRlZmluZV9kYXRhX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVmaW5lX2Fj
Y2Vzc29yX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByNCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfaWQiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbCIpOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcEFy
cmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAg
ZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0
LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlf
dmFsX2RpcmVjdCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhh
c1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfdmFsIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJwdXRfYnlfaW5kZXgiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAldSwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
am1wOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbXAi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkKC0+JWQpIiwgb2Zmc2V0LCBsb2NhdGlvbiAr
IG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2p0cnVlOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMsIGJl
Z2luLCBpdCwgbG9jYXRpb24sICJqdHJ1ZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKLSAgICAgICAgICAgIHByaW50Q29uZGl0aW9u
YWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpmYWxzZSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDogewotICAg
ICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0
aW9uLCAiamVxX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfam5lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChv
dXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqbmVxX251bGwiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgU3BlY2lhbDo6UG9p
bnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOwotICAgICAgICAgICAgaW50
IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5lcV9wdHIiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCBwb2ludGVyLCBtX2dsb2JhbE9iamVjdC0+YWN0dWFsUG9pbnRlckZvcihwb2ludGVyKSwgb2Zm
c2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbGVzczogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImpsZXNzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxv
Y2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfamxlc3NlcTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpsZXNzZXEiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImpncmVhdGVyIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogewotICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpncmVh
dGVyZXEiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9j
YXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3MiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImpubGVzc2VxIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVk
KC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5ncmVhdGVy
Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9u
ICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXJlcSIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaGludDog
ewotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibG9vcF9oaW50Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3dhdGNoZG9nOiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJ3YXRjaGRvZyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJs
b2dfc2hhZG93X2NoaWNrZW5fdGFpbCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTog
ewotICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRjaF9pbW0i
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwgJXMiLCB0YWJsZUluZGV4
LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFtZShz
Y3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIGludCB0YWJsZUlu
ZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfY2hhciIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9u
ICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hf
c3RyaW5nOiB7Ci0gICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic3dp
dGNoX3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+JWQpLCAlcyIs
IHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdldCwgcmVn
aXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Z1
bmMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9uZXdfYXN5bmNfZnVuYzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1bmMiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Z1bmNfZXhw
Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwOiB7
Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hc3luY19mdW5jX2V4
cCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6IHsKLSAg
ICAgICAgICAgIGludCBmdW5jUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgbmFtZVJlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic2V0X2Z1bmN0aW9uX25hbWUiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShmdW5jUmVnKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShuYW1lUmVnKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmludENhbGxP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQcmludGVk
UHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRhaWxfY2FsbCIsIER1bXBDYWNoZXMsIGhhc1ByaW50
ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMsIGhh
c1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OgotICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6
IHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCB0aGlz
VmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBhcmd1bWVudHMgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHZhckFyZ09mZnNldCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9w
TmFtZTsKLSAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2FsbF92YXJhcmdzKQotICAgICAg
ICAgICAgICAgIG9wTmFtZSA9ICJjYWxsX3ZhcmFyZ3MiOwotICAgICAgICAgICAgZWxzZSBpZiAo
b3Bjb2RlID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICAgICAgICAgIG9wTmFtZSA9
ICJjb25zdHJ1Y3RfdmFyYXJncyI7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxfY2FsbF92
YXJhcmdzIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cyI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcE5hbWUpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcywgJXMsICVkLCAlZCIsIHJlZ2lzdGVyTmFtZShyZXN1bHQpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVlKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIsIHZh
ckFyZ09mZnNldCk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2Ugb3BfcmV0OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgInJldCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBwcmludENhbGxP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMsIGhhc1By
aW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgY291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN0cmNhdCIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY291bnQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJ0b19wcmltaXRpdmUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOwotICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpIC0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBwcm9wZXJ0
eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2luZGV4ZWRfcHJvcGVydHki
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJv
cGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7Ci0gICAgICAgICAgICBpdCArPSBPUENP
REVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6IHsK
LSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
YmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBp
dFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7Ci0gICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10u
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KSAtIDE7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9kaXJl
Y3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBwcm9w
ZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBpdFs0
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzVdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0WzZdLnUucHJvZmlsZTsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX2dldF9kaXJlY3RfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShi
YXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHByb2Zp
bGUpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZGlyZWN0X3BuYW1l
KSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMi
LCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOwot
ICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cikgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMi
LCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09E
RV9MRU5HVEgob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpIC0gMTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5k
ZXggPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9w
X3RvX2luZGV4X3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0cmluZykgLSAxOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2Nv
cGU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBuZXdTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGN1
cnJlbnRTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUobmV3U2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGN1cnJlbnRTY29w
ZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X3BhcmVudF9zY29wZTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHBhcmVudFNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJnZXRfcGFyZW50X3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwYXJlbnRTY29wZSkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQ6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHN5bWJvbFRhYmxlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgaW5pdGlhbFZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCAK
LSAgICAgICAgICAgICAgICByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShz
Y29wZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3ltYm9sVGFibGUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGluaXRpYWxWYWx1ZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXRj
aCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJP
cGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3ciLCByMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjog
ewotICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBF
cnJvclR5cGUgazEgPSBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KCgrK2l0KS0+dS51bnNpZ25lZFZh
bHVlKTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInRocm93X3N0YXRpY19lcnJvciIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICIsIGNvbnN0YW50TmFtZShrMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG91dC5wcmludChrMSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlYnVnOiB7
Ci0gICAgICAgICAgICBpbnQgZGVidWdIb29rVHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IGhhc0JyZWFrcG9pbnRGbGFnID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWJ1
ZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgZGVidWdIb29rTmFtZShkZWJ1
Z0hvb2tUeXBlKSwgaGFzQnJlYWtwb2ludEZsYWcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9hc3NlcnQ6IHsKLSAgICAgICAgICAgIGludCBjb25kaXRp
b24gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsaW5lID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJhc3NlcnQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCIsIHJl
Z2lzdGVyTmFtZShjb25kaXRpb24pLmRhdGEoKSwgbGluZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VuZDogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rl
ck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbmQiLCByMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNj
b3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0YXRpY19j
YXN0PFJlc29sdmVUeXBlPigoKytpdCktPnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpbnQgZGVw
dGggPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHZvaWQqIHBvaW50ZXIgPSAoKytp
dCktPnUucG9pbnRlcjsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgInJlc29sdmVfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXMsIDwlcz4sICVkLCAlcCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRh
KCksIHJlc29sdmVUeXBlTmFtZShyZXNvbHZlVHlwZSksIGRlcHRoLCBwb2ludGVyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJ
bmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKLSAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVyZQot
ICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFuZAot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Z2V0X2Zyb21fc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludChyZWdpc3Rlck5hbWUocjAp
LCAiLCAiLCByZWdpc3Rlck5hbWUocjEpKTsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
YW5vbnltb3VzIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkpOwotICAgICAgICAgICAgb3V0LnBy
aW50KCIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29sdmVNb2RlTmFtZShnZXRQ
dXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFtZShnZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUoZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSksICI+LCAiLCBvcGVyYW5kKTsKLSAgICAgICAgICAgIGR1bXBWYWx1
ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7Ci0gICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbygoKytpdCkt
PnUub3BlcmFuZCk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1cmUKLSAgICAgICAgICAg
IGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJhbmQKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF90b19zY29w
ZSIpOwotICAgICAgICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShyMCkpOwotICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKSk7
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgcmVnaXN0ZXJOYW1lKHIxKSwgIiwgIiwgZ2V0
UHV0SW5mby5vcGVyYW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8ucmVzb2x2
ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSks
ICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSwgIj4sIDxzdHJ1Y3R1cmU+LCAiLCBvcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7Ci0gICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZ2V0X2Zyb21fYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBvZmZzZXQpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1By
aW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX2FyZ3VtZW50
cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlcyIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCBvZmZzZXQsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGR1bXBSYXJlQ2FzZVByb2ZpbGUo
b3V0LCAicmFyZSBjYXNlOiAiLCByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChsb2Nh
dGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIHsKLSAgICAgICAgZHVtcEFyaXRoUHJv
ZmlsZShvdXQsIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIFZl
Y3RvcjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGV4aXRQcm9maWxlKCkuZXhp
dFNpdGVzRm9yKGxvY2F0aW9uKTsKLSAgICBpZiAoIWV4aXRTaXRlcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgb3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwotICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0U2l0ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlc1tpXS5r
aW5kKCksICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7Ci0gICAgfQotI2Vsc2UgLy8gRU5B
QkxFKERGR19KSVQpCi0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLSAgICBvdXQucHJpbnQoIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoCi0gICAgUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsCi0gICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJbmZv
TWFwJiBjYWxsTGlua0luZm9zKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGl0ID0gaW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgIGR1bXBCeXRlY29kZShvdXQsIGV4
ZWMsIGluc3RydWN0aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5mb3Mp
OwotfQotCi0jZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFjcm8pIFwKLSAgICBtYWNy
byhpbnN0cnVjdGlvbnMpIFwKLSAgICBtYWNybyhjYWxsTGlua0luZm9zKSBcCi0gICAgbWFjcm8o
bGlua2VkQ2FsbGVyTGlzdCkgXAotICAgIG1hY3JvKGlkZW50aWZpZXJzKSBcCi0gICAgbWFjcm8o
ZnVuY3Rpb25FeHByZXNzaW9ucykgXAotICAgIG1hY3JvKGNvbnN0YW50UmVnaXN0ZXJzKQotCi0j
ZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKG1hY3JvKSBcCi0gICAgbWFj
cm8ocmVnZXhwcykgXAotICAgIG1hY3JvKGZ1bmN0aW9ucykgXAotICAgIG1hY3JvKGV4Y2VwdGlv
bkhhbmRsZXJzKSBcCi0gICAgbWFjcm8oc3dpdGNoSnVtcFRhYmxlcykgXAotICAgIG1hY3JvKHN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKLSAgICBtYWNybyhldmFsQ29kZUNhY2hlKSBcCi0gICAg
bWFjcm8oZXhwcmVzc2lvbkluZm8pIFwKLSAgICBtYWNybyhsaW5lSW5mbykgXAotICAgIG1hY3Jv
KGNhbGxSZXR1cm5JbmRleFZlY3RvcikKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBz
aXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCi17Ci0gICAgcmV0dXJu
IHZlY3Rvci5jYXBhY2l0eSgpICogc2l6ZW9mKFQpOwotfQotCi1uYW1lc3BhY2UgewotCi1jbGFz
cyBQdXRUb1Njb3BlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1YmxpYzoKLSAg
ICBQdXRUb1Njb3BlRmlyZURldGFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICAgICAs
IG1faWRlbnQoaWRlbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgiTGlu
a2luZyBwdXRfdG9fc2NvcGUgaW4gIiwgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSksICIgZm9y
ICIsIG1faWRlbnQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50OwotfTsKLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKLSAgICA6
IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KG90aGVyLm1fZ2xv
YmFsT2JqZWN0KQotICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVMb2Nh
bHMpCi0gICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQotICAgICwgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSklUKQotICAgICwgbV9jYXBhYmlsaXR5TGV2
ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKLSNlbmRpZgotICAgICwgbV9kaWRG
YWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihm
YWxzZSkKLSAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1faXND
b25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBtX2lzU3RyaWN0TW9kZShv
dGhlci5tX2lzU3RyaWN0TW9kZSkKLSAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlwZSkK
LSAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhlci5tX3VubGlua2Vk
Q29kZS5nZXQoKSkKLSAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCi0gICAgLCBt
X3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKLSAgICAsIG1fbnVtQnJlYWtwb2lu
dHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhlci5t
X293bmVyRXhlY3V0YWJsZS5nZXQoKSkKLSAgICAsIG1fdm0ob3RoZXIubV92bSkKLSAgICAsIG1f
aW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQotICAgICwgbV90aGlzUmVnaXN0ZXIo
b3RoZXIubV90aGlzUmVnaXN0ZXIpCi0gICAgLCBtX3Njb3BlUmVnaXN0ZXIob3RoZXIubV9zY29w
ZVJlZ2lzdGVyKQotICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKLSAgICAsIG1fc291cmNlKG90
aGVyLm1fc291cmNlKQotICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIubV9zb3VyY2VPZmZzZXQp
Ci0gICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKLSAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lzdGVy
cykKLSAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQotICAgICwgbV9mdW5jdGlvbkRlY2xzKG90
aGVyLm1fZnVuY3Rpb25EZWNscykKLSAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0
aW9uRXhwcnMpCi0gICAgLCBtX29zckV4aXRDb3VudGVyKDApCi0gICAgLCBtX29wdGltaXphdGlv
bkRlbGF5Q291bnRlcigwKQotICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQot
ICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkpCi17
Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOwotCi0gICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsKLSAg
ICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7Ci0KLSAgICBzZXROdW1QYXJhbWV0
ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKLXsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0KLSAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKLQotICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7
Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgCi0gICAgICAg
IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycyA9
IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOwotICAgICAgICBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IG90aGVy
Lm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICB9Ci0gICAgCi0gICAg
aGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLQotQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgSlNT
Y29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAg
ICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KHNjb3BlLT5n
bG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCgpKQotICAgICwg
bV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzKQot
ICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCi0gICAgLCBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotI2lmIEVOQUJMRShKSVQpCi0gICAgLCBtX2NhcGFi
aWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQotI2VuZGlmCi0gICAg
LCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1fZGlkRmFpbEZUTENvbXBp
bGF0aW9uKGZhbHNlKQotICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAg
ICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCi0g
ICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCi0g
ICAgLCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKQotICAgICwgbV91
bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVubGlua2VkQ29kZUJsb2Nr
KQotICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKLSAgICAsIG1fc3RlcHBpbmdN
b2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQotICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAg
ICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93bmVyRXhl
Y3V0YWJsZSkKLSAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCi0gICAgLCBtX3Ro
aXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCi0gICAgLCBtX3Nj
b3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKLSAgICAsIG1f
c291cmNlKHNvdXJjZVByb3ZpZGVyKQotICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0
KQotICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQot
ICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQotICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoMCkKLSAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKLSAgICAsIG1fY3Jl
YXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpKQotewotICAgIG1fdmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKLQotICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci0gICAgQVNTRVJUKG1f
c2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwotCi0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBz
ZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotfQot
Ci12b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywK
LSAgICBKU1Njb3BlKiBzY29wZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0K
LSAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQot
ICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJh
bmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOwotCi0gICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oKSk7Ci0gICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xvYmFs
T2JqZWN0KCkpCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwgdGhp
cywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgIExpbmtUaW1lQ29uc3RhbnQg
dHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOwotICAgICAgICBpZiAodW5z
aWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5yZWdpc3RlckluZGV4Rm9y
TGlua1RpbWVDb25zdGFudCh0eXBlKSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNb
cmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9y
TGlua1RpbWVDb25zdGFudCh0eXBlKSk7Ci0gICAgfQotCi0gICAgLy8gV2UgYWxyZWFkeSBoYXZl
IHRoZSBjbG9uZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IHNpbmNl
IHdlIG5lZWQgdG8gaW5zdGFudGlhdGUKLSAgICAvLyB0aGUgbW9kdWxlIGVudmlyb25tZW50cyBi
ZWZvcmUgbGlua2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0aGUgc3RvcmVkIHN5bWJv
bCB0YWJsZSB3aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCi0gICAgaWYgKFVubGlua2VkTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0ganNE
eW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih1bmxpbmtlZENvZGVC
bG9jaykpIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJvbFRhYmxlID0ganNDYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKS0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZSgpOwotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpIHsK
LSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJvbFRhYmxl
LT5tX2xvY2spOwotICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBl
UHJvZmlsaW5nKGxvY2tlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbGFjZUNvbnN0YW50KHVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUpOwotICAgIH0KLQot
ICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gdm0udHlwZVBy
b2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpOwotICAgIG1fZnVuY3Rpb25EZWNs
cyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4odW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKLSAgICBmb3IgKHNpemVf
dCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkp
OwotICAgICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQotICAg
ICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRS
YW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCgpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgdGhp
cywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJj
ZSgpKSk7Ci0gICAgfQotCi0gICAgbV9mdW5jdGlvbkV4cHJzID0gUmVmQ291bnRlZEFycmF5PFdy
aXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZGdW5jdGlvbkV4cHJzKCkpOwotICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9
IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7Ci0gICAgICAgIGlmIChzaG91bGRV
cGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCi0gICAgICAgICAgICB2bS5mdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKLSAgICAgICAgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50QnVmZmVyQ291bnQoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuZ3Jvdyhjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZENvZGVCbG9jazo6Q29uc3RhbnRCdWZmZXImIGJ1ZmZlciA9IHVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudEJ1ZmZlcihpKTsKLSAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50
QnVmZmVyc1tpXSA9IGJ1ZmZlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5y
ZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1
bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsK
LSAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnNbaV07Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgICAgICBoYW5k
bGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29k
ZVB0cihvcF9jYXRjaCkpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHVubGlua2VkQ29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuYmVnaW4oKTsKLSAg
ICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aSkub2Zmc2V0VGFibGUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IHB0ciAhPSBlbmQ7
ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE9mZnNldExvY2F0aW9uIG9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9IHB0ci0+dmFsdWUuYnJhbmNo
T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZzZXQpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaXplX3Qg
Y291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkpIHsK
LSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VUYWJsZSA9IHVubGlua2Vk
Q29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7Ci0gICAgICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV07Ci0g
ICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBzb3VyY2VUYWJsZS5icmFu
Y2hPZmZzZXRzOwotICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4gPSBzb3VyY2VUYWJsZS5t
aW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSBt
ZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKLSAgICBpZiAoc2l6ZV90IHNpemUgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSkKLSAgICAgICAg
bV9sbGludENhbGxMaW5rSW5mb3MgPSBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0luZm8+
KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZkFycmF5UHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheVByb2ZpbGVzLmdyb3coc2l6ZSk7Ci0g
ICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlcyA9IFJl
ZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPihzaXplKTsKLSAgICBpZiAoc2l6
ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpCi0g
ICAgICAgIG1fdmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+KHNp
emUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlcygpKQotICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlcyA9IFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmlsZT4oc2l6ZSk7Ci0K
LSNpZiBFTkFCTEUoSklUKQotICAgIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotI2VuZGlmCi0KLSAgICAvLyBD
b3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5zdHJ1Y3Rpb25zCi0gICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb3Vu
dCgpOwotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW06OlJlYWRlciBpbnN0cnVjdGlvblJl
YWRlcih1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotCi0gICAgLy8gQm9va2tl
ZXAgdGhlIHN0cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KLSAgICBIYXNo
U2V0PEpTTW9kdWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9u
bWVudHM7Ci0KLSAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucyhp
bnN0cnVjdGlvbkNvdW50KTsKLQotICAgIHVuc2lnbmVkIHZhbHVlUHJvZmlsZUNvdW50ID0gMDsK
LSAgICBhdXRvIGxpbmtWYWx1ZVByb2ZpbGUgPSBbJl0odW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQs
IHVuc2lnbmVkIG9wTGVuZ3RoKSB7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlUHJvZmlsZUluZGV4
ID0gdmFsdWVQcm9maWxlQ291bnQrKzsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
Jm1fdmFsdWVQcm9maWxlc1t2YWx1ZVByb2ZpbGVJbmRleF07Ci0gICAgICAgIEFTU0VSVChwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcHJvZmlsZS0+bV9ieXRlY29k
ZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBpbnN0cnVjdGlvbnNbYnl0ZWNvZGVP
ZmZzZXQgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKLSAgICB9OwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgIWluc3RydWN0aW9uUmVhZGVyLmF0RW5kKCk7ICkgewotICAgICAgICBjb25z
dCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9IGluc3RydWN0aW9uUmVhZGVyLm5leHQoKTsKLQot
ICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1swXS51Lm9wY29kZSk7
Ci0KLSAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gdm0uaW50ZXJwcmV0ZXItPmdldE9wY29kZShw
Y1swXS51Lm9wY29kZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgb3BMZW5ndGg7
ICsraikgewotICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAhPSBzaXplb2YoaW50cHRy
X3QpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5wb2ludGVyID0gMDsK
LSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0udS5vcGVy
YW5kOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsKLSAgICAg
ICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50IGFycmF5
UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBt
X2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotCi0g
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2Zp
bGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92
YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoKLSAg
ICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
dmFsOiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAt
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJ
bmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
b3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwotICAg
ICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZGly
ZWN0X3BuYW1lOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfd2l0aF90aGlzOgotICAgICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6Ci0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zy
b21fYXJndW1lbnRzOgotICAgICAgICBjYXNlIG9wX3RvX251bWJlcjogewotICAgICAgICAgICAg
bGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGludCBhcnJh
eVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
bV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKLSAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJvZmls
ZXNbYXJyYXlQcm9maWxlSW5kZXhdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogewotICAgICAgICAgICAgaW50IGFycmF5
UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBt
X2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxl
c1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OgotICAgICAgICBjYXNlIG9wX25ld19hcnJheV9idWZm
ZXI6Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogewotICAgICAgICAgICAg
aW50IGFycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZXNbYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewot
ICAgICAgICAgICAgaW50IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXggPSBwY1tvcExlbmd0
aCAtIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBv
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9ICZtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tvYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGludCBpbmZlcnJlZElubGlu
ZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwot
ICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUodm0sCi0gICAg
ICAgICAgICAgICAgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBpbmZl
cnJlZElubGluZUNhcGFjaXR5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAgICAgICAg
Y2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BM
ZW5ndGgpOwotICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGgg
LSAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxl
SW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjWzVd
LnUub3BlcmFuZF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XSA9ICZtX2xs
aW50Q2FsbExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgbGlua1ZhbHVl
UHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgICAgICAgICBDUkFTSCgpOwotCi0g
ICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBS
ZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzRdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IExvY2FsQ2xvc3VyZVZhcik7
Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwotCi0g
ICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdl
dCwgdHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7Ci0gICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAgICAgICAg
aWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkgewotICAgICAgICAgICAgICAgIGlmIChvcC50eXBl
ID09IE1vZHVsZVZhcikgewotICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBsaW5rZWQg
bW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHMuYWRkKGpzQ2FzdDxK
U01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50KSkuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxleGljYWxFbnZpcm9ubWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0
KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkKLSAgICAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51
LnBvaW50ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7Ci0gICAgICAgICAgICBsaW5rVmFsdWVQcm9m
aWxlKGksIG9wTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBz
Y29wZSwgaWQsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAotCi0gICAgICAgICAgICBp
bnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOwotCi0gICAgICAgICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENs
b3N1cmVWYXIpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gR2V0UHV0
SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Nj
b3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxT
Y29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJ
bml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2
ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFu
ZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZv
LnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2Rl
KCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBv
cC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNo
cG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OwotICAgICAgICAgICAgZWxzZSBpZiAob3Auc3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2Nv
cGU6IHsKLSAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBHZXRQ
dXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChnZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0byBp
cyBub3QgYW5vbnltb3VzLgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgICAgICAgICBp
bnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29u
c3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
ICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tl
ciwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gc3lt
Ym9sVGFibGUtPmVuZChsb2NrZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUu
cHJlcGFyZVRvV2F0Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1
XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0u
dS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0g
cGNbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnBvaW50
ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJh
Y3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwg
c2NvcGUsIGlkZW50LCBQdXQsIGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0u
dS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUs
IGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAg
IGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0
OwotICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgICAgICAgICBp
ZiAob3Aud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgICAgICAgICAgb3Aud2F0Y2hwb2ludFNl
dC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhpcywgaWRlbnQpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTogewotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwotICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0
aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxlX3R5cGUgcmVnVG9Qcm9maWxlLCBUeXBlTG9j
YXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/Ci0gICAgICAgICAgICBzaXpl
X3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwotICAgICAgICAgICAgdW5z
aWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Ci0gICAgICAgICAgICBHbG9iYWxWYXJpYWJsZUlE
IGdsb2JhbFZhcmlhYmxlSUQgPSAwOwotICAgICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2Jh
bFR5cGVTZXQ7Ci0gICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29k
ZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlv
bk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgUHJvZmls
ZVR5cGVCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2ZpbGVUeXBlQnl0ZWNvZGVG
bGFnPihwY1szXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgc3dpdGNoIChmbGFnKSB7Ci0gICAgICAgICAg
ICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzJdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+
KHBjWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdHlwZSBw
cm9maWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3IgYSBQdXQsIHdlIGNhbiBh
bHdheXMgY2xhaW0gYSBHZXQgYmVjYXVzZQotICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGFic3Ry
YWN0bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgotICAgICAgICAgICAgICAgIFJlc29sdmVP
cCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0aWFsaXph
dGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQotICAgICAgICAgICAgICAgIGlmIChvcC50
eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlID0gb3AubGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQotICAgICAg
ICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1ib2xU
YWJsZSgpOwotCi0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSAob3Au
dHlwZSA9PSBNb2R1bGVWYXIpID8gb3AuaW1wb3J0ZWROYW1lLmdldCgpIDogaWRlbnQuaW1wbCgp
OwotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAgICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGlsZSBw
cm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBwcm9m
aWxpbmcgeWV0LgotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5
cGVQcm9maWxpbmcobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJ
RCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0pOwot
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5
cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlck5v
R2xvYmFsSURFeGlzdHM7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDogewot
ICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNbMl0udS5vcGVyYW5kOwot
ICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xU
YWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9s
b2NrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVk
IHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQg
Zm9yIHByb2ZpbGluZyB5ZXQuCi0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5
bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7
Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBl
U2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKLQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRDogCi0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFi
bGVJRCA9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVG
dW5jdGlvblJldHVyblN0YXRlbWVudDogewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG93bmVyRXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVHlwZVNldCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUpLT5yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFs
VmFyaWFibGVJRCA9IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudDsKLSAgICAgICAgICAgICAg
ICBpZiAoIXNob3VsZEFuYWx5emUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBh
IHJldHVybiBzdGF0ZW1lbnQgY2FuIGJlIGFkZGVkIGltcGxpY2l0bHkgdG8gcmV0dXJuIHVuZGVm
aW5lZCBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2VzIGJlY2F1c2UgdGhleSBh
cmVuJ3QgaW4gdGhlIGFjdHVhbCBzb3VyY2UgdGV4dCBvZgotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgdXNlcidzIHByb2dyYW0sIGdpdmUgdGhlIHR5cGUgcHJvZmlsZXIgc29tZSByYW5nZSB0
byBpZGVudGlmeSB0aGVzZSByZXR1cm4gc3RhdGVtZW50cy4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gQ3VycmVudGx5LCB0aGUgdGV4dCBvZmZzZXQgdGhhdCBpcyB1c2VkIGFzIGlkZW50aWZpY2F0
aW9uIGlzICJmIiBpbiB0aGUgZnVuY3Rpb24ga2V5d29yZAotICAgICAgICAgICAgICAgICAgICAv
LyBhbmQgaXMgc3RvcmVkIG9uIFR5cGVMb2NhdGlvbidzIG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNl
dElmUmV0dXJuU3RhdGVtZW50IG1lbWJlciB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICAgICAg
ZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3Rh
cnRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9v
bD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCkt
PmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAgIG93bmVy
RXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVT
ZXQsICZ2bSk7Ci0gICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLmZpcnN0OwotICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWly
LnNlY29uZDsKLQotICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmlsZVR5cGVCeXRlY29kZUZ1
bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90
Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVyRXhlY3V0YWJsZS0+dHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzaG91bGRBbmFseXpl
ICYmIGlzTmV3TG9jYXRpb24pCi0gICAgICAgICAgICAgICAgdm0udHlwZVByb2ZpbGVyKCktPmlu
c2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGlmIChwY1sxXS51Lmlu
ZGV4ID09IERpZFJlYWNoQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBtX2hhc0RlYnVnZ2Vy
U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogewotICAgICAgICAgICAgaW50IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPT0gbnVtUGFyYW1ldGVycygpIC0gMSwgIldlIGFzc3VtZSB0aGF0IHRoaXMg
aXMgdHJ1ZSB3aGVuIHJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdCBwYXJhbWV0ZXIgZHVyaW5nIE9T
UiBleGl0IGluIHRoZSBGVEwgSklULiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaSArPSBvcExlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAodm0uY29udHJvbEZsb3dQcm9maWxl
cigpKQotICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJv
ZmlsZXIoaW5zdHJ1Y3Rpb25zKTsKLQotICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0
cnVjdGlvbnMpOwotCi0gICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJlc2hvbGRzIG9ubHkgYWZ0
ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZXNlCi0gICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgotICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCi0gICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQg
dGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBo
ZXJlCi0gICAgLy8gc3luY2hyb25vdXNseS4KLSAgICBpZiAoT3B0aW9uczo6YWx3YXlzQ29tcHV0
ZUhhc2goKSkKLSAgICAgICAgaGFzaCgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBHZW5lcmF0
ZWRCeXRlY29kZXMoKSkKLSAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Ci0gICAgCi0gICAgaGVhcCgp
LT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwot
fQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0NlbGwoKnZtLCBz
dHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHRoaXMs
IGdsb2JhbE9iamVjdCkKLSAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDApCi0gICAgLCBtX251bVZh
cnMoMCkKLSAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNlKQotI2lmIEVOQUJMRShK
SVQpCi0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fubm90Q29tcGlsZSkKLSNl
bmRpZgotICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChm
YWxzZSkKLSAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKLSAgICAsIG1faXNTdHJpY3RNb2Rl
KGZhbHNlKQotICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCi0gICAgLCBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlz
YWJsZWQpCi0gICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJs
ZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV92
bSh2bSkKLSAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKLSAgICAsIG1fb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyKDApCi0gICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCi0gICAg
LCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkKLXsKLSAg
ICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCopCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAgaGVhcCgpLT5tX2Nv
ZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLSNlbmRpZgotCi1Db2RlQmxvY2s6On5Db2RlQmxvY2so
KQotewotICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7Ci0KLSAgICBp
ZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBNaXhlZFRyaVN0YXRlKQot
ICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6ZShGYWxzZVRyaVN0YXRl
KTsKLQotI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0gICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKLSNlbmRpZgotCi0gICAgLy8gV2UgbWF5IGJlIGRlc3Ryb3llZCBiZWZvcmUgYW55
IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUgZGVzdHJveWVkLgotICAgIC8vIENvbnNp
ZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVucmVhY2hhYmxlIGF0IHRoZSBzYW1lIHRp
bWUuIFRoZXJlCi0gICAgLy8gaXMgbm8gZ3VhcmFudGVlIGFib3V0IHRoZSBvcmRlciBpbiB3aGlj
aCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgotICAgIC8vIFNvLCBpZiB3ZSBkb24ndCBy
ZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVzdHJveWVkIGJlZm9yZSB0aGUKLSAgICAv
LyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGludG8gdXMsIHRoZW4gdGhlIENhbGxMaW5r
SW5mbyB2ZWN0b3IncwotICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkgdG8gcmVtb3ZlIG5vZGVz
IGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0LgotICAgIHVubGlua0luY29t
aW5nQ2FsbHMoKTsKLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdp
bGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCi0gICAgLy8gbV9pbmNvbWluZ0Nh
bGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0lu
Zm8KLSAgICAvLyBkZXN0cnVjdG9ycy4KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9yIChCYWc8
U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsg
ISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRl
cjsKLSAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOwotICAgICAgICBzdHViLT5kZXJlZigpOwot
ICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENvZGVCbG9jazo6c2V0Q29u
c3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbikKLXsKLSAgICBBU1NFUlQoY29uc3RhbnRzLnNpemUoKSA9
PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6ZSgpKTsKLSAgICBzaXplX3Qg
Y291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwotICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXpl
VG9GaXQoY291bnQpOwotICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVyID0gISFtX3ZtLT50eXBlUHJv
ZmlsZXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsKLQotICAgICAgICBpZiAo
IWNvbnN0YW50LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPihjb25zdGFudCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAg
ICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogY2xvbmUg
PSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOwotICAgICAgICAgICAgICAgIGlm
ICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCi0gICAgICAgICAgICAgICAgICAg
IGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKLQotICAgICAgICAgICAgICAgIGNv
bnN0YW50ID0gY2xvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnQpOwotICAgIH0KLQot
ICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOwotfQotCi12b2lkIENvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQotewotICAgIG1fYWx0ZXJuYXRpdmUuc2V0
KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJh
bWV0ZXJzKGludCBuZXdWYWx1ZSkKLXsKLSAgICBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsK
LQotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFZhbHVlUHJv
ZmlsZT4obmV3VmFsdWUpOwotfQotCi12b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9jYWNoZU1hcC5lbmQoKTsKLSAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgcHRy
ID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnB0ci0+dmFsdWUpOwotfQotCi1Db2RlQmxvY2sqIENvZGVCbG9jazo6c3BlY2lh
bE9TUkVudHJ5QmxvY2tPck51bGwoKQotewotI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChq
aXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1cm4gMDsKLSAgICBERkc6
OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAgIHJldHVybiBqaXRDb2Rl
LT5vc3JFbnRyeUJsb2NrKCk7Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICByZXR1cm4g
MDsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGJvb2wgc2V0QnlNZSA9ICFtX3Zp
c2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUp
OwotICAgIGlmICghc2V0QnlNZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEhlYXA6Omlz
TWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hv
dWxkVmlzaXRTdHJvbmdseSgpKSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRS
ZWFkT25seVBvaW50ZXIodGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBU
aGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJz
OiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9i
YWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MK
LSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1h
dHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAgLy8gZmlndXJlcyBvdXQgd2hldGhl
ciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotCi0gICAgaWYgKCFKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYg
d2UgamV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFsdGVybmF0aXZlLCBzbyBt
YWtlIHN1cmUgdGhhdCBpdAotICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4gaWYgd2UgZG9uJ3QuCi0g
ICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwotICAgIAotICAgIC8vIFRoZXJlIGFy
ZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBE
RkcgZml4cG9pbnQgZm9yCi0gICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBz
dHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCi0gICAgLy8gaW5saW5l
IGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCi0g
ICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2Un
cmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLAot
ICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBzZW5zZTog
d2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCi0gICAgLy8gY29kZSBibG9jayBzaG91bGQgYmUg
amV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJlaW5nCi0g
ICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGlsbCBhc3N1
bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAotICAgIC8vIHBlcmZvcm0gb25lIHJvdW5kIG9mIGRl
dGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNlZCBvbgot
ICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkgb3RoZXIg
b2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCi0gICAgLy8gb3RoZXIgcmVhc29ucywgdGhhdCB0aGlz
IGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlzCi0g
ICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KLQotICAg
IG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKHZpc2l0b3IpOwotCi0gICAgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5l
c3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7Ci0gICAgZGV0ZXJtaW5lTGl2ZW5lc3ModmlzaXRvcik7
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXNpemVfdCBDb2RlQmxvY2s6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpz
Q2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKLSAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0ZWQg
PSB0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24p
OwotICAgIGlmICh0aGlzT2JqZWN0LT5tX2ppdENvZGUpCi0gICAgICAgIGV4dHJhTWVtb3J5QWxs
b2NhdGVkICs9IHRoaXNPYmplY3QtPm1faml0Q29kZS0+c2l6ZSgpOwotICAgIHJldHVybiBCYXNl
Ojplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7Ci19Ci0KLXZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdGhp
c09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgLy8gVGhlcmUgYXJlIHR3
byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5lIGNh
Y2hlIGNsZWFyaW5nCi0gICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkgb2Yg
dXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCi0gICAgLy8gaXMg
cHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hhdCBh
bmQgd2hlbiBpdCBydW5zLCBpdAotICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFzIGFu
eSB3b3JrIHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91
bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKLQotICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sg
PSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG90aGVyQmxvY2spOwotCi0gICAgaWYgKG1faml0Q29k
ZSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRDb2RlLT5z
aXplKCkpOwotICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCi0gICAgICAgIHZpc2l0b3Iu
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJ
bnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKLQotICAgIHN0cm9uZ2x5
VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVm
ZXJlbmNlcyh2aXNpdG9yKTsKLQotICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9
IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotfQotCi1ib29sIENv
ZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCi17Ci0gICAgaWYgKE9wdGlvbnM6OmZvcmNl
Q29kZUJsb2NrTGl2ZW5lc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoc2hv
dWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBi
ZSBqZXR0aXNvbmVkIHdoZW4KLSAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUu
IFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKLSAgICAvLyBzY2FubmVkLCB3ZSBj
YW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAoIUpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVl
VG9XZWFrUmVmZXJlbmNlKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFIZWFwOjppc01h
cmtlZCh0aGlzKTsKLX0KLQotc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVRv
TGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCi17Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnVzZUVhZ2VyQ29kZUJsb2NrSmV0dGlzb25UaW1pbmcoKSkpIHsKLSAgICAgICAgc3dpdGNo
IChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKLSAgICAgICAg
Y2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKDEwICsgMjApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwKTsKLSAgICAg
ICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcygxMjApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOwotICAgIGNhc2UgSklUQ29k
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9uYWwgc2Vj
b25kcywgc2luY2UgQmFzZWxpbmVKSVQgYW5kCi0gICAgICAgIC8vIEludGVycHJldGVyVGh1bmsg
c2hhcmUgYSBDb2RlQmxvY2suCi0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg1ICsg
MTApKTsKLSAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25v
OjpzZWNvbmRzKDIwKSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6Ci0gICAgICAgIHJldHVy
biBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihz
dGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZUJs
b2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKLXsKLSAgICBpZiAoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkodGhpcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgpKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKHRpbWVTaW5jZUNyZWF0aW9uKCkg
PCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJvb2wgc2hv
dWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlv
bikKLXsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJh
bnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgQ29kZUJs
b2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7Ci0KLSAgICBpZiAobV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGFsbEFyZU1hcmtlZFNvRmFyID0g
dHJ1ZTsKLSAgICAgICAgCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+aW50
ZXJwcmV0ZXI7Ci0gICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSB7Ci0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZp
bnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9wY29k
ZSkpIHsKLSAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICAgICAg
U3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlE
OwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rp
b25bNl0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlE
IHx8ICFuZXdTdHJ1Y3R1cmVJRCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBt
X3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAgICAgICAgICAgICAgICAg
bV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJlKSkK
LSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9p
bnRlcihuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIGZvciAoQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKQotICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gKCppdGVyKS0+
cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZm9yIChhdXRvJiB3ZWFrUmVmZXJl
bmNlIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgIGFs
bEFyZU1hcmtlZFNvRmFyICY9IHdlYWtSZWZlcmVuY2UtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJh
bnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNp
dGlvbihkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldKSkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQgb2Yg
dGhlCi0gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6Ci0gICAgICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29kZSBibG9jay4gV2Uga25v
dyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQotICAgICAgICAgICAgICAgIC8v
ICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRyYW5zaXRpb24u
IFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gICBjb2RlIHRo
YXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNlcidzCi0gICAg
ICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIGlubGluZWUg
dG8gcnVuIGlzIG5vIGxvbmdlcgotICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4KLSAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJjZSBvZiB0aGUgdHJhbnNp
dGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKLSAgICAgICAgICAgICAgICAvLyAg
IGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMgdGhlIHRh
cmdldC4KLSAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBsaXZl
IGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgotICAgICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAgICAgLy8gV2UgYWxzbyBzaG9ydC1jaXJjdWl0IHRoZSBsaXZlbmVzcyBpZiB0aGUg
c3RydWN0dXJlIGlzIGhhcm1sZXNzCi0gICAgICAgICAgICAgICAgLy8gdG8gbWFyayAoaS5lLiBp
dHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFscmVhZHkKLSAgICAgICAg
ICAgICAgICAvLyBsaXZlKS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgCi0gICAgaWYgKGFs
bEFyZU1hcmtlZFNvRmFyKQotICAgICAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQg
PSB0cnVlOwotfQotCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotICAgIAotI2lmIEVO
QUJMRShERkdfSklUKQotICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFpbmluZyB3b3Jr
IHRvIGRvLgotICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdD
b21tb24oKTsKLSAgICBpZiAoZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBOb3cgY2hlY2sgYWxsIG9mIG91ciB3ZWFrIHJlZmVy
ZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdlCi0gICAgLy8gaGF2ZSBwcm92
ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyByZWZlcmVuY2VzLiBJZiBhdCBl
bmQgb2YKLSAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92ZWQgbGl2ZW5lc3MsIHRoZW4g
dGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgotICAgIGJvb2wgYWxsQXJlTGl2ZVNvRmFyID0gdHJ1
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBhbGxB
cmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53
ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBhbGxB
cmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJZiBzb21lIHdlYWsgcmVmZXJlbmNl
cyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3YXMKLSAgICAvLyB1bnN1
Y2Nlc3NmdWwuCi0gICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBSZWNvcmQgdGhpcyBpbmZv
cm1hdGlvbiBzbyB3ZSBkb24ndAotICAgIC8vIGNvbWUgYmFjayBoZXJlIGFnYWluLCBhbmQgc2Nh
biB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCi0gICAgZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Q
cm92ZWQgPSB0cnVlOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50
ZXIodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXZvaWQgQ29kZUJsb2Nr
OjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0KLSAgICAgICAgYml0d2lz
ZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcikp
OwotCi0gICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKLSAgICBj
b2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwotfQotCi12b2lkIENvZGVCbG9j
azo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKG9wX2dldF9ieV9p
ZCk7Ci0gICAgaW5zdHJ1Y3Rpb25bNF0udS5wb2ludGVyID0gbnVsbHB0cjsKLSAgICBpbnN0cnVj
dGlvbls1XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgIGluc3RydWN0aW9uWzZdLnUucG9pbnRl
ciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2Fj
aGVzKCkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKG1fb3duZXJFeGVjdXRh
YmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYK
LQotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwotICAg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91
bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7Ci0gICAgZm9yIChzaXpl
X3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3Ry
dWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKLSAgICAgICAgc3dpdGNo
IChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpKSB7
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9w
cm90b19sb2FkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDogewotICAgICAgICAg
ICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVj
dHVyZUlEOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtl
ZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHByb3BlcnR5IGFj
Y2Vzcy5cbiIpOwotICAgICAgICAgICAgY2xlYXJMTEludEdldEJ5SWRDYWNoZShjdXJJbnN0cnVj
dGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZDogewotICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJ
bnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3
U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVD
aGFpbi5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6Omlz
TWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkp
KSAmJgotICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQo
bV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpICYmCi0g
ICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRpb24u
XG4iKTsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQgPSAwOwot
ICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKLSAgICAgICAgICAg
IGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQgPSAwOwotICAgICAgICAgICAgY3VySW5z
dHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICAgICAgICAgIGlmICghY3Vy
SW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rp
b25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1ckluc3Ry
dWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9u
WzJdLnUuc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51
LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAotICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNd
LnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewotICAgICAgICAgICAgYXV0byYgY2FjaGVX
cml0ZUJhcnJpZXIgPSBjdXJJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsKLSAgICAgICAgICAgIGlm
ICghY2FjaGVXcml0ZUJhcnJpZXIgfHwgY2FjaGVXcml0ZUJhcnJpZXIudW52YWxpZGF0ZWRHZXQo
KSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rpb24gPSBjYWNoZVdyaXRl
QmFycmllci5nZXQoKTsKLSAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjYWNoZWRGdW5j
dGlvbikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBj
cmVhdGVfdGhpcyB3aXRoIGNhY2hlZCBjYWxsZWUgJXAuXG4iLCBjYWNoZWRGdW5jdGlvbik7Ci0g
ICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0gICAgICAgICAg
ICAvLyBSaWdodCBub3cgdGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkuIEFueSBzeW1ib2wg
dGFibGVzIHRoYXQgdGhpcyB3aWxsIHJlZmVyIHRvCi0gICAgICAgICAgICAvLyBhcmUgZm9yIG91
dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJvbmdseSwg
YW5kIHRoZXkgcmVmZXIKLSAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUgc3Ryb25n
bHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KLSAgICAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSA9IGN1ckluc3RydWN0aW9u
WzZdLnUuc3ltYm9sVGFibGU7Ci0gICAgICAgICAgICBpZiAoIXN5bWJvbFRhYmxlIHx8IEhlYXA6
OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBzeW1ib2xUYWJsZS5nZXQo
KSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICAgICAgY2Fz
ZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9
IEdldFB1dEluZm8oY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlm
IChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8IGdldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIAotICAgICAgICAg
ICAgICAgIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIgfHwg
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXIgfHwgZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZTsK
LSAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVjdHVyZS5n
ZXQoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBzY29wZSBh
Y2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICAg
ICAgc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpOwotICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQob3Bjb2RlSUQsIGZhbHNlLCAiVW5oYW5kbGVkIG9w
Y29kZSBpbiBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5LCAlcyglZCkgYXQgYmMg
JXUiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sIG9wY29kZUlELCBwcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4ndCBqdXN0IHJl
bW92ZSBhbGwgdGhlIHNldHMgd2hlbiB3ZSBjbGVhciB0aGUgY2FjaGVzIHNpbmNlIHdlIG1pZ2h0
IGhhdmUgY3JlYXRlZCBhIHdhdGNocG9pbnQgc2V0Ci0gICAgLy8gdGhlbiBjbGVhcmVkIHRoZSBj
YWNoZSB3aXRob3V0IEdDaW5nIGluIGJldHdlZW4uCi0gICAgbV9sbGludEdldEJ5SWRXYXRjaHBv
aW50TWFwLnJlbW92ZUlmKFtdKGNvbnN0IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA6OktleVZhbHVl
UGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gIUhlYXA6OmlzTWFya2Vk
KHBhaXIua2V5KTsKLSAgICB9KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xs
aW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9sbGludENhbGxM
aW5rSW5mb3NbaV0uaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQobV9sbGludENhbGxMaW5r
SW5mb3NbaV0uY2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBjYWxsIGZy
b20gIiwgKnRoaXMsICJcbiIpOwotICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3NbaV0u
dW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEhbV9sbGludENhbGxMaW5rSW5mb3Nb
aV0ubGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlua0luZm9z
W2ldLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKLSAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlua0lu
Zm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIENvZGVCbG9j
azo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCi17Ci0jaWYgRU5BQkxFKEpJVCkK
LSAgICBmb3IgKGF1dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp2bSgpKTsKLQotICAgIGZvciAoQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICoq
aXRlcjsKLSAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsKLSAgICB9
Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJp
dHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikp
OwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0dGlz
b25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgewotICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSAgICBpZiAoY29kZUJsb2NrLT5zaG91
bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKLSAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVCbG9jay0+aml0VHlwZSgp
KSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29kZSgpKQotICAgICAgICBj
b2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoSklU
Q29kZTo6aXNKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdG9IYXNoTWFwKG1fc3R1YkluZm9zLCBn
ZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShyZXN1bHQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5m
b01hcChTdHViSW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCByZXN1bHQpOwotfQotCi12
b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGlm
IChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQotICAgICAgICB0b0hhc2hNYXAobV9jYWxsTGlu
a0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0Q2Fs
bExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZ2V0Q2FsbExpbmtJbmZvTWFwKGxvY2tlciwg
cmVzdWx0KTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpCi17Ci0jaWYgRU5BQkxFKEpJ
VCkKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBmb3IgKGF1
dG8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoQ29k
ZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBieVZhbEluZm8pOwotICAgIH0KLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxv
Y2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkKLXsKLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGdldEJ5VmFsSW5mb01hcChsb2NrZXIs
IHJlc3VsdCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZChh
Y2Nlc3NUeXBlKTsKLX0KLQotSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFBy
b2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQotewotICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsK
LX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQot
Ci1TdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQotewotICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogbV9z
dHViSW5mb3MpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNvZGVPcmln
aW4pCi0gICAgICAgICAgICByZXR1cm4gc3R1YkluZm87Ci0gICAgfQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1CeVZhbEluZm8qIENvZGVCbG9jazo6YWRkQnlWYWxJbmZvKCkKLXsKLSAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX2J5VmFsSW5m
b3MuYWRkKCk7Ci19Ci0KLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0luZm8o
KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJu
IG1fY2FsbExpbmtJbmZvcy5hZGQoKTsKLX0KLQotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6Omdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgZm9y
IChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGluZGV4KSkK
LSAgICAgICAgICAgIHJldHVybiAqaXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQotewotICAgIFJFTEVBU0VfQVNTRVJU
KCFKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNlIG5v
IG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywgY2Fs
bAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZlIEpJ
VCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAgLy8gc3RydWN0dXJlcyB1
c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldFN0dWJJbmZvTWFwIGFuZCBmcmllbmRzKSB3aWxs
IHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KLSAgICBt
X3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwotICAgIG1f
YnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGlzIGJlY2F1
c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBndWFyZGVk
IGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAgICBtX3JhcmVDYXNlUHJv
ZmlsZXMuY2xlYXIoKTsKLX0KLSNlbmRpZgotCi12b2lkIENvZGVCbG9jazo6dmlzaXRPU1JFeGl0
VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICAvLyBXZSBzdHJvbmdseSB2aXNp
dCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoCi0g
ICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBDb2RlQmxv
Y2sgb24gZGVtYW5kIGFuZAotICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNoZXMgdGhl
IGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAotICAgIC8vIHRoZSBPU1IgZXhp
dCBhZ2FpbnN0LgotCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpOwotICAgIGlmIChkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsK
LSAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZnQ29tbW9uLT5pbmxpbmVD
YWxsRnJhbWVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGlu
ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7Ci0gICAgdmlz
aXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV91
bmxpbmtlZENvZGUpOwotICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAgICBtX3JhcmVEYXRhLT5t
X2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29uc3RhbnRSZWdpc3RlcnMu
c2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25FeHBycy5zaXpl
KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbEluZm8g
OiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZieVZhbEluZm8tPmNhY2hl
ZFN5bWJvbCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdmlzaXRPU1JFeGl0VGFyZ2V0
cyh2aXNpdG9yKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEhZGZnQ29tbW9u
LT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pOyAvLyBBbG1vc3QgY2Vy
dGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdpbiBzaG91bGQgYWxzbyBi
ZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhvdWdoLgotICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20pOwotICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKLSAgICB9
Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVy
ZW5jZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzW2ldKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21t
b24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKQotICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXSk7Ci0KLSAgICBk
ZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0jZW5kaWYgICAgCi19Ci0K
LUNvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKLXsKLSNpZiBFTkFC
TEUoSklUKQotICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsKLSAgICB3aGlsZSAocmVzdWx0
LT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmppdFR5cGUoKSkgfHwgcmVzdWx0LT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgcmV0dXJu
IHRoaXM7Ci0jZW5kaWYKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lv
bigpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgQ29kZUJsb2NrKiByZXN1bHQg
PSByZXBsYWNlbWVudCgpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGZvciBhbiBl
eGVjdXRhYmxlLgotICAgICAgICAvLyBBc3N1bWUgdGhhdCB3ZSdyZSB0aGUgYmFzZWxpbmUgQ29k
ZUJsb2NrLgotICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9u
ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICByZXN1bHQgPSByZXN1bHQtPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICByZXR1
cm4gdGhpczsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEpJVCkKLWJvb2wgQ29kZUJsb2NrOjpo
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCi17
Ci0gICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBl
KCksIHR5cGVUb1JlcGxhY2UpOwotfQotCi1ib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKQotewotICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBl
KCkpOwotfQotI2VuZGlmCi0KLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVp
cmVkSGFuZGxlcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3Ry
dWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9m
ZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKLX0KLQotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFu
ZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5k
bGVyKQotewotICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Ci19Ci0KLUNhbGxTaXRlSW5kZXggQ29k
ZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBv
cmlnaW5hbENhbGxTaXRlKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVBU0VfQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKLSAgICBBU1NFUlQoISFo
YW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKLSAgICBDb2RlT3JpZ2lu
IG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKLSAgICByZXR1
cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW5h
bE9yaWdpbik7Ci0jZWxzZQotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBuZXcgb24tdGhlLWZseSBl
eGNlcHRpb24gaGFuZGxpbmcKLSAgICAvLyBjYWxsIHNpdGVzIG91dHNpZGUgdGhlIERGRy9GVEwg
aW5saW5lIGNhY2hlcy4KLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luYWxDYWxsU2l0ZSk7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleCgw
dSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJG
b3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFu
ZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
eGNlcHRpb25IYW5kbGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICBpZiAoaGFuZGxlci5zdGFydCA8
PSBpbmRleCAmJiBoYW5kbGVyLmVuZCA+IGluZGV4KSB7Ci0gICAgICAgICAgICBleGNlcHRpb25I
YW5kbGVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi11bnNpZ25lZCBDb2Rl
QmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUo
KSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIGludCBkaXZvdDsKLSAgICBp
bnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNldDsKLSAgICB1bnNpZ25lZCBsaW5lOwot
ICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNv
bHVtbik7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRp
dm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVu
c2lnbmVkJiBjb2x1bW4pIGNvbnN0Ci17Ci0gICAgbV91bmxpbmtlZENvZGUtPmV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKLSAgICBkaXZvdCArPSBtX3NvdXJjZU9mZnNldDsK
LSAgICBjb2x1bW4gKz0gbGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5PZmZzZXQoKTsKLSAgICBs
aW5lICs9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKTsKLX0KLQotYm9vbCBD
b2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbikKLXsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSB2bSgpLT5pbnRl
cnByZXRlcjsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5i
ZWdpbigpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5lbmQo
KTsKLSAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7KSB7
Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGl0
LT51Lm9wY29kZSk7Ci0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9kZWJ1ZykgewotICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBpdCAtIGJlZ2luOwotICAgICAgICAgICAg
aW50IHVudXNlZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdMaW5lOwotICAgICAgICAg
ICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZUZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWQsIHVudXNlZCwgdW51c2VkLCBv
cERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7Ci0gICAgICAgICAgICBpZiAobGluZSA9PSBvcERl
YnVnTGluZSAmJiAoY29sdW1uID09IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uIHx8IGNv
bHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5r
TW9kZSBzaHJpbmtNb2RlKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0KLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAKLSAgICBp
ZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNocmluaykgewotICAgICAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLnNocmlua1RvRml0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9yYXJlRGF0YSkg
ewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0
KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hy
aW5rVG9GaXQoKTsKLSAgICAgICAgfQotICAgIH0gLy8gZWxzZSBkb24ndCBzaHJpbmsgdGhlc2Us
IGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMgaW50byB0aGVz
ZSB0YWJsZXMuCi19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykK
LXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdD
YWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1Bv
bHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2Rl
KiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAg
IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKLXsK
LSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJ
bnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5s
aW5rKCk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2lu
KCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVn
aW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAg
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChF
eGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0g
ICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29taW5nTExJbnRD
YWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxh
Y2VtZW50KCkKLXsKLSAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ld1JlcGxh
Y2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKLX0KLQotI2lmIEVOQUJM
RShKSVQpCi1Db2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7Ci0KLSAgICBpZiAoY2xh
c3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3Io
bV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLQotICAg
IGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4g
anNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsK
LQotICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAgICAg
ICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5j
b2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLQotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLSAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ERkc6OkNhcGFiaWxpdHlM
ZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQotewotICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7Ci0KLSAgICBpZiAoY2xhc3NJ
bmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKLSAgICAgICAgaWYgKG1faXNDb25z
dHJ1Y3RvcikKLSAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29uc3RydWN0Q2Fw
YWJpbGl0eUxldmVsKHRoaXMpOwotICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxD
YXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFs
Q29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmlsaXR5TGV2
ZWwodGhpcyk7Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6OmluZm8o
KSkKLSAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLQot
ICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAg
ICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKLSNlbmRpZgot
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gREZHOjpDYW5u
b3RDb21waWxlOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDb2RlQmxvY2s6
OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9u
TW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCi17Ci0jaWYgIUVOQUJMRShERkdf
SklUKQotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oZGV0YWlsKTsK
LSNlbmRpZgotICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQodGhpcywgImpldHRpc29uIiwg
KCJkdWUgdG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUgPT0gQ291bnRSZW9wdGlt
aXphdGlvbiwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWlsKSkpOwotCi0gICAgUkVM
RUFTRV9BU1NFUlQocmVhc29uICE9IFByb2ZpbGVyOjpOb3RKZXR0aXNvbmVkKTsKLSAgICAKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkg
ewotICAgICAgICBkYXRhTG9nKCJKZXR0aXNvbmluZyAiLCAqdGhpcyk7Ci0gICAgICAgIGlmICht
b2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pCi0gICAgICAgICAgICBkYXRhTG9nKCIgYW5kIGNv
dW50aW5nIHJlb3B0aW1pemF0aW9uIik7Ci0gICAgICAgIGRhdGFMb2coIiBkdWUgdG8gIiwgcmVh
c29uKTsKLSAgICAgICAgaWYgKGRldGFpbCkKLSAgICAgICAgICAgIGRhdGFMb2coIiwgIiwgKmRl
dGFpbCk7Ci0gICAgICAgIGRhdGFMb2coIi5cbiIpOwotICAgIH0KLSAgICAKLSAgICBpZiAocmVh
c29uID09IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSkgewotICAgICAgICBp
ZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkgewotICAgICAgICAgICAgZGF0YUxvZygq
dGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGRlYWQg
cmVmZXJlbmNlczpcbiIpOwotICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uID0gZGZnQ29tbW9u
LT50cmFuc2l0aW9uc1tpXTsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHRyYW5z
aXRpb24ubV9jb2RlT3JpZ2luLmdldCgpOwotICAgICAgICAgICAgICAgIEpTQ2VsbCogZnJvbSA9
IHRyYW5zaXRpb24ubV9mcm9tLmdldCgpOwotICAgICAgICAgICAgICAgIEpTQ2VsbCogdG8gPSB0
cmFuc2l0aW9uLm1fdG8uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCghb3JpZ2luIHx8IEhl
YXA6OmlzTWFya2VkKG9yaWdpbikpICYmIEhlYXA6OmlzTWFya2VkKGZyb20pKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgVHJhbnNp
dGlvbiB1bmRlciAiLCBSYXdQb2ludGVyKG9yaWdpbiksICIsICIsIFJhd1BvaW50ZXIoZnJvbSks
ICIgLT4gIiwgUmF3UG9pbnRlcih0byksICIuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFrID0gZGZnQ29tbW9uLT53
ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQod2VhaykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBSYXdQb2ludGVyKHdlYWspLCAiLlxuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCi0KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7Ci0gICAgCi0gICAg
Ly8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAxKSBNYWtl
IHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93LCB0
aGVuIGlmIHdlIHJldHVybiB0byBpdAotICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBhdCB0
aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1cm4u
Ci0gICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0YWJs
ZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KLQotI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2Up
IHsKLSAgICAgICAgaWYgKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKSkKLSAgICAgICAgICAgIGNvbXBp
bGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1rZWVw
aW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgIGlmICgh
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFkQnVz
eSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoREZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlkYXRl
ICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRpb24g
aWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgotICAgIGlmIChtb2RlID09IENvdW50UmVv
cHRpbWl6YXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwg
YWx0ZXJuYXRpdmUoKS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzY3NwotICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50UmVv
cHRpbWl6YXRpb24oKTsKLSAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkp
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZvciAi
LCAqdGhpcywgIlxuIik7Ci0gICAgfQotICAgIAotICAgIGlmICh0aGlzICE9IHJlcGxhY2VtZW50
KCkpIHsKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVudHJ5
cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKLSAgICAgICAgLy8gYmxv
Y2tzLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFsdGVybmF0aXZlKCkpCi0g
ICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLQotICAgIGlmIChy
ZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpCi0gICAgICAgIHRhbGx5RnJl
cXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIC8vIEpl
dHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwgY29k
ZSB0byBhIGRlYWQgZXhlY3V0YWJsZQotICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgYSBk
ZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYgKG1fdm0tPmhlYXAuaXND
dXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4K
LSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoCi0gICAgICAgIG1fZ2xv
YmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlv
bktpbmQoKSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnN0YWxsIGJhc2VsaW5l
IHZlcnNpb24gb2YgIiwgKnRoaXMsICJcbiIpOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
fQotCi1KU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLX0KLQotY2xh
c3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBSZWN1cnNpb25DaGVja0Z1
bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIGRlcHRoVG9DaGVjaykKLSAgICAgICAgOiBtX3N0YXJ0Q2FsbEZyYW1lKHN0YXJ0Q2Fs
bEZyYW1lKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBtX2Rl
cHRoVG9DaGVjayhkZXB0aFRvQ2hlY2spCi0gICAgICAgICwgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1l
KGZhbHNlKQotICAgICAgICAsIG1fZGlkUmVjdXJzZShmYWxzZSkKLSAgICB7IH0KLQotICAgIFN0
YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAotICAgIHsKLSAgICAgICAgQ2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lID0gdmlzaXRvci0+
Y2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRDYWxsRnJhbWUgPT0gbV9zdGFydENh
bGxGcmFtZSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFtZSA9IHRydWU7Ci0KLSAg
ICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZpc2l0
b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSA9PSBtX2NvZGVCbG9jaykgewotICAgICAgICAg
ICAgICAgIG1fZGlkUmVjdXJzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6RG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtX2RlcHRo
VG9DaGVjay0tKQotICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICB9
Ci0KLSAgICBib29sIGRpZFJlY3Vyc2UoKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY3Vyc2U7IH0K
LQotcHJpdmF0ZToKLSAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJhbWU7Ci0gICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVwdGhUb0NoZWNrOwot
ICAgIG11dGFibGUgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7Ci0gICAgbXV0YWJsZSBib29s
IG1fZGlkUmVjdXJzZTsKLX07Ci0KLXZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwo
RXhlY1N0YXRlKiBjYWxsZXJGcmFtZSkKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
ayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNhbGxMaW5rKCkpCi0gICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNhbGwgbGluayBmcm9t
ICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwgKnRoaXMsICJcbiIpOwot
ICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIWNhbGxlckNvZGVCbG9jaykgewot
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJp
bmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFERkc6OmlzU21hbGxFbm91Z2hUb0lubGlu
ZUNvZGVJbnRvKGNhbGxlckNvZGVCbG9jaykpIHsKLSAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQot
ICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMg
dG9vIGxhcmdlLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2FsbGVy
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAg
ICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0aWxsIGluIHRoZSBpbnRlcnByZXRlciwgdGhlbiB3
ZSBjYW4ndCBleHBlY3QgaW5saW5pbmcgdG8KLSAgICAgICAgLy8gaGFwcGVuIGFueXRpbWUgc29v
bi4gQXNzdW1lIGl0J3MgcHJvZml0YWJsZSB0byBvcHRpbWl6ZSBpdCBzZXBhcmF0ZWx5LiBUaGlz
Ci0gICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIFNBQkkgb25seSBpZiBpdCBp
cyBjYWxsZWQgbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4KLSAgICAgICAgLy8gYW55IG9mIGl0cyBj
YWxsZXJzLgotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBpbiBMTEludC5cbiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIgd2Fz
IGFscmVhZHkgb3B0aW1pemVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpIHsKLSAg
ICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwgY29kZSwgYXNz
dW1lIHRoYXQgdGhhdCB3b24ndCBiZQotICAgICAgICAvLyBvcHRpbWl6ZWQgYW55dGltZSBzb29u
LiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ugd2UKLSAgICAg
ICAgLy8gZGVsYXkgZXZhbCBvcHRpbWl6YXRpb24gYnkgYSAqbG90Ki4KLSAgICAgICAgbV9zaG91
bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VD
YWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVz
ZSBjYWxsZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFJlY3Vyc2l2ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVkLgotICAgIFJlY3Vyc2lv
bkNoZWNrRnVuY3RvciBmdW5jdG9yKGNhbGxlckZyYW1lLCB0aGlzLCBPcHRpb25zOjptYXhpbXVt
SW5saW5pbmdEZXB0aCgpKTsKLSAgICB2bSgpLT50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rv
cik7Ci0KLSAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNlKCkpIHsKLSAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5n
IFNBQkkgYmVjYXVzZSByZWN1cnNpb24gd2FzIGRldGVjdGVkLlxuIik7Ci0gICAgICAgIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSA9PSBERkc6
OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgewotICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyb20g
IiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpLCAiIHRv
ICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0eSBsZXZlbCBpcyBub3Qgc2V0Llxu
Iik7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChjYW5Db21waWxlKGNh
bGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgIGRhdGFM
b2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgdGhlIGNhbGxlciBpcyBub3QgYSBERkcgY2Fu
ZGlkYXRlLlxuIik7Ci0gICAgCi0gICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSNlbmRpZgotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4
KCkpOwotICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotI2Vsc2UKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi0jaWYgRU5BQkxFKEpJVCkK
LXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMpCi17Ci0gICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gc3RkOjptYWtl
X3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVlX3B0cjxS
ZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVnaXN0ZXJBdE9mZnNldExpc3QpCi17Ci0gICAgbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0TGlzdCk7Ci19Ci0gICAg
Ci1zdGF0aWMgc2l6ZV90IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKHNp
emVfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
cHVSZWdpc3RlclNpemUgPSBzaXplb2Yodm9pZCopOwotICAgIHJldHVybiAoV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIGNhbGxlZVNhdmVSZWdpc3RlcnMgKiBjcHVS
ZWdpc3RlclNpemUpIC8gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0KLX0KLQotc2l6ZV90IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCi17Ci0g
ICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG51bWJlck9m
TExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci19Ci0KLXNpemVfdCBDb2RlQmxv
Y2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCi17Ci0gICAgcmV0dXJuIHJv
dW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cy0+c2l6ZSgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmNvdW50UmVvcHRpbWl6YXRpb24oKQot
ewotICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAgICBpZiAobV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4KCkpCi0gICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25zOjpy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6
Om51bWJlck9mREZHQ29tcGlsZXMoKQotewotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXRUeXBlKCkpKTsKLSAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7Ci0gICAg
ICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKLSAgICAgICAgICAgIHJldHVybiAxMDAw
MDAwOwotICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAwKSAr
IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Ci0gICAgfQotICAgIHJldHVybiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkgPyAxIDogMCkgKyBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotfQotCi1pbnQzMl90IENvZGVCbG9jazo6Y29k
ZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoY29kZVR5cGUoKSA9
PSBFdmFsQ29kZSkKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV2YWxUaHJlc2hvbGRNdWx0aXBs
aWVyKCk7Ci0gICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWRvdWJsZSBDb2RlQmxvY2s6Om9wdGlt
aXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKQotewotICAgIC8vIFRoaXMgZXhwcmVzc2lv
biBhcmlzZXMgZnJvbSBkb2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9mCi0gICAgLy8KLSAgICAv
LyBGW3hfXSA9OiBhICogU3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsgZAotICAgIC8vCi0gICAg
Ly8gYWdhaW5zdCB0aGUgZGF0YSBwb2ludHM6Ci0gICAgLy8KLSAgICAvLyAgICB4ICAgICAgIEZb
eF9dCi0gICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFsbGVzdCByZWFzb25hYmxl
IGNvZGUgYmxvY2spCi0gICAgLy8gICAyMDAgICAgICAgMS4wICAgICAgICAgICh0eXBpY2FsIHNt
YWxsLWlzaCBjb2RlIGJsb2NrKQotICAgIC8vICAgMzIwICAgICAgIDEuMiAgICAgICAgICAoc29t
ZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBvcHRpbWl6ZSkKLSAgICAv
LyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJlIHRo
YXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKLSAgICAvLyAgNDAwMCAgICAgICA1LjUgICAg
ICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRoZSBmdW5jdGlvbiB0byBj
b252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQotICAgIC8vIDEwMDAwICAg
ICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKLSAgICAvLwotICAgIC8vIEkgYWNo
aWV2ZSB0aGUgbWluaW1pemF0aW9uIHVzaW5nIHRoZSBmb2xsb3dpbmcgTWF0aGVtYXRpY2EgY29k
ZToKLSAgICAvLwotICAgIC8vIE15RnVuY3Rpb25UZW1wbGF0ZVt4XywgYV8sIGJfLCBjXywgZF9d
IDo9IGEqU3FydFt4ICsgYl0gKyBBYnNbYyp4XSArIGQKLSAgICAvLwotICAgIC8vIHNhbXBsZXMg
PSB7ezEwLCAwLjl9LCB7MjAwLCAxfSwgezMyMCwgMS4yfSwgezEyNjgsIDV9LCB7NDAwMCwgNS41
fSwgezEwMDAwLCA2fX0KLSAgICAvLwotICAgIC8vIHNvbHV0aW9uID0gCi0gICAgLy8gICAgIE1p
bmltaXplW1BsdXMgQEAgKChNeUZ1bmN0aW9uVGVtcGxhdGVbI1tbMV1dLCBhLCBiLCBjLCBkXSAt
ICNbWzJdXSleMiAmIC9AIHNhbXBsZXMpLAotICAgIC8vICAgICAgICAge2EsIGIsIGMsIGR9XVtb
Ml1dCi0gICAgLy8KLSAgICAvLyBBbmQgdGhlIGNvZGUgYmVsb3cgKHRvIGluaXRpYWxpemUgYSwg
YiwgYywgZCkgaXMgZ2VuZXJhdGVkIGJ5OgotICAgIC8vCi0gICAgLy8gUHJpbnRbImNvbnN0IGRv
dWJsZSAiIDw+IFRvU3RyaW5nWyNbWzFdXV0gPD4gIiA9ICIgPD4KLSAgICAvLyAgICAgSWZbI1tb
Ml1dIDwgMC4wMDAwMSwgIjAuMCIsIFRvU3RyaW5nWyNbWzJdXV1dIDw+ICI7Il0gJiAvQCBzb2x1
dGlvbgotICAgIC8vCi0gICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUgZm9sbG93aW5nIHRvIGJl
IHRydWU6Ci0gICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hlYXAgdG8gb3B0aW1pemUg
YW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCi0gICAgLy8gICB0aGFuIGxhdGVy
LgotICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2ZSB0byBvcHRpbWl6ZSBh
bmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAotICAgIC8vICAgYW5kIHNvbWV0aW1l
cyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5ldmVyIG9wdGltaXplIHRo
ZW0uCi0gICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5vdCB0b3RhbGx5IGxpbmVh
ciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQotICAgIC8vICAgREZHIGluY3VycyBzb21l
IGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0aGVyZSBpcyBlbm91Z2gg
c2xvcAotICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gaW5zdHJ1Y3Rpb24gY291
bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAotICAgIC8vICAgdGhhdCBmb3IgdGhv
c2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hvdWxkIG5vdCBoYXZlIGEg
c3Ryb25nCi0gICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9sZC4KLSAgICAvLwotICAg
IC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93IHRvIGFjaGlldmUgdGhl
bTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKLSAgICAvLyBleGFtcGxlIHdoZXJlIHRoZSBo
ZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3ViZSB3aXRoIGluc3RydWN0
aW9uCi0gICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQgZWFybHkgYXMgaXQgc2hv
dWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKLSAgICAvLyB0b3RhbGx5IHdy
b25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbiBjb3VudCAxMjY4LCB3
aGljaCB3YXMgZXhwZW5zaXZlCi0gICAgLy8gdG8gY29tcGlsZSBhbmQgZGlkbid0IHJ1biBvZnRl
biBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGluaW9uKSwgYW5kCi0gICAg
Ly8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRoYXQgcmVwcmVzZW50ZWQg
bXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCi0gICAgLy8gaGV1cmlzdGljcyBzaG91bGQgZG8gZm9y
IHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCi0gICAgLy8KLSAgICAvLyBUaGUgZXhwcmVz
c2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFyb3NlIGJlY2F1c2UgSSBz
dGFydGVkIHdpdGggYW4KLSAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFuZCB0aGVuIGRpZCB0d28g
dGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBlbnN1cmUKLSAgICAvLyB0
aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0aXZlIHZhbHVlIG9mIGMg
KHdoaWNoIHdvdWxkIHJlc3VsdCBpbgotICAgIC8vIHRoZSBmdW5jdGlvbiB0dXJuaW5nIG92ZXIg
YW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJldyBpbiBhIFNxcnQKLSAg
ICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0aW9uIHRoYXQgdGhlIGZ1
bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQotICAgIC8vIHRvIHNtYWxsIGNoYW5nZXMg
aW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3aGVuIHggZ2V0cyBsYXJn
ZS4KLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0IGVzc2VudGlhbGx5IGVs
aW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQotICAgIC8vIGV4cHJlc3Npb24gKGMg
PT0gMC4wKS4KLSAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0OwotICAgIGNvbnN0IGRvdWJs
ZSBiID0gMS4wMjQwNjsKLSAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsKLSAgICBjb25zdCBkb3Vi
bGUgZCA9IDAuODI1OTE0OwotICAgIAotICAgIGRvdWJsZSBpbnN0cnVjdGlvbkNvdW50ID0gdGhp
cy0+aW5zdHJ1Y3Rpb25Db3VudCgpOwotICAgIAotICAgIEFTU0VSVChpbnN0cnVjdGlvbkNvdW50
KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIgd2UgaGF2ZSBhbiBpbnN0
cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBqdXN0IHJldHVybiB0aGUgdmFsdWUgb2Yg
ZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCi0gICAgCi0gICAgZG91YmxlIHJlc3VsdCA9IGQgKyBh
ICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1Y3Rpb25Db3VudDsKLSAg
ICAKLSAgICByZXN1bHQgKj0gY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCk7Ci0gICAgCi0g
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAg
ICAgICAgKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9uQ291bnQs
Ci0gICAgICAgICAgICAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJlc3VsdCwg
IiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLAotICAgICAgICAgICAgIlxuIik7
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGNsaXBUaHJl
c2hvbGQoZG91YmxlIHRocmVzaG9sZCkKLXsKLSAgICBpZiAodGhyZXNob2xkIDwgMS4wKQotICAg
ICAgICByZXR1cm4gMTsKLSAgICAKLSAgICBpZiAodGhyZXNob2xkID4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKLSAgICAKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50MzJfdD4odGhyZXNob2xkKTsKLX0KLQotaW50MzJfdCBDb2RlQmxvY2s6
OmFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKLXsKLSAgICBy
ZXR1cm4gY2xpcFRocmVzaG9sZCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihkZXNpcmVk
VGhyZXNob2xkKSAqCi0gICAgICAgIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3Io
KSAqCi0gICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkpKTsKLX0KLQot
Ym9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKLXsK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBE
Rkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSkgewotICAgICAgICBpZiAod29y
a2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleSh0aGlzLCBERkc6OkRG
R01vZGUpKQotICAgICAgICAgICAgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKLSAgICAg
ICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgcmV0dXJuIG1faml0RXhlY3V0
ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Ci19Ci0KLXZvaWQg
Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKLXsKLSAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIG5leHQg
aW52b2NhdGlvbi5cbiIpOwotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xk
KDAsIHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNvb24o
KQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRo
aXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwotICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6Om9wdGlt
aXplQWZ0ZXJXYXJtVXAoKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC5cbiIpOwotI2lm
IEVOQUJMRShERkdfSklUKQotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xk
KAotICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6
b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgbG9uZyB3YXJt
LXVwLlxuIik7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9qaXRFeGVjdXRlQ291bnRlci5z
ZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCB0aGlzKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvZGVCbG9jazo6b3B0aW1pemVTb29uKCkKLXsKLSAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIHNvb24uXG4i
KTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZCgKLSAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT3B0aW1pemVTb29uKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6
Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpCi17Ci0gICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogRm9yY2luZyBzbG93
IHBhdGggY29uY3VycmVudGx5LlxuIik7Ci0gICAgbV9qaXRFeGVjdXRlQ291bnRlci5mb3JjZVNs
b3dQYXRoQ29uY3VycmVudGx5KCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLXZvaWQgQ29k
ZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQotewotICAgIEpJVENvZGU6OkpJVFR5cGUgdHlwZSA9
IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewotICAg
ICAgICBkYXRhTG9nKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUgYnV0
IGhhdmUgIiwgdHlwZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogdGhlUmVwbGFjZW1lbnQgPSByZXBsYWNl
bWVudCgpOwotICAgIGlmICgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgIT0gKHRo
ZVJlcGxhY2VtZW50ICE9IHRoaXMpKSB7Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IHdlIGhh
dmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKLSAgICAgICAgaWYgKHRoZVJlcGxhY2Vt
ZW50ID09IHRoaXMpCi0gICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUgb3VyIG93biByZXBsYWNl
bWVudC5cbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCJvdXIgcmVwbGFj
ZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAodGhlUmVwbGFjZW1lbnQpLCAiXG4iKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChy
ZXN1bHQpIHsKLSAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUo
KSkpOwotICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICBkb250T3B0aW1pemVBbnl0aW1l
U29vbigpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgot
ICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGltaXplQW55dGltZVNvb24oKSBidXQg
d2UgY2Fubm90IGJlY2F1c2UKLSAgICAgICAgLy8gZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQgd29uJ3QKLSAgICAgICAgLy8gbmVj
ZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywgd2UgbWFrZSBzdXJlIHRoYXQgZXZlbiBp
ZiB0aGF0Ci0gICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQotICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCi0gICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKLSAgICAgICAg
Ly8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgotICAgICAgICBjb3VudFJlb3B0aW1p
emF0aW9uKCk7Ci0gICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgcmVzdWx0OiAiLCBzdGF0
aWNfY2FzdDxpbnQ+KHJlc3VsdCksICJcbiIpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLSNlbmRpZgotICAgIAotdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4
aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQotewotICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgLy8gQ29tcHV0ZSB0
aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhpcyBpcyBjYWxsZWQgaW5m
cmVxdWVudGx5Ci0gICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQgdXMuCi0g
ICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKLSAgICBmb3IgKHVuc2lnbmVk
IG4gPSBiYXNlbGluZVZlcnNpb24oKS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgbi0t
OykgewotICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQgPDwgMTsKLSAgICAgICAg
aWYgKG5ld1Jlc3VsdCA8IHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIHJlc3VsdCA9IG5ld1Jlc3VsdDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdWludDMyX3QgQ29kZUJsb2NrOjpleGl0Q291
bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCi17Ci0gICAgcmV0dXJuIGFkanVzdGVkRXhp
dENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uKCkg
KiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSk7Ci19Ci0KLXVpbnQzMl90IENvZGVCbG9j
azo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpCi17Ci0gICAg
cmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZv
clJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigp
KTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3coKQotewotICAgIHJl
dHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3co
KQotewotICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9sZEZv
clJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKLX0KLSNlbmRpZgotCi1BcnJheVByb2ZpbGUqIENv
ZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
cnJheVByb2ZpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FycmF5UHJvZmlsZXNb
aV0uYnl0ZWNvZGVPZmZzZXQoKSA9PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIHJldHVy
biAmbV9hcnJheVByb2ZpbGVzW2ldOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotQXJyYXlQ
cm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVy
biBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLUFycmF5UHJv
ZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIG1fYXJyYXlQcm9maWxlcy5hcHBl
bmQoQXJyYXlQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0dXJuICZtX2FycmF5UHJv
ZmlsZXMubGFzdCgpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJyYXlQcm9m
aWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGFkZEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVj
b2RlT2Zmc2V0KTsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRkQXJyYXlQ
cm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCi17Ci0gICAgQXJyYXlQcm9maWxlKiByZXN1bHQgPSBnZXRBcnJheVByb2ZpbGUo
bG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICByZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZz
ZXQpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZ2V0T3JBZGRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRl
Y29kZU9mZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLVZlY3RvcjxDb2RlT3JpZ2lu
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIENvZGVCbG9jazo6Y29kZU9yaWdpbnMoKQotewot
ICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5jb2RlT3JpZ2luczsKLX0KLQotc2l6
ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJz
LnNpemUoKTsKLX0KLQotY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVyKGlu
dCBpbmRleCkgY29uc3QKLXsKLSAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1fdW5s
aW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQotICAgICAgICByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9u
KCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107Ci19Ci0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0
aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpCi17Ci0gICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1
Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4gdmFsdWUgcHJvZmlsZXMg
YXJlIGZ1bGwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRG
cm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9IHBy
b2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7Ci0gICAgICAgIGlmIChudW1TYW1wbGVzID4g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCi0gICAgICAgICAgICBudW1TYW1wbGVzID0g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJvZmlsZXMg
dGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KLSAgICAgICAg
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOwotICAgICAgICBpZiAocHJv
ZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKLSAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUt
Pm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKLSAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
bV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhsb2Nr
ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9ucygpCi17Ci0gICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZhbHVl
MjsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoaWdub3JlZFZhbHVl
MSwgaWdub3JlZFZhbHVlMik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVBy
ZWRpY3Rpb25zKCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7IGktLTsp
Ci0gICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyLCB0aGlzKTsKLSAgICAKLSAgICAvLyBEb24ndCBjb3VudCB0aGVzZSBlaXRoZXIsIGZvciBz
aW1pbGFyIHJlYXNvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXNb
aV0udXBkYXRlSW5kZXhpbmdUeXBlKCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQ
cmVkaWN0aW9ucygpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChtX293bmVy
RXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwot
I2VuZGlmCi0gICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKLSAgICB1cGRh
dGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCi17Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4uLlxuIik7Ci0KLSAgICBp
ZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXph
dGlvbkRlbGF5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHVwZGF0ZUFsbEFy
cmF5UHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXM7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
czsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZMaXZl
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKLQot
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKLSAgICAgICAgZGF0YUxvZ0YoCi0gICAg
ICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1IC8gJXUpXG4i
LAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIG51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCi0gICAgICAg
ICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAotICAgICAgICAgICAgbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgKiBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgfQotCi0gICAgaWYgKCghbnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUxp
dmVuZXNzUmF0ZSgpKQotICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkg
fHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9wdGlvbnM6OmRl
c2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1pbmltdW1P
cHRpbWl6YXRpb25EZWxheSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBBU1NF
UlQobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4
X3Q+OjptYXgoKSk7Ci0gICAgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIrKzsKLSAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi12b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCi17Ci0gICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQo
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAK
LSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOwotICAgIAotICAg
IHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHsKLSAgICAg
ICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIERGRzo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Ci0gICAg
ICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxv
Y2spOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmIEVOQUJMRShGVExf
SklUKQotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5v
IGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBzaW5jZSB0aGUgRlRMOjpK
SVRDb2RlOjpvc3JFeGl0Ci0gICAgICAgIC8vIHZlY3RvciBjb250YWlucyBhIHRvdGFsbHkgZGlm
ZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5zIHRvIGJlaGF2ZSBsaWtlCi0gICAgICAg
IC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KLSAgICAgICAgRlRMOjpKSVRDb2RlKiBqaXRDb2Rl
ID0gbV9qaXRDb2RlLT5mdGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZUTDo6T1NSRXhpdCYg
ZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9G
SUxFKQotdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKLXsKLSAgICBkYXRhTG9n
KCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKLSAgICAg
ICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBBU1NF
UlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgICAgICBkYXRhTG9n
RigiICAgYXJnID0gJXU6ICIsIGkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRhdGFM
b2dGKCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAg
aWYgKCFwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSAmJiBwcm9maWxlLT5tX3ByZWRpY3Rpb24g
PT0gU3BlY05vbmUpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCI8ZW1wdHk+XG4iKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHByb2ZpbGUtPmR1bXAoV1RGOjpk
YXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAgfQotICAgIGRhdGFMb2co
IlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBS
YXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGUoaSk7Ci0gICAgICAgIGRh
dGFMb2dGKCIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJv
ZmlsZS0+bV9jb3VudGVyKTsKLSAgICB9Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFZFUkJPU0VfVkFM
VUVfUFJPRklMRSkKLQotdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQot
ewotICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rOgotICAgICAgICByZXR1cm4gTExJbnQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlz
KTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAg
ICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBjYXNlIEpJVENvZGU6OkRG
R0pJVDoKLSAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAgcmV0dXJuIGppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmZyYW1lUmVnaXN0ZXJDb3VudDsKLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgQ29kZUJsb2Nr
OjpzdGFja1BvaW50ZXJPZmZzZXQoKQotewotICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChmcmFtZVJlZ2lzdGVyQ291bnQoKSAtIDEpLm9mZnNldCgpOwotfQotCi1zaXplX3QgQ29k
ZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQotewotICAgIC8vIFRoaXMgd2lsbCBi
ZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fdm0gb3Ig
dGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gSXQncyBPSyB0
byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKLSAgICAvLyBtYXR0ZXIgaXMgdGhl
IHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBzbG93IHBhdGggaXMgdHJpZ2dl
cmVkLgotICAgIGlmICghbV92bSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKCEq
bV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUKQotICAg
ICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGljdGlvbiBhcyB3ZSdsbCBn
ZXQuCi0gICAgCi0gICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4gYSBzaXplIHRoYXQgd2ls
bCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCi0gICAgZG91YmxlIG11bHRp
cGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVK
SVQtPm1lYW4oKSArCi0gICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdv
cmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKLSAgICAKLSAgICAvLyBCZSBw
YXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMuIFNpbGVudGx5IGRvaW5n
IHRoZSAid3JvbmciIHRoaW5nCi0gICAgLy8gaGVyZSBpcyBPSywgc2luY2UgdGhpcyB3aG9sZSBt
ZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KLSAgICBpZiAobXVsdGlwbGllciA8IDAgfHwgbXVs
dGlwbGllciA+IDEwMDApCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGRvdWJsZSBkb3Vi
bGVSZXN1bHQgPSBtdWx0aXBsaWVyICogbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOwotICAgIAotICAg
IC8vIEJlIGV2ZW4gbW9yZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IHZhbHVlcyB0aGF0IHdv
bid0IGZpdCBpbnRvIGEgc2l6ZV90LiBJZgotICAgIC8vIHRoZSBmdW5jdGlvbiBpcyBzbyBodWdl
IHRoYXQgd2UgY2FuJ3QgZXZlbiBmaXQgaXQgaW50byB2aXJ0dWFsIG1lbW9yeSB0aGVuIHdlCi0g
ICAgLy8gc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBvdGhlciBndWFyZHMgaW4gcGxhY2UgdG8g
cHJldmVudCB1cyBmcm9tIGV2ZW4gZ2V0dGluZwotICAgIC8vIHRvIHRoaXMgcG9pbnQuCi0gICAg
aWYgKGRvdWJsZVJlc3VsdCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGRv
dWJsZVJlc3VsdCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlEIG9w
Y29kZUlEKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJl
dGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygp
LmJlZ2luKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9ucygp
LnNpemUoKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0
ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgc3dpdGNoIChpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUu
b3Bjb2RlKSkgewotI2RlZmluZSBERUZJTkVfT1AoY3VyT3Bjb2RlLCBsZW5ndGgpICAgICAgICBc
Ci0gICAgICAgIGNhc2UgY3VyT3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGlmIChjdXJPcGNvZGUgPT0gb3Bjb2RlSUQpICAgICAgXAotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBieXRlY29kZU9mZnNldCAr
PSBsZW5ndGg7ICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgRk9SX0VB
Q0hfT1BDT0RFX0lEKERFRklORV9PUCkKLSN1bmRlZiBERUZJTkVfT1AKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2NvbnN0YW50UmVnaXN0ZXJzW2ld
LmdldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KG1fY29u
c3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0g
c3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwotICAgICAgICAgICAgZm9yIChhdXRvIHB0ciA9IHN5
bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAgICAgICAg
ICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9mZnNldCh2aXJ0dWFsUmVn
aXN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsg
ZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAwCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwdHItPmtleS5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSB0aGlz
UmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidGhpcyIpOwotICAgIGlm
ICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRvQXJndW1lbnQoKSk7Ci0K
LSAgICByZXR1cm4gIiI7Ci19Ci0KLVZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp2YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zKClb
Ynl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBvcGNvZGVM
ZW5ndGgob3Bjb2RlSUQpOwotICAgIHJldHVybiBpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNl
dCArIGxlbmd0aCAtIDFdLnUucHJvZmlsZTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRl
KCkKLXsKLSAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7IC8vIENv
bXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENvZGVCbG9j
ayBmb290cHJpbnQuCi0gICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5l
c3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKLSAgICAKLSAgICBpZiAobGl2
ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2Fs
cykpIHsKLSAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICBkYXRhTG9n
KCIgICAgV3JvbmcgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0IVxuIik7Ci0gICAgICAgIGRhdGFM
b2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIg
ICAgQml0IGNvdW50OiAiLCBsaXZlQXRIZWFkLm51bUJpdHMoKSwgIlxuIik7Ci0gICAgICAgIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbnVtQ2FsbGVlTG9jYWxzOyBpLS07KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsaXZl
QXRIZWFkW2ldKSB7Ci0gICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAg
ICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgIiwgcmVnLCAiIGlzIGV4cGVjdGVkIHRvIGJl
IGRlYWQuXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhl
YWQsICJcbiIpOwotICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKQot
ewotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZSBpbiAiLCAqdGhpcywgIjpcbiIpOwot
ICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlk
RmFpbCgpCi17Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkdW1wQnl0ZWNvZGUoKTsKLSAgICBk
YXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZS5cbiIpOwotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjphZGRC
cmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQotewotICAgIG1fbnVtQnJlYWtwb2lu
dHMgKz0gbnVtQnJlYWtwb2ludHM7Ci0gICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwotICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgamV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwotfQotCi12b2lk
IENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1vZGUp
Ci17Ci0gICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0ZXBwaW5n
TW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCi0gICAg
ICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7Ci19
Ci0KLVJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5
dGVjb2RlT2Zmc2V0KQotewotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5hcHBlbmQoUmFyZUNhc2VQ
cm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0dXJuICZtX3JhcmVDYXNlUHJvZmlsZXMu
bGFzdCgpOwotfQotCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVybiB0cnlC
aW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICBtX3JhcmVDYXNlUHJv
ZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAg
ICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7Ci19Ci0KLXVuc2lnbmVkIENvZGVC
bG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVP
ZmZzZXQpCi17Ci0gICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgIGlmIChwcm9maWxlKQotICAg
ICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOwotICAgIHJldHVybiAwOwotfQotCi1Bcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5
dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVybiBhcml0aFByb2ZpbGVGb3JQQyhpbnN0cnVjdGlv
bnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1Bcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6YXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qIHBjKQotewotICAgIGF1dG8gb3Bj
b2RlSUQgPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUpOwot
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmcGNbM10udS5vcGVyYW5kKTsKLSAgICBj
YXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNhc2Ugb3BfYml0eG9yOgot
ICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNhc2Ugb3Bfc3ViOgotICAg
IGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmlsZSo+
KCZwY1s0XS51Lm9wZXJhbmQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIENvZGVCbG9jazo6Y291bGRUYWtlU3Bl
Y2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBpZiAoIWhhc0Jhc2VsaW5l
SklUUHJvZmlsaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBcml0aFByb2ZpbGUq
IHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7
Ci0gICAgaWYgKCFwcm9maWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBy
b2ZpbGUtPnRvb2tTcGVjaWFsRmFzdFBhdGgoKTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1ERkc6
OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCi17Ci0gICAgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOwotICAg
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LSNlbmRpZgotCi12b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JD
b250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0
aW9ucykKLXsKLSAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKCktPmhhc09wUHJvZmlsZUNvbnRy
b2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25zdCBWZWN0
b3I8c2l6ZV90PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2RlQmxvY2soKS0+b3BQcm9m
aWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMCwg
b2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7IGkgPCBvZmZzZXRzTGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyBpcyBl
bWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMgYmxvY2ssIGZpbmRpbmcgCi0g
ICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IHdpbGwgZ2l2ZSB1cyB0
aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4KLSAgICAgICAgc2l6ZV90IHN0
YXJ0SWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2ldOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgp
LT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4XS51Lm9wY29k
ZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwotICAgICAgICBpbnQgYmFzaWNCbG9ja1N0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgYmFzaWNCbG9ja0VuZE9mZnNldDsKLSAgICAgICAgaWYgKGkgKyAxIDwgb2Zmc2V0c0xl
bmd0aCkgewotICAgICAgICAgICAgc2l6ZV90IGVuZElkeCA9IGJ5dGVjb2RlT2Zmc2V0c1tpICsg
MV07Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVfY29udHJv
bF9mbG93KTsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnNb
ZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhlIGNsb3Np
bmcgYnJhY2UuCi0gICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6Om1pbihi
YXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21lIHN0YXJ0
IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMgdGhlIG9m
ZnNldCBiZWZvcmUuCi0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNoZWNr
IGFsbG93cyBmb3IgdGhlIHNhbWUgdGV4dHVhbCBKYXZhU2NyaXB0IGJhc2ljIGJsb2NrIHRvIGhh
dmUgaXRzIGJ5dGVjb2RlIGVtaXR0ZWQgbW9yZQotICAgICAgICAvLyB0aGFuIG9uY2UgYW5kIHN0
aWxsIHBsYXkgbmljZSB3aXRoIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuIFdoZW4gYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0IGlzIGxhcmdlciB0aGFuIAotICAgICAgICAvLyBiYXNpY0Jsb2NrRW5k
T2Zmc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIGhhcyBlbWl0
dGVkIGNvZGUgZm9yIHRoZSBzYW1lIEFTVCBub2RlIAotICAgICAgICAvLyBtb3JlIHRoYW4gb25j
ZSAoZm9yIGV4YW1wbGU6IEZvckluTm9kZSwgRmluYWxseSBibG9ja3MgaW4gVHJ5Tm9kZSwgZXRj
KS4gVGhvdWdoIHRoZXNlIGFyZSBkaWZmZXJlbnQgCi0gICAgICAgIC8vIGJhc2ljIGJsb2NrcyBh
dCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoZXkgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1lIHRl
eHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIEphdmFTY3JpcHQgCi0gICAgICAgIC8vIHByb2dyYW0u
IFRoZSBjb25kaXRpb246IAotICAgICAgICAvLyAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2lj
QmxvY2tTdGFydE9mZnNldCkgCi0gICAgICAgIC8vIGlzIGVuY291bnRlcmVkIHdoZW4gb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3cgbGllcyBhY3Jvc3MgdGhlIGJvdW5kYXJ5IG9mIHRoZXNlIGR1cGxp
Y2F0ZWQgYnl0ZWNvZGUgYmFzaWMgCi0gICAgICAgIC8vIGJsb2NrcyBhbmQgdGhlIHRleHR1YWwg
b2Zmc2V0IGdvZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBkdXBsaWNhdGVkIGJsb2NrIGJhY2sgdG8g
dGhlIGJlZ2lubmluZy4gVGhlc2UgCi0gICAgICAgIC8vIHJhbmdlcyBhcmUgZHVtbXkgcmFuZ2Vz
IGFuZCBhcmUgaWdub3JlZC4gVGhlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgYmxvY2tzIHBv
aW50IHRvIHRoZSBzYW1lIAotICAgICAgICAvLyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSwgc28g
aWYgYW55IG9mIHRoZW0gZXhlY3V0ZSwgaXQgd2lsbCByZWNvcmQgdGhlIHNhbWUgdGV4dHVhbCBi
YXNpYyBibG9jayBpbiB0aGUgCi0gICAgICAgIC8vIEphdmFTY3JpcHQgcHJvZ3JhbSBhcyBleGVj
dXRpbmcuCi0gICAgICAgIC8vIEF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhpcyBzaXR1YXRpb24g
bG9va3MgbGlrZToKLSAgICAgICAgLy8gajogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgKGZyb20g
ai0+aywgd2UgaGF2ZSBiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0
KQotICAgICAgICAvLyAuLi4KLSAgICAgICAgLy8gazogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cg
KHdlIHdhbnQgdG8gc2tpcCBvdmVyIHRoZSBqLT5rIGJsb2NrIGFuZCBzdGFydCBmcmVzaCBhdCBv
ZmZzZXQgayBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmFzaWMgYmxvY2sgay0+bSkuCi0gICAgICAg
IC8vIC4uLgotICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdwotICAgICAgICBp
ZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgewotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ugc2hvdWxk
IG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVCbG9jay4K
LSAgICAgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFzaWNCbG9ja0xvY2F0
aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQmFzaWNCbG9ja0xvY2F0
aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmdl
dEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwg
YmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsKLQotICAgICAgICAv
LyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0aGluIHRoZSByYW5nZTog
W2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0KLSAgICAgICAgLy8g
YW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZzZXRzIGFzIGdhcHMgaW4g
dGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgotICAgICAgICAvLyBUaGlzIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dCBvZiBhIEphdmFTY3JpcHQg
cHJvZ3JhbSwgCi0gICAgICAgIC8vIGZ1bmN0aW9uIGxpdGVyYWxzIGZvcm0gbmV3IGJhc2ljIGJs
b2NrcyBib3VuZGFyaWVzLCBidXQgdGhleSBhcmVuJ3QgcmVwcmVzZW50ZWQgCi0gICAgICAgIC8v
IGluc2lkZSB0aGUgQ29kZUJsb2NrJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgotICAgICAgICBhdXRv
IGluc2VydEZ1bmN0aW9uR2FwcyA9IFtiYXNpY0Jsb2NrTG9jYXRpb24sIGJhc2ljQmxvY2tTdGFy
dE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0gKGNvbnN0IFdyaXRlQmFycmllcjxGdW5jdGlv
bkV4ZWN1dGFibGU+JiBmdW5jdGlvbkV4ZWN1dGFibGUpIHsKLSAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0ID0g
ZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgICAgICBpbnQg
ZnVuY3Rpb25FbmQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7Ci0gICAg
ICAgICAgICBpZiAoZnVuY3Rpb25TdGFydCA+PSBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgJiYgZnVu
Y3Rpb25FbmQgPD0gYmFzaWNCbG9ja0VuZE9mZnNldCkKLSAgICAgICAgICAgICAgICBiYXNpY0Js
b2NrTG9jYXRpb24tPmluc2VydEdhcChmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkVuZCk7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRh
YmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25EZWNscykKLSAgICAgICAgICAgIGluc2VydEZ1
bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLSAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8
RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25FeHBycykKLSAgICAg
ICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLQotICAgICAgICBpbnN0cnVj
dGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2ljQmxvY2tMb2NhdGlvbiA9IGJhc2ljQmxvY2tMb2Nh
dGlvbjsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBD
VG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXAp
IAoteyAKLSAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwotfQotCi1PcHRp
b25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKLXsKLSAgICBpZiAo
bV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4g
Y29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCi0gICAgICAgICAg
ICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICB9Ci0KLSAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwotICAgICAgICBp
ZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Q29k
ZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7Ci0gICAgfQotCi0gICAgaWYgKE9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCi0gICAg
ICAgIHJldHVybiBjb2RlT3JpZ2luOwotCi0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKLQotT3B0aW9uYWw8dW5zaWduZWQ+IENvZGVCbG9jazo6Ynl0ZWNvZGVP
ZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0g
ICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0OwotICAgIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxTaXRlSW5k
ZXguYml0cygpOwotI2Vsc2UKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYml0
d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRzKCkpOwotICAgICAgICBi
eXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSNl
bmRpZgotICAgIH0gZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQgfHwgaml0VHlw
ZSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7Ci0gICAgICAgIENv
ZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKLSAgICAgICAgYnl0
ZWNvZGVPZmZzZXQgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSNlbHNlCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4gYnl0
ZWNvZGVPZmZzZXQ7Ci19Ci0KLWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50
MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRP
cHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBNaXhlZFRyaVN0YXRlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkOwotICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9s
ZCAqIDQ7Ci0gICAgY2FzZSBUcnVlVHJpU3RhdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQg
LyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNo
b2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQotewotICAgIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6
OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLX0KLQotdm9pZCBDb2RlQmxv
Y2s6OmppdFNvb24oKQotewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMp
OwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkKLXsKLSNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKLSAgICBkb3VibGUgbnVtQWRkcyA9IDAuMDsKLSAgICBkb3VibGUgdG90
YWxBZGRTaXplID0gMC4wOwotICAgIGRvdWJsZSBudW1NdWxzID0gMC4wOwotICAgIGRvdWJsZSB0
b3RhbE11bFNpemUgPSAwLjA7Ci0gICAgZG91YmxlIG51bU5lZ3MgPSAwLjA7Ci0gICAgZG91Ymxl
IHRvdGFsTmVnU2l6ZSA9IDAuMDsKLSAgICBkb3VibGUgbnVtU3VicyA9IDAuMDsKLSAgICBkb3Vi
bGUgdG90YWxTdWJTaXplID0gMC4wOwotCi0gICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJs
b2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBjb2RlQmxv
Y2stPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAgICAgICB0b3Rh
bEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3Ig
KEpJVE11bElDKiBtdWxJQyA6IGNvZGVCbG9jay0+bV9tdWxJQ3MpIHsKLSAgICAgICAgICAgIG51
bU11bHMrKzsKLSAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogY29kZUJsb2NrLT5t
X25lZ0lDcykgewotICAgICAgICAgICAgbnVtTmVncysrOwotICAgICAgICAgICAgdG90YWxOZWdT
aXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChKSVRT
dWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICBudW1TdWJz
Kys7Ci0gICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNvZGVTaXplKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICBoZWFwKCktPmZvckVh
Y2hDb2RlQmxvY2soY291bnRJQ3MpOwotCi0gICAgZGF0YUxvZygiTnVtIEFkZHM6ICIsIG51bUFk
ZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIEFkZCBzaXplIGluIGJ5dGVzOiAiLCB0b3Rh
bEFkZFNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgQWRkIHNpemU6ICIsIHRvdGFs
QWRkU2l6ZSAvIG51bUFkZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxv
ZygiTnVtIE11bHM6ICIsIG51bU11bHMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIE11bCBz
aXplIGluIGJ5dGVzOiAiLCB0b3RhbE11bFNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJh
Z2UgTXVsIHNpemU6ICIsIHRvdGFsTXVsU2l6ZSAvIG51bU11bHMsICJcbiIpOwotICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgZGF0YUxvZygiTnVtIE5lZ3M6ICIsIG51bU5lZ3MsICJcbiIpOwotICAg
IGRhdGFMb2coIlRvdGFsIE5lZyBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE5lZ1NpemUsICJcbiIp
OwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgTmVnIHNpemU6ICIsIHRvdGFsTmVnU2l6ZSAvIG51bU5l
Z3MsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiTnVtIFN1YnM6ICIs
IG51bVN1YnMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIFN1YiBzaXplIGluIGJ5dGVzOiAi
LCB0b3RhbFN1YlNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgU3ViIHNpemU6ICIs
IHRvdGFsU3ViU2l6ZSAvIG51bVN1YnMsICJcbiIpOwotCi0gICAgZGF0YUxvZygiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIpOwotI2VuZGlmCi19Ci0KLUJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyYgQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCi17Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7Ci0gICAgewotICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBpZiAoIW1fbGl2ZW5lc3NBbmFs
eXNpcykKLSAgICAgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcyA9IFdURk1vdmUoYW5hbHlzaXMp
OwotICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKLSAgICB9Ci19Ci0KLQogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZh
bENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODIyNCkJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oOjIwODIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
Mzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6
d2FyaWNoQHV3YXRlcmxvby5jYT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5j
bHVkZSAiQnlWYWxJbmZvLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2lu
Y2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVj
b2RlT2Zmc2V0LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgorI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2Rl
TWFwLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRl
ICJFeGVjdXRpb25Db3VudGVyLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgor
I2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgi
CisjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiSklUTWF0aElDRm9yd2FyZHMuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIkxMSW50
Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIK
KyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlByb2Zp
bGVySmV0dGlzb25SZWFzb24uaCIKKyNpbmNsdWRlICJQcm9ncmFtRXhlY3V0YWJsZS5oIgorI2lu
Y2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgorI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIuaCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBDb2RlQmxvY2tTZXQ7Citj
bGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OworY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CitjbGFzcyBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3Q7CisKK3N0cnVjdCBBcml0aFByb2ZpbGU7CisKK3R5cGVkZWYgSGFz
aE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0
ZUhhc2g+IFN0dWJJbmZvTWFwOworCitlbnVtIFJlb3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3Vu
dFJlb3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1pemF0aW9uIH07CisKK2NsYXNzIENvZGVCbG9j
ayA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgZnJpZW5k
IGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKKyAgICBmcmllbmQgY2xhc3MgSklUOwor
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAgICBjbGFzcyBVbmNv
bmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7
IAorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAg
fTsKKworICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFr
UmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgfTsKKworcHVibGljOgorICAgIGVudW0gQ29weVBh
cnNlZEJsb2NrVGFnIHsgQ29weVBhcnNlZEJsb2NrIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlz
SW1tb3J0YWw7CisKKyAgICBERUNMQVJFX0lORk87CisKK3Byb3RlY3RlZDoKKyAgICBDb2RlQmxv
Y2soVk0qLCBTdHJ1Y3R1cmUqLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIp
OworICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgQ29kZUJsb2NrKFZNKiwg
U3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xv
YmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBDb3B5
UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiwgSlNTY29wZSopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpT
R2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVj
dD4gbV9nbG9iYWxPYmplY3Q7CisKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29k
ZUJsb2NrKCk7CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5nZXQoKTsgfQorCisgICAgQ1N0cmluZyBpbmZl
cnJlZE5hbWUoKSBjb25zdDsKKyAgICBDb2RlQmxvY2tIYXNoIGhhc2goKSBjb25zdDsKKyAgICBi
b29sIGhhc0hhc2goKSBjb25zdDsKKyAgICBib29sIGlzU2FmZVRvQ29tcHV0ZUhhc2goKSBjb25z
dDsKKyAgICBDU3RyaW5nIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdDsKKyAgICBDU3Ry
aW5nIHNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0OyAvLyBOb3QgcXVpdGUgdGhlIGFjdHVhbCBz
b3VyY2Ugd2UgcGFyc2VkOyB0aGlzIHdpbGwgZG8gdGhpbmdzIGxpa2UgcHJlZml4IHRoZSBzb3Vy
Y2UgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHJlaWZpZWQgc2lnbmF0dXJlLgorICAgIENTdHJpbmcg
c291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAvLyBBcyBzb3VyY2VDb2RlRm9yVG9vbHMoKSwg
YnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAg
ICB2b2lkIGR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mLCBKSVRDb2RlOjpKSVRUeXBl
KSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJh
bWV0ZXJzOyB9CisgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSk7CisKKyAg
ICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7
IH0KKworICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBh
cmFtZXRlcnM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0K
KworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQorICAgIHZvaWQgc2V0QWx0ZXJu
YXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiB2b2lkIGZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAg
ICAgIFZlY3RvcjxDb2RlQmxvY2sqLCA0PiBjb2RlQmxvY2tzOworICAgICAgICBjb2RlQmxvY2tz
LmFwcGVuZCh0aGlzKTsKKworICAgICAgICB3aGlsZSAoIWNvZGVCbG9ja3MuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBDb2RlQmxvY2sqIGN1cnJlbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2tzLnRh
a2VMYXN0KCk7CisgICAgICAgICAgICBmKGN1cnJlbnRDb2RlQmxvY2spOworCisgICAgICAgICAg
ICBpZiAoQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGN1cnJlbnRDb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpCisgICAgICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQoYWx0ZXJuYXRpdmUpOwor
ICAgICAgICAgICAgaWYgKENvZGVCbG9jayogb3NyRW50cnlCbG9jayA9IGN1cnJlbnRDb2RlQmxv
Y2stPnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgY29kZUJs
b2Nrcy5hcHBlbmQob3NyRW50cnlCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemF0aW9uRnJvbUlzQ29uc3RydWN0KG1faXNDb25zdHJ1
Y3Rvcik7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7
ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2
ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NworICAgIENvZGVCbG9jayog
YmFzZWxpbmVWZXJzaW9uKCk7CisKKyAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlND
ZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlz
aXRXZWFrbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNsZWFyVmlzaXRXZWFrbHlIYXNCZWVu
Q2FsbGVkKCk7CisKKyAgICB2b2lkIGR1bXBTb3VyY2UoKTsKKyAgICB2b2lkIGR1bXBTb3VyY2Uo
UHJpbnRTdHJlYW0mKTsKKworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKCk7CisgICAgdm9pZCBkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0mKTsKKyAgICB2b2lkIGR1bXBCeXRlY29kZSgKKyAgICAgICAg
UHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgY29uc3QgU3R1
YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxM
aW5rSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1bXBFeGNlcHRpb25IYW5kbGVycyhQcmludFN0cmVh
bSYpOworICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmVzKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyAgICB2b2lkIHByaW50U3RydWN0dXJlKFByaW50U3RyZWFtJiwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCk7CisKKyAgICB2b2lkIGR1
bXBNYXRoSUNTdGF0cygpOworCisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVy
biBtX2lzU3RyaWN0TW9kZTsgfQorICAgIEVDTUFNb2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1
cm4gaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZTsgfQorCisgICAg
aW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIub2Zmc2V0KCkgJiYgIW1faXNTdHJpY3RNb2Rl
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChpbmRleCku
aXNDZWxsKCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAgICB9CisKKyAgICBIYW5kbGVySW5m
byogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1
aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIEhhbmRsZXJJ
bmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVk
SGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgdm9pZCByZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9y
Q2FsbFNpdGUoQ2FsbFNpdGVJbmRleCk7CisgICAgdW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgdm9p
ZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgaW50JiBkaXZvdCwKKyAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQs
IHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKKworICAgIE9wdGlvbmFs
PHVuc2lnbmVkPiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgp
OworCisgICAgdm9pZCBnZXRTdHViSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
U3R1YkluZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRTdHViSW5mb01hcChTdHViSW5mb01h
cCYgcmVzdWx0KTsKKyAgICAKKyAgICB2b2lkIGdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOworICAgIHZvaWQgZ2V0
Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KTsKKworICAgIHZvaWQgZ2V0
QnlWYWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBCeVZhbEluZm9NYXAmIHJl
c3VsdCk7CisgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpOwor
ICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZv
KEFjY2Vzc1R5cGUpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqKTsK
KyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMq
IGFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhB
cml0aFByb2ZpbGUqKTsKKyAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHVi
SW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsgfQorICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5m
b3MuZW5kKCk7IH0KKyAgICAKKyAgICAvLyBPKG4pIG9wZXJhdGlvbi4gVXNlIGdldFN0dWJJbmZv
TWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25seSBpbnRlbmQgdG8gZ2V0IG9uZQorICAgIC8vIHN0
dWIgaW5mby4KKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogZmluZFN0dWJJbmZvKENvZGVPcmlnaW4p
OworCisgICAgQnlWYWxJbmZvKiBhZGRCeVZhbEluZm8oKTsKKworICAgIENhbGxMaW5rSW5mbyog
YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxM
aW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5iZWdpbigpOyB9CisgICAg
QmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KKworICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9u
IGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UK
KyAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ug
d2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQorICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2Fs
bExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KKyAgICBD
YWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CisgICAgCisgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4gd2Ugd2FudCB0byBy
ZWF0dGVtcHQgY29tcGlsaW5nIHNvbWV0aGluZyB3aXRoIHRoZSBiYXNlbGluZSBKSVQuIElkZWFs
bHkKKyAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIG5vdCBhZGQgZGF0YSB0byBDb2RlQmxv
Y2ssIGJ1dCBpbnN0ZWFkIGl0IHdvdWxkIHB1dCBpdHMgZGF0YSBpbnRvCisgICAgLy8gYSBuZXds
eSBjcmVhdGVkIEpJVENvZGUsIHdoaWNoIGNvdWxkIGJlIHRocm93biBhd2F5IGlmIHdlIGJhaWwg
b24gSklUIGNvbXBpbGF0aW9uLiBUaGVuIHdlCisgICAgLy8gd291bGQgYmUgYWJsZSB0byBnZXQg
cmlkIG9mIHRoaXMgc2lsbHkgZnVuY3Rpb24uCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkwNjEKKyAgICB2b2lkIHJlc2V0SklURGF0YSgp
OworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMo
KTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0
ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgbGlua0luY29taW5nUG9s
eW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUq
KTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4
ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7CisKKyAgICB2b2lkIHNl
dEpJVENvZGVNYXAoc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFw
KQorICAgIHsKKyAgICAgICAgbV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKKyAg
ICB9CisgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiopOworCisgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYg
cmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0dXJuQWRkcmVzcykgLSBpbnN0cnVjdGlvbnMoKS5i
ZWdpbigpOworICAgIH0KKworICAgIHR5cGVkZWYgSlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVjdGlv
bjsKKyAgICB0eXBlZGVmIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIFVucGFja2VkSW5z
dHJ1Y3Rpb25zOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnN0cnVjdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KKyAgICBSZWZDb3VudGVkQXJyYXk8SW5z
dHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQorICAg
IGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisKKyAgICBzaXplX3QgcHJlZGljdGVkTWFjaGlu
ZUNvZGVTaXplKCk7CisKKyAgICBib29sIHVzZXNPcGNvZGUoT3Bjb2RlSUQpOworCisgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNp
emUoKTsgfQorCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lh
bGl6YXRpb25LaW5kKCkpCisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudCgpOworICAgIAor
ICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOworICAgICAgICBoZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNvZGUtPnNpemUoKSk7CisgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxz
byBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKyAg
ICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBq
aXRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBqaXRD
b2RlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRDb2Rl
KTsgfQorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLmdldCgpOworICAgICAgICBXVEY6OmxvYWRM
b2FkRmVuY2UoKTsKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSByZXN1bHQgPSBKSVRDb2RlOjpq
aXRUeXBlRm9yKGppdENvZGUpOworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsgLy8gVGhp
cyBwcm9iYWJseSBpc24ndCBuZWVkZWQuIE9oIHdlbGwsIHBhcmFub2lhIGlzIGdvb2QuCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2Zp
bGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKKworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNvbXB1dGVDYXBh
YmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwo
KTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PERGRzo6Q2FwYWJpbGl0eUxldmVsPihtX2NhcGFiaWxpdHlMZXZlbFN0
YXRlKTsgfQorCisgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRU
eXBlIHR5cGVUb1JlcGxhY2UpOworICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsg
Ly8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklUVHlwZQorI2VuZGlmCisKKyAgICB2b2lkIGpl
dHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlID0gRG9u
dENvdW50UmVvcHRpbWl6YXRpb24sIGNvbnN0IEZpcmVEZXRhaWwqID0gbnVsbHB0cik7CisgICAg
CisgICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CisgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPiht
X293bmVyRXhlY3V0YWJsZS5nZXQoKSk7IH0KKworICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJu
IG1fdm07IH0KKworICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0K
KworICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dXNl
c0V2YWwoKTsgfQorCisgICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZVJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNjb3BlUmVnaXN0ZXIuaXNMb2Nh
bCgpIHx8ICFzY29wZVJlZ2lzdGVyLmlzVmFsaWQoKSk7CisgICAgICAgIG1fc2NvcGVSZWdpc3Rl
ciA9IHNjb3BlUmVnaXN0ZXI7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsKKyAg
ICB9CisgICAgCisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvZGVUeXBlPihtX2NvZGVUeXBlKTsKKyAgICB9CisKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgcHV0QnlJZENvbnRleHQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRXZhbENvZGUpCisgICAgICAgICAgICByZXR1cm4gUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkRXZhbDsKKyAgICAgICAgcmV0dXJuIFB1dFByb3BlcnR5U2xv
dDo6UHV0QnlJZDsKKyAgICB9CisKKyAgICBTb3VyY2VQcm92aWRlciogc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBzb3VyY2VPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZU9mZnNldDsgfQorICAgIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0OyB9CisK
KyAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmp1bXBUYXJnZXQoaW5k
ZXgpOyB9CisKKyAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzID49IDApOworICAgICAgICBBU1NFUlQobV9hcmd1
bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUo
KTsKKyAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNp
Z25lZCBhcmd1bWVudEluZGV4KQorICAgIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQg
PSAmbV9hcmd1bWVudFZhbHVlUHJvZmlsZXNbYXJndW1lbnRJbmRleF07CisgICAgICAgIEFTU0VS
VChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJu
IG1fdmFsdWVQcm9maWxlcy5zaXplKCk7IH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmls
ZShpbnQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CisgICAgVmFs
dWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZz
ZXQpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29k
ZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9m
ZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAg
IH0KKworICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCk7CisgICAgfQorICAgIFZhbHVlUHJvZmlsZSogZ2V0RnJvbUFsbFZhbHVl
UHJvZmlsZXModW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1i
ZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlUHJv
ZmlsZUZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZShpbmRl
eCAtIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpOworICAgIH0KKworICAgIFJhcmVD
YXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCk7CisgICAg
dW5zaWduZWQgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkgeyByZXR1cm4gbV9yYXJlQ2FzZVBy
b2ZpbGVzLnNpemUoKTsgfQorICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1bnNpZ25lZCByYXJlQ2Fz
ZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7CisKKyAg
ICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49
IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7CisgICAgfQorCisg
ICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgIHJldHVybiB2YWx1ZSA+PSBP
cHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOworICAgIH0KKworICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvclBDKEluc3RydWN0aW9uKik7
CisKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQp
OworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheVByb2ZpbGVzLnNpemUoKTsgfQorICAgIGNvbnN0IEFycmF5UHJvZmlsZVZlY3RvciYg
YXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlczsgfQorICAgIEFycmF5UHJv
ZmlsZSogYWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBhZGRBcnJheVByb2ZpbGUodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxl
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OworICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUq
IGdldE9yQWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIC8v
IEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9u
SGFuZGxlcihpbnQgaW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorCisgICAgYm9vbCBoYXNF
eHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5m
bygpOyB9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3JpZ2lucygpOworICAgIAorICAgIC8vIEhhdmlu
ZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVuIHNvbWUgaW5saW5pbmcu
CisgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCisgICAgeworICAgICAgICByZXR1cm4gSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgfQorICAgICAgICAKKyAgICBib29s
IGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKKyAgICB7CisgICAgICAgIGlm
ICghaGFzQ29kZU9yaWdpbnMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIGluZGV4LmJpdHMoKSA8IGNvZGVPcmlnaW5zKCkuc2l6ZSgpOworICAgIH0KKworICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXguYml0cygpXTsKKyAgICB9CisKKyAgICBib29s
IGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkp
OworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBy
ZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQobG9ja2VyLCB0aGlzLCBzaXRlKTsKKyAgICB9CisKKyAg
ICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29u
c3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobG9ja2VyLCBzaXRlKTsKKyAgICB9CisgICAg
Ym9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0
CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
ICAgICByZXR1cm4gaGFzRXhpdFNpdGUobG9ja2VyLCBzaXRlKTsKKyAgICB9CisKKyAgICBERkc6
OkV4aXRQcm9maWxlJiBleGl0UHJvZmlsZSgpIHsgcmV0dXJuIG1fZXhpdFByb2ZpbGU7IH0KKwor
ICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgbGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlczsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyAgICAvLyBDb25z
dGFudCBQb29sCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRp
ZmllcnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVy
cygpICsgbnVtYmVyT2ZERkdJZGVudGlmaWVycygpOyB9CisgICAgc2l6ZV90IG51bWJlck9mREZH
SWRlbnRpZmllcnMoKSBjb25zdDsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGlu
dCBpbmRleCkgY29uc3Q7CisjZWxzZQorICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsgfQor
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7IH0KKyNlbmRpZgorCisgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cygpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnM7IH0KKyAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247IH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVl
IHYpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJz
LnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9n
bG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQ29uc3Rh
bnRMYXppbHkoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJl
Z2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29u
c3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5k
ZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAg
QUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsg
fQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CisgICAgaW50IG51bWJlck9mRnVu
Y3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAKKyAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5yZWdleHAoaW5kZXgpOyB9CisKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50QnVmZmVycygpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKKyAgICB9CisgICAgdW5zaWdu
ZWQgYWRkQ29uc3RhbnRCdWZmZXIoY29uc3QgVmVjdG9yPEpTVmFsdWU+JiBidWZmZXIpCisgICAg
eworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVk
IHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXplKCk7CisgICAgICAgIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVuZChidWZmZXIpOworICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisKKyAgICBWZWN0b3I8SlNWYWx1ZT4mIGNvbnN0YW50QnVmZmVyQXNW
ZWN0b3IodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7
CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpbmRleF07Cisg
ICAgfQorICAgIEpTVmFsdWUqIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnN0YW50QnVmZmVyQXNWZWN0b3IoaW5kZXgpLmRhdGEoKTsKKyAg
ICB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gJm1fdm0tPmhlYXA7IH0KKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Qu
Z2V0KCk7IH0KKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdp
bik7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoKQor
ICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghIW1fbGl2ZW5lc3NBbmFseXNpcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxp
ZGF0ZSgpOworCisgICAgLy8gSnVtcCBUYWJsZXMKKworICAgIHNpemVfdCBudW1iZXJPZlN3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGFkZFN3
aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAgICBTaW1wbGVKdW1wVGFi
bGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3Jh
cmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsgfQorICAgIHZvaWQgY2xlYXJTd2l0Y2hKdW1wVGFibGVzKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLmNsZWFyKCk7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFN0cmlu
Z0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQo
U3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLmxhc3QoKTsgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAg
ICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0KKworICAgIGVudW0g
U2hyaW5rTW9kZSB7CisgICAgICAgIC8vIFNocmluayBwcmlvciB0byBnZW5lcmF0aW5nIG1hY2hp
bmUgY29kZSB0aGF0IG1heSBwb2ludCBkaXJlY3RseSBpbnRvIHZlY3RvcnMuCisgICAgICAgIEVh
cmx5U2hyaW5rLAorCisgICAgICAgIC8vIFNocmluayBhZnRlciBnZW5lcmF0aW5nIG1hY2hpbmUg
Y29kZSwgYW5kIGFmdGVyIHBvc3NpYmx5IGNyZWF0aW5nIG5ldyB2ZWN0b3JzCisgICAgICAgIC8v
IGFuZCBhcHBlbmRpbmcgdG8gb3RoZXJzLiBBdCB0aGlzIHRpbWUgaXQgaXMgbm90IHNhZmUgdG8g
c2hyaW5rIGNlcnRhaW4gdmVjdG9ycworICAgICAgICAvLyBiZWNhdXNlIHdlIHdvdWxkIGhhdmUg
Z2VuZXJhdGVkIG1hY2hpbmUgY29kZSB0aGF0IHJlZmVyZW5jZXMgdGhlbSBkaXJlY3RseS4KKyAg
ICAgICAgTGF0ZVNocmluaworICAgIH07CisgICAgdm9pZCBzaHJpbmtUb0ZpdChTaHJpbmtNb2Rl
KTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtpY2tz
IGluLCBpbiBhIG1peGVkIG1vZGUKKyAgICAvLyBleGVjdXRpb24gd29ybGQuCisKKyAgICBib29s
IGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Cisg
ICAgfQorCisgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQorICAgIHsKKyAgICAgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgfQorCisgICAgaW50
MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworICAgIHZvaWQgaml0QWZ0
ZXJXYXJtVXAoKTsKKyAgICB2b2lkIGppdFNvb24oKTsKKworICAgIGNvbnN0IEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIH0KKworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJ1Y3R1cmUqLCBCYWc8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBv
aW50TWFwJiBsbGludEdldEJ5SWRXYXRjaHBvaW50TWFwKCkgeyByZXR1cm4gbV9sbGludEdldEJ5
SWRXYXRjaHBvaW50TWFwOyB9CisKKyAgICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdo
ZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGluLiBUaGlzCisgICAgLy8gY29udHJvbHMgYm90
aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGludm9rZWQgYW5kIHdoZW4gT1NSCisg
ICAgLy8gZW50cnkgaGFwcGVucy4gVHdvIHRyaWdnZXJzIGV4aXN0OiB0aGUgbG9vcCB0cmlnZ2Vy
IGFuZCB0aGUgcmV0dXJuCisgICAgLy8gdHJpZ2dlci4gSW4gZWl0aGVyIGNhc2UsIHdoZW4gYW4g
YWRkaXRpb24gdG8gbV9qaXRFeGVjdXRlQ291bnRlcgorICAgIC8vIGNhdXNlcyBpdCB0byBiZWNv
bWUgbm9uLW5lZ2F0aXZlLCB0aGUgb3B0aW1pemluZyBjb21waWxlciBpcworICAgIC8vIGludm9r
ZWQuIFRoaXMgaW5jbHVkZXMgYSBmYXN0IGNoZWNrIHRvIHNlZSBpZiB0aGlzIENvZGVCbG9jayBo
YXMKKyAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1pemVkIChpLmUuIHJlcGxhY2VtZW50KCkgcmV0
dXJucyBhIENvZGVCbG9jaworICAgIC8vIHRoYXQgd2FzIG9wdGltaXplZCB3aXRoIGEgaGlnaGVy
IHRpZXIgSklUIHRoYW4gdGhpcyBvbmUpLiBJbiB0aGUKKyAgICAvLyBjYXNlIG9mIHRoZSBsb29w
IHRyaWdnZXIsIGlmIHRoZSBvcHRpbWl6ZWQgY29tcGlsYXRpb24gc3VjY2VlZHMKKyAgICAvLyAo
b3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRoZSBwYXN0KSB0aGVuIE9TUiBpcyBhdHRlbXB0
ZWQgdG8KKyAgICAvLyByZWRpcmVjdCBwcm9ncmFtIGZsb3cgaW50byB0aGUgb3B0aW1pemVkIGNv
ZGUuCisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUg
b3B0aW1pemF0aW9uIHRyaWdnZXJzLAorICAgIC8vIGFuZCBhcmUgdXNlZCBhcyBhIHNpbmdsZSBw
b2ludCBhdCB3aGljaCB3ZSBkZWZpbmUgdGhlIGhldXJpc3RpY3MKKyAgICAvLyBmb3IgaG93IG11
Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBiZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uCisgICAg
Ly8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQgb3V0IHdpdGggb3B0aW1pemVB
ZnRlcldhcm1VcCgpLAorICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIENvZGVCbG9j
ayBjb25zdHJ1Y3Rvci4KKworICAgIC8vIFdoZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxh
dGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBhCisgICAgLy8gcmVvcHRpbWl6YXRpb24uIEJ1dCBl
YWNoIHRpbWUsIHdlIGluY3JlYXNlIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcgorICAgIC8vIHRv
IGF2b2lkIHRocmFzaGluZy4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0OworICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlv
bigpOworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mTExJbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBSZWdpc3RlclNldDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5udW1iZXJPZlNldFJlZ2lzdGVycygpOyB9Cisg
ICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7CisgICAgc2l6ZV90IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpOworCisgICAgaW50MzJfdCBj
b2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdDsKKworICAgIGludDMyX3QgYWRqdXN0
ZWRDb3VudGVyVmFsdWUoaW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKTsKKworICAgIGludDMyX3Qq
IGFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9q
aXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciwgbV9hY3RpdmVUaHJlc2hvbGQpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRvdGFsQ291bnQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRP
RihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1fdG90YWxDb3VudCk7IH0KKworICAgIGNvbnN0
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgaml0RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2ppdEV4ZWN1dGVDb3VudGVyOyB9CisKKyAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25E
ZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsg
fQorCisgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4g
cmVhY2hlZCwgYW5kIGlmIG5vdCwKKyAgICAvLyBhZGp1c3QgdGhlIGhldXJpc3RpY3MgYWNjb3Jk
aW5nbHkuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGhyZXNob2xkIGhhcworICAgIC8vIGJlZW4gcmVh
Y2hlZC4KKyAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCk7CisK
KyAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIg
dG8gZmlyZS4gVGhpcyBpcworICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24g
dHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCisgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0
aW5nIGJhc2VsaW5lIGNvZGUuCisgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisK
KyAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRpb24gZnJvbSBoYXBwZW5pbmcg
YWdhaW4uIE5vdGUgdGhhdAorICAgIC8vIG9wdGltaXphdGlvbiB3aWxsIHN0aWxsIGhhcHBlbiBh
ZnRlciByb3VnaGx5IDJeMjkgaW52b2NhdGlvbnMsCisgICAgLy8gc28gdGhpcyBpcyByZWFsbHkg
bWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGlzCisgICAgLy8gaXMg
Y2FsbGVkIGlmIG9wdGltaXphdGlvbiBmYWlsZWQsIGFuZCB3ZSBleHBlY3QgaXQgdG8gZmFpbCBp
bgorICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KKyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gcmVpbml0aWFsaXplIHRoZSBjb3VudGVy
IHRvIGl0cyBzdGFydGluZyBzdGF0ZSwKKyAgICAvLyBmb3JjaW5nIGEgd2FybS11cCB0byBoYXBw
ZW4gYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgLy8gZmlyZXMuIFRo
aXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuIEl0IGFsc28KKyAgICAv
LyBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMgaWYgYW4gT1NSIGV4aXQgb2NjdXJyZWQuIE5vdGUg
dGhhdAorICAgIC8vIE9TUiBleGl0IGNvZGUgaXMgY29kZSBnZW5lcmF0ZWQsIHNvIHRoZSB2YWx1
ZSBvZiB0aGUgZXhlY3V0ZQorICAgIC8vIGNvdW50ZXIgdGhhdCB0aGlzIGNvcnJlc3BvbmRzIHRv
IGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgorICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1V
cCgpOworCisgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2Vy
IHRvIGZpcmUgb25seSBhZnRlcgorICAgIC8vIGEgbG90IG9mIHdhcm0tdXAuCisgICAgdm9pZCBv
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworCisgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFu
IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CisgICAgLy8gbm90IG5lY2Vz
c2FyaWx5IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KKyAg
ICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1lYW5zIHRoYXQgYWxsIGNh
bGxzIGFyZQorICAgIC8vIHJlbGlua2VkIHRvIHRoZSBvcHRpbWl6ZWQgY29kZSwgc28gdGhpcyBv
bmx5IGFmZmVjdHMgY2FsbAorICAgIC8vIGZyYW1lcyB0aGF0IGFyZSBzdGlsbCBleGVjdXRpbmcg
dGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJlCisgICAgLy8gaXMgdHVuZWQgdG8gc3RyaWtl
IGEgYmFsYW5jZSBiZXR3ZWVuIHRoZSBjb3N0IG9mIE9TUiBlbnRyeQorICAgIC8vICh3aGljaCBp
cyB0b28gaGlnaCB0byB3YXJyYW50IG1ha2luZyBldmVyeSBsb29wIGJhY2sgZWRnZSB0bworICAg
IC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBhbmQgdGhlIGNvc3Qgb2YgZXhlY3V0aW5nIGJh
c2VsaW5lCisgICAgLy8gY29kZSAod2hpY2ggaXMgaGlnaCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBu
ZWNlc3NhcmlseSB3YW50IHRvCisgICAgLy8gaGF2ZSBhIGZ1bGwgd2FybS11cCkuIFRoZSBpbnR1
aXRpb24gZm9yIGNhbGxpbmcgdGhpcyBpbnN0ZWFkIG9mCisgICAgLy8gb3B0aW1pemVOZXh0SW52
b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiByZWN1cnNpdmUgZnVuY3Rpb25zCisgICAgLy8g
d2l0aCBsb29wcy4gQ29uc2lkZXIgdGhhdCB0aGVyZSBtYXkgYmUgTiBjYWxsIGZyYW1lcyBvZiBz
b21lCisgICAgLy8gcmVjdXJzaXZlIGZ1bmN0aW9uLCBmb3IgYSByZWFzb25hYmx5IGxhcmdlIHZh
bHVlIG9mIE4uIFRoZSB0b3AKKyAgICAvLyBvbmUgdHJpZ2dlcnMgb3B0aW1pemF0aW9uLCBhbmQg
dGhlbiByZXR1cm5zLCBhbmQgdGhlbiBhbGwgb2YKKyAgICAvLyB0aGUgb3RoZXJzIHJldHVybi4g
V2UgZG9uJ3Qgd2FudCBvcHRpbWl6YXRpb24gdG8gYmUgdHJpZ2dlcmVkIG9uCisgICAgLy8gZWFj
aCByZXR1cm4sIGFzIHRoYXQgd291bGQgYmUgc3VwZXJmbHVvdXMuIEl0IG9ubHkgbWFrZXMgc2Vu
c2UKKyAgICAvLyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rp
b25zIGJlY29tZXMgaG90CisgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCisgICAgdm9pZCBv
cHRpbWl6ZVNvb24oKTsKKworICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1
cnJlbnRseSgpOworCisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOworICAgIAorICAgIHVpbnQzMl90IG9z
ckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQorCisgICAg
dm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQorCisgICAgdWludDMy
X3QqIGFkZHJlc3NPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gJm1fb3NyRXhpdENvdW50ZXI7
IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPU1JFeGl0Q291bnRlcigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fb3NyRXhpdENvdW50ZXIpOyB9CisKKyAg
ICB1aW50MzJfdCBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhy
ZXNob2xkKTsKKyAgICB1aW50MzJfdCBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlv
bigpOworICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJv
bUxvb3AoKTsKKyAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKTsKKyAgICBib29sIHNob3Vs
ZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpOworCisgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKKyAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0Pik7CisgICAgCisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZVNh
dmVSZWdpc3RlcnMuZ2V0KCk7IH0KKyNlbHNlIC8vIE5vIEpJVAorICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gMDsg
fQorICAgIHN0YXRpYyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH07CisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVw
KCkgeyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpIHsgcmV0dXJuIDA7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAgIHZvaWQgdXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZUFsbEFycmF5UHJl
ZGljdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisKKyAgICB1bnNp
Z25lZCBmcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0KCk7
CisKKyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVu
c2lnbmVkIGNvbHVtbik7CisKKyAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKworICAgIHZvaWQgYWRk
QnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CisgICAgdm9pZCByZW1vdmVCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
bnVtQnJlYWtwb2ludHMgPj0gbnVtQnJlYWtwb2ludHMpOworICAgICAgICBtX251bUJyZWFrcG9p
bnRzIC09IG51bUJyZWFrcG9pbnRzOworICAgIH0KKworICAgIGVudW0gU3RlcHBpbmdNb2RlIHsK
KyAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQsCisgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJs
ZWQKKyAgICB9OworICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSk7CisKKyAg
ICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygpCisgICAgeworICAgICAgICBtX3N0ZXBwaW5n
TW9kZSA9IFN0ZXBwaW5nTW9kZURpc2FibGVkOworICAgICAgICBtX251bUJyZWFrcG9pbnRzID0g
MDsKKyAgICB9CisKKyAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcygpOyB9CisgICAgCisgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJl
cnMgcHJpdmF0ZS4KKworICAgIGludCBtX251bUNhbGxlZUxvY2FsczsKKyAgICBpbnQgbV9udW1W
YXJzOworICAgIAorICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhl
IHJlc3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2luZyBhbnkKKyAgICAvLyBvZiB0aGUgZm9sbG93
aW5nIHRvIGhvbGQgdGhlIGxvY2s6CisgICAgLy8KKyAgICAvLyAtIE1vZGlmeWluZyBhbnkgaW5s
aW5lIGNhY2hlIGluIHRoaXMgY29kZSBibG9jay4KKyAgICAvLworICAgIC8vIC0gUXVlcmluZyBh
bnkgaW5saW5lIGNhY2hlIGluIHRoaXMgY29kZSBibG9jaywgZnJvbSBhIHRocmVhZCBvdGhlciB0
aGFuCisgICAgLy8gICB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8KKyAgICAvLyBBZGRpdGlvbmFs
bHksIGl0J3Mgb25seSBsZWdhbCB0byBtb2RpZnkgdGhlIGlubGluZSBjYWNoZSBvbiB0aGUgbWFp
bgorICAgIC8vIHRocmVhZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYWluIHRocmVhZCBjYW4gcXVl
cnkgdGhlIGlubGluZSBjYWNoZSB3aXRob3V0CisgICAgLy8gbG9ja2luZy4gVGhpcyBpcyBjcnVj
aWFsIHNpbmNlIGV4ZWN1dGluZyB0aGUgaW5saW5lIGNhY2hlIGlzIGVmZmVjdGl2ZWx5CisgICAg
Ly8gInF1ZXJ5aW5nIiBpdC4KKyAgICAvLworICAgIC8vIEFub3RoZXIgZXhjZXB0aW9uIHRvIHRo
ZSBydWxlcyBpcyB0aGF0IHRoZSBHQyBjYW4gZG8gd2hhdGV2ZXIgaXQgd2FudHMKKyAgICAvLyB3
aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBiZWNhdXNlIHRoZSBHQyBpcyBndWFyYW50ZWVkIHRv
IHdhaXQgdW50aWwgYW55CisgICAgLy8gY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZp
bmlzaCB3aGF0IHRoZXkncmUgZG9pbmcuCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBt
X2xvY2s7CisKKyAgICBBdG9taWM8Ym9vbD4gbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CisK
KyAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNh
dXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisKKyNpZiBFTkFCTEUoSklUKQorICAg
IHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlM
ZXZlbAorI2VuZGlmCisKKyAgICBib29sIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA6
IDE7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorCisgICAgYm9vbCBtX2Rp
ZEZhaWxKSVRDb21waWxhdGlvbiA6IDE7CisgICAgYm9vbCBtX2RpZEZhaWxGVExDb21waWxhdGlv
biA6IDE7CisgICAgYm9vbCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwgOiAxOworICAgIGJvb2wg
bV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICB1
bnNpZ25lZCBtX2NvZGVUeXBlIDogMjsgLy8gQ29kZVR5cGUKKworICAgIC8vIEludGVybmFsIG1l
dGhvZHMgZm9yIHVzZSBieSB2YWxpZGF0aW9uIGNvZGUuIEl0IHdvdWxkIGJlIHByaXZhdGUgaWYg
aXQgd2Fzbid0CisgICAgLy8gZm9yIHRoZSBmYWN0IHRoYXQgd2UgdXNlIGl0IGZyb20gYW5vbnlt
b3VzIG5hbWVzcGFjZXMuCisgICAgdm9pZCBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisKKyAg
ICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVy
czsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCisg
ICAgICAgIFZlY3RvcjxWZWN0b3I8SlNWYWx1ZT4+IG1fY29uc3RhbnRCdWZmZXJzOworCisgICAg
ICAgIC8vIEp1bXAgVGFibGVzCisgICAgICAgIFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKKyAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIEV2YWxDb2RlQ2FjaGUgbV9ldmFsQ29kZUNhY2hl
OworICAgIH07CisKKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uSGFuZGxlcnMoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRFeGNlcHRpb25IYW5k
bGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVyKQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOyAvLyBXZSBtYXkgYmUgaGFuZGxpbmcgdGhlIGV4Y2VwdGlvbiBv
ZiBhbiBpbmxpbmVkIGNhbGwgZnJhbWUuCisgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOworICAgIH0KKworICAgIENhbGxTaXRlSW5kZXggbmV3
RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxs
U2l0ZSk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAo
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAgICBPcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIHZvaWQgdGFsbHlG
cmVxdWVudEV4aXRTaXRlcygpOworI2Vsc2UKKyAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0
ZXMoKSB7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2tT
ZXQ7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGxpdmVuZXNzQW5hbHlzaXNTbG93
KCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpOwor
ICAgIAorICAgIHZvaWQgbm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUp
OworICAgIAorICAgIGRvdWJsZSBvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCk7
CisKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25l
ZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcyk7CisKKyAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3Rv
cjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pOworCisgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50IGluZGV4LCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4
KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLnNldChtX2dsb2JhbE9i
amVjdC0+dm0oKSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgZHVtcEJ5dGVjb2Rl
KAorICAgICAgICBQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiBi
ZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwKKyAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0g
U3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgp
KTsKKworICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25zdDsKKyAgICBDU3RyaW5n
IGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZvaWQgcHJpbnRVbmFyeU9wKFBy
aW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiom
LCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFy
KiBvcCk7CisgICAgdm9pZCBwcmludENvbmRpdGlvbmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0
aW9uLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludEdldEJ5SWRPcChQcmludFN0cmVh
bSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJik7CisgICAg
dm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGlu
dCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmKTsKKyAgICBlbnVtIENhY2hlRHVtcE1vZGUg
eyBEdW1wQ2FjaGVzLCBEb250RHVtcENhY2hlcyB9OworICAgIHZvaWQgcHJpbnRDYWxsT3AoUHJp
bnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYs
IGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5n
LCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKKyAgICB2b2lkIHByaW50UHV0QnlJZE9wKFByaW50
U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBj
b25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0
cmVhbSYsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmKTsKKyAgICB2b2lkIHByaW50
TG9jYXRpb25BbmRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOworICAgIHZvaWQgcHJpbnRMb2NhdGlv
bk9wQW5kUmVnaXN0ZXJPcGVyYW5kKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0
aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQp
OworCisgICAgdm9pZCBiZWdpbkR1bXBQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVh
bSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAg
IHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9m
aWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9v
bCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBkdW1wQXJpdGhQcm9maWxlKFByaW50
U3RyZWFtJiwgQXJpdGhQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisKKyAg
ICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVl
VG9XZWFrUmVmZXJlbmNlKCk7CisgICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCk7
CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOworICAg
IHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgCisgICAgdm9p
ZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNp
dE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJik7CisKKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVTaW5jZUNyZWF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKKyAgICAgICAg
ICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9jcmVhdGlvblRpbWUpOwor
ICAgIH0KKworICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpCisgICAgeworICAg
ICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVEYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tC
b3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rp
b24+Jik7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRD
b2RlOworICAgIGludCBtX251bVBhcmFtZXRlcnM7CisgICAgdW5pb24geworICAgICAgICB1bnNp
Z25lZCBtX2RlYnVnZ2VyUmVxdWVzdHM7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1
bnNpZ25lZCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50IDogMTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1fc3RlcHBpbmdNb2RlIDogMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fbnVtQnJlYWtwb2lu
dHMgOiAzMDsKKyAgICAgICAgfTsKKyAgICB9OworICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxl
QmFzZT4gbV9vd25lckV4ZWN1dGFibGU7CisgICAgVk0qIG1fdm07CisKKyAgICBSZWZDb3VudGVk
QXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworICAgIFZpcnR1YWxSZWdpc3RlciBt
X3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAg
IG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisKKyAgICBSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IG1fc291cmNlOworICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OworICAgIHVuc2lnbmVk
IG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0OworCisgICAgUmVmQ291bnRlZEFycmF5PExMSW50Q2Fs
bExpbmtJbmZvPiBtX2xsaW50Q2FsbExpbmtJbmZvczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8
TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZv
Pj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xs
aW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CisgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsK
KyNpZiBFTkFCTEUoSklUKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlz
dD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9z
dHViSW5mb3M7CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+
IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklD
PiBtX3N1YklDczsKKyAgICBCYWc8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxs
TGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdD
YWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgQmFzaWNS
YXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29k
ZU9yaWdpbk1hcDsKKyNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1h
cD4gbV9qaXRDb2RlTWFwOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoaXMgaXMgcmVs
ZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBj
b2RlIGJsb2NrCisgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KKyAgICBERkc6OkV4aXRQcm9m
aWxlIG1fZXhpdFByb2ZpbGU7CisgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxl
SG9sZGVyIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOworI2VuZGlmCisgICAgUmVmQ291bnRl
ZEFycmF5PFZhbHVlUHJvZmlsZT4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXM7CisgICAgUmVmQ291
bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOworICAgIFNlZ21lbnRlZFZl
Y3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFyZUNhc2VQcm9maWxlczsKKyAgICBSZWZDb3Vu
dGVkQXJyYXk8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZT4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
czsKKyAgICBBcnJheVByb2ZpbGVWZWN0b3IgbV9hcnJheVByb2ZpbGVzOworICAgIFJlZkNvdW50
ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmlsZT4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZXM7CisKKyAgICAvLyBDb25zdGFudCBQb29sCisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJl
Z2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgUmVnaXN0ZXJfbXVzdF9i
ZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOworICAgIC8vIFRPRE86IFRoaXMg
Y291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1
dCB0aGUgREZHIG11dGF0ZXMKKyAgICAvLyBpdCwgc28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Ig
bm93LgorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3Rl
cnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247CisgICAgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxG
dW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CisgICAgUmVmQ291bnRlZEFycmF5
PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRXhwcnM7CisKKyAg
ICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOworICAgIAorICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisKKyAgICBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKKyAgICB1aW50MzJfdCBtX29z
ckV4aXRDb3VudGVyOworICAgIHVpbnQxNl90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOwor
ICAgIHVpbnQxNl90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisKKyAgICBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fY3JlYXRpb25UaW1lOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzc0FuYWx5c2lz
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworCisgICAgVW5j
b25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CisgICAgV2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7Cit9OworCisvLyBQcm9n
cmFtIGNvZGUgaXMgbm90IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNvIHdlIG1ha2UgdGhlIGds
b2JhbCBvYmplY3QKKy8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0LgorCitjbGFzcyBHbG9i
YWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKKyAgICB0eXBlZGVmIENvZGVCbG9jayBC
YXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworcHJvdGVjdGVkOgorICAgIEdsb2JhbENvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEdsb2Jh
bENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIEdsb2JhbENvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSog
c2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25l
ZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAg
OiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1
YmxpYyBHbG9iYWxDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJs
b2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFByb2dyYW1Db2RlQmxv
Y2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAg
ICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFt
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExp
bmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFw
KSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CisgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxv
Y2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUHJv
Z3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb2dy
YW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0
TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKK307CisKK2NsYXNzIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMg
R2xvYmFsQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBC
YXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
Pih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+
bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3Rh
dGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQorICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhl
cikKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
Cit9OworCitjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lO
Rk87CisKKyAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIEV2YWxDb2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9j
az4odm0tPmhlYXApKQorICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBFdmFsQ29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgeworICAg
ICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0s
IHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciYg
dmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygp
LT52YXJpYWJsZShpbmRleCk7IH0KKyAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVy
biB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+bnVtVmFyaWFibGVzKCk7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5
UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAg
ICB9CisgICAgICAgIAorICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAgICA6IEdsb2JhbENvZGVC
bG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIFVubGlua2VkRXZhbENv
ZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVu
bGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9Cit9OworCitjbGFz
cyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5
cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEZ1
bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0
aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2
bS0+aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9u
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7
CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgRnVuY3Rpb25D
b2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29w
ZSogc2NvcGUsCisgICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
LmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxv
Y2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQor
CisgICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
dW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENvZGVCbG9jayh2bSwg
c3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291
cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307CisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1Ymxp
YyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAg
REVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUo
Vk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikK
KyAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAg
ICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIGNyZWF0ZShWTSogdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJs
b2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhl
Y3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KCp2bSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
JiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgIHsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworfTsKKyNlbmRpZgor
CitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCit7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCisgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsK
KyAgICByZXR1cm4gdGhpc1tpbmRleF07Cit9CisKK2lubGluZSBSZWdpc3RlciYgRXhlY1N0YXRl
OjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsK
K30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OworICAgIHJldHVybiB0aGlzW2luZGV4XTsKK30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3Rh
dGU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gdW5jaGVj
a2VkUihyZWcub2Zmc2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCkKK3sKKyAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNo
Q29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7Cisg
ICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgaWYgKENvZGVCbG9jayog
Y29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCisgICAgICAgICAgICBjb2Rl
QmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRXZhbEV4ZWN1dGFibGVU
eXBlOiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENv
ZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5tX2V2YWxDb2RlQmxvY2su
Z2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhz
dGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgRnVuY3RvciBmKHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAg
ICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhl
Y3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0
ZWRDb2RlQmxvY2soZik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQorICAgICAgICAgICAg
Y29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4o
ZnVuY3RvcikpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgorSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBh
cmVGb3JFeGVjdXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2Nv
cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJs
b2NrKQoreworICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQpKSB7CisgICAgICAgIGlmIChzdGQ6
OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEV2YWxFeGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAg
ICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVj
dXRhYmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19z
YW1lPEV4ZWN1dGFibGVUeXBlLCBQcm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAgICAg
ICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhl
Y3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNf
c2FtZTxFeGVjdXRhYmxlVHlwZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKKyAg
ICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8TW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkpOworICAgICAgICBlbHNl
IGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZT46OnZh
bHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpz
Q2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0
aW9uSW1wbCh2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCByZXN1bHRDb2RlQmxvY2spOworfQor
CisjZGVmaW5lIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxz
KSBcCisgICAgKGNvZGVCbG9jay0+dm0oKS0+bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBb
Jl0gKCkgeyByZXR1cm4gdG9DU3RyaW5nIGRldGFpbHM7IH0pKQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQmxv
Y2suaAkocmV2aXNpb24gMjA4MjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEzMCArMjksMTAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKLSNpbmNsdWRlICJCeVZh
bEluZm8uaCIKLSNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fs
bExpbmtJbmZvLmgiCi0jaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQu
aCIKLSNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgot
I2luY2x1ZGUgIkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKLSNp
bmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotI2lu
Y2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCi0jaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGlv
bkNvdW50ZXIuaCIKLSNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCi0jaW5jbHVkZSAi
RnVuY3Rpb25FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKLSNpbmNsdWRl
ICJJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJKSVRNYXRo
SUNGb3J3YXJkcy5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0lu
Zm8uaCIKLSNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCIKLSNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgotI2luY2x1ZGUg
Ik1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNv
blJlYXNvbi5oIgotI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiUHV0
UHJvcGVydHlTbG90LmgiCi0jaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgotI2lu
Y2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Zhc3RCaXRWZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJHbG9iYWxDb2RlQmxvY2suaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKLWNs
YXNzIENvZGVCbG9ja1NldDsKLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBQQ1RvQ29kZU9yaWdp
bk1hcDsKLWNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwotY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm87Ci0KLWVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKLQotc3RydWN0IEFyaXRoUHJv
ZmlsZTsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwg
Q29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7Ci0KLWVudW0gUmVvcHRpbWl6
YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24g
fTsKLQotY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7Ci0gICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKLSAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwotICAg
IGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKLQotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNv
bmRpdGlvbmFsRmluYWxpemVyIHsgCi0gICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoKSBvdmVycmlkZTsKLSAgICB9OwotCi0gICAgY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgewotICAgICAgICB2b2lkIHZp
c2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKLSAgICB9OwotCi1wdWJs
aWM6Ci0gICAgZW51bSBDb3B5UGFyc2VkQmxvY2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKLQot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotcHJv
dGVjdGVkOgotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1Rh
ZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2Nv
cGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1
bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKLSNlbmRpZgotCi0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKik7Ci0jaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKLSNlbmRpZgotCi0gICAgV3JpdGVC
YXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKLQotcHVibGljOgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKLQotICAgIFVubGlua2VkQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLmdldCgpOyB9
Ci0KLSAgICBDU3RyaW5nIGluZmVycmVkTmFtZSgpIGNvbnN0OwotICAgIENvZGVCbG9ja0hhc2gg
aGFzaCgpIGNvbnN0OwotICAgIGJvb2wgaGFzSGFzaCgpIGNvbnN0OwotICAgIGJvb2wgaXNTYWZl
VG9Db21wdXRlSGFzaCgpIGNvbnN0OwotICAgIENTdHJpbmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJs
ZSgpIGNvbnN0OwotICAgIENTdHJpbmcgc291cmNlQ29kZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5v
dCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJjZSB3ZSBwYXJzZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3Mg
bGlrZSBwcmVmaXggdGhlIHNvdXJjZSBmb3IgYSBmdW5jdGlvbiB3aXRoIGEgcmVpZmllZCBzaWdu
YXR1cmUuCi0gICAgQ1N0cmluZyBzb3VyY2VDb2RlT25PbmVMaW5lKCkgY29uc3Q7IC8vIEFzIHNv
dXJjZUNvZGVGb3JUb29scygpLCBidXQgcmVwbGFjZXMgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRo
IGEgc2luZ2xlIHNwYWNlLgotICAgIHZvaWQgZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVh
bSYsIEpJVENvZGU6OkpJVFR5cGUpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KLSAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMo
aW50IG5ld1ZhbHVlKTsKLQotICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX251bUNhbGxlZUxvY2FsczsgfQotCi0gICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9udW1QYXJhbWV0ZXJzKTsgfQotCi0gICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9
Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShWTSYsIENvZGVCbG9jayopOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soRnVuY3Rv
ciYmIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgVmVjdG9yPENvZGVCbG9jayosIDQ+IGNvZGVCbG9ja3M7
Ci0gICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKHRoaXMpOwotCi0gICAgICAgIHdoaWxlICghY29k
ZUJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY3VycmVudENvZGVC
bG9jayA9IGNvZGVCbG9ja3MudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGYoY3VycmVudENvZGVC
bG9jayk7Ci0KLSAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY3VycmVu
dENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFw
cGVuZChhbHRlcm5hdGl2ZSk7Ci0gICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBvc3JFbnRyeUJs
b2NrID0gY3VycmVudENvZGVCbG9jay0+c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKLSAg
ICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChvc3JFbnRyeUJsb2NrKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9u
S2luZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXND
b25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2Nr
KiBiYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IEdldCByaWQgb2Yg
dGhpcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
Njc3Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKLQotICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCB2aXNpdFdlYWtseShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgY2xl
YXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKTsKLQotICAgIHZvaWQgZHVtcFNvdXJjZSgpOwot
ICAgIHZvaWQgZHVtcFNvdXJjZShQcmludFN0cmVhbSYpOwotCi0gICAgdm9pZCBkdW1wQnl0ZWNv
ZGUoKTsKLSAgICB2b2lkIGR1bXBCeXRlY29kZShQcmludFN0cmVhbSYpOwotICAgIHZvaWQgZHVt
cEJ5dGVjb2RlKAotICAgICAgICBQcmludFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LAotICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxs
TGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwotICAgIHZvaWQgZHVtcEV4Y2VwdGlv
bkhhbmRsZXJzKFByaW50U3RyZWFtJik7Ci0gICAgdm9pZCBwcmludFN0cnVjdHVyZXMoUHJpbnRT
dHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiopOwotICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVy
YW5kKTsKLQotICAgIHZvaWQgZHVtcE1hdGhJQ1N0YXRzKCk7Ci0KLSAgICBib29sIGlzU3RyaWN0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9Ci0gICAgRUNNQU1vZGUgZWNt
YU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RT
dHJpY3RNb2RlOyB9Ci0KLSAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQo
KSAmJiAhbV9pc1N0cmljdE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJu
IGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChp
bnQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwotICAg
IH0KLQotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFu
ZGxlcik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWly
ZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKLSAgICB2b2lkIHJlbW92
ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4KTsKLSAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwot
ICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KTsKLSAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAotICAgICAgICBpbnQmIHN0YXJ0T2Zm
c2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNv
bnN0OwotCi0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRl
SW5kZXgoQ2FsbFNpdGVJbmRleCk7Ci0KLSAgICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFN0
dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpOwotICAgIAotICAgIHZvaWQgZ2V0Q2FsbExp
bmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJl
c3VsdCk7Ci0gICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1
bHQpOwotCi0gICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZh
bEluZm9NYXAmIHJlc3VsdCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7Ci0gICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEFyaXRoUHJvZmlsZSopOwotICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhBcml0aFByb2Zp
bGUqKTsKLSAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklU
U3ViSUMqIGFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSopOwotICAgIEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdp
bigpOyB9Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQo
KSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQotICAgIAotICAgIC8vIE8obikgb3BlcmF0
aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0
byBnZXQgb25lCi0gICAgLy8gc3R1YiBpbmZvLgotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5k
U3R1YkluZm8oQ29kZU9yaWdpbik7Ci0KLSAgICBCeVZhbEluZm8qIGFkZEJ5VmFsSW5mbygpOwot
Ci0gICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0luZm8oKTsKLSAgICBCYWc8Q2FsbExpbmtJ
bmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0JlZ2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0lu
Zm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJ
bmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5lbmQoKTsgfQotCi0gICAgLy8gVGhp
cyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9T
UiBleGl0cyBpbiB0aGUgY2FzZQotICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcu
IENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5Ci0gICAg
Ly8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Yg
Y2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICAvLyBXZSBjYWxsIHRo
aXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0ZW1wdCBjb21waWxpbmcgc29tZXRoaW5nIHdpdGggdGhl
IGJhc2VsaW5lIEpJVC4gSWRlYWxseQotICAgIC8vIHRoZSBiYXNlbGluZSBKSVQgd291bGQgbm90
IGFkZCBkYXRhIHRvIENvZGVCbG9jaywgYnV0IGluc3RlYWQgaXQgd291bGQgcHV0IGl0cyBkYXRh
IGludG8KLSAgICAvLyBhIG5ld2x5IGNyZWF0ZWQgSklUQ29kZSwgd2hpY2ggY291bGQgYmUgdGhy
b3duIGF3YXkgaWYgd2UgYmFpbCBvbiBKSVQgY29tcGlsYXRpb24uIFRoZW4gd2UKLSAgICAvLyB3
b3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBzaWxseSBmdW5jdGlvbi4KLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTA2MQotICAg
IHZvaWQgcmVzZXRKSVREYXRhKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotICAgIHZvaWQg
dW5saW5rSW5jb21pbmdDYWxscygpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGxpbmtJ
bmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7Ci0gICAg
dm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwg
UG9seW1vcnBoaWNDYWxsTm9kZSopOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSAgICB2b2lk
IGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0lu
Zm8qKTsKLQotICAgIHZvaWQgc2V0SklUQ29kZU1hcChzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJ
VENvZGVNYXA+IGppdENvZGVNYXApCi0gICAgewotICAgICAgICBtX2ppdENvZGVNYXAgPSBXVEZN
b3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBDb21wYWN0SklUQ29kZU1hcCogaml0Q29kZU1h
cCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0QnlJZENhY2hlKEluc3RydWN0aW9uKik7
Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkp
OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihyZXR1cm5BZGRyZXNz
KSAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBKU0M6Oklu
c3RydWN0aW9uIEluc3RydWN0aW9uOwotICAgIHR5cGVkZWYgUmVmQ291bnRlZEFycmF5PEluc3Ry
dWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZklu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQotICAg
IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zOyB9Ci0gICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYg
aW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLQotICAgIHNp
emVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKTsKLQotICAgIGJvb2wgdXNlc09wY29kZShP
cGNvZGVJRCk7Ci0KLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0KLSAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQg
dG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tG
b3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKLSAgICBDb2RlQmxvY2sqIG5ld1Jl
cGxhY2VtZW50KCk7Ci0gICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29k
ZT4gY29kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci0g
ICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoY29kZS0+c2l6ZSgpKTsK
LSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1
c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29k
IHRvIGJlIHBhcmFub2lkLgotICAgICAgICBtX2ppdENvZGUgPSBjb2RlOwotICAgIH0KLSAgICBQ
YXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KLSAgICBz
dGF0aWMgcHRyZGlmZl90IGppdENvZGVPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX2ppdENvZGUpOyB9Ci0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7
Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBKSVRDb2RlOjpKSVRUeXBl
IHJlc3VsdCA9IEpJVENvZGU6OmppdFR5cGVGb3Ioaml0Q29kZSk7Ci0gICAgICAgIFdURjo6bG9h
ZExvYWRGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lZWRlZC4gT2ggd2VsbCwgcGFy
YW5vaWEgaXMgZ29vZC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29s
IGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBq
aXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7Ci0gICAgfQotICAgIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotCi0gICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOwotICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbCgpOwotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+
KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUpOyB9Ci0KLSAgICBib29sIGhhc09wdGltaXplZFJlcGxh
Y2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7Ci0gICAgYm9vbCBoYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCi0j
ZW5kaWYKLQotICAgIHZvaWQgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9w
dGltaXphdGlvbk1vZGUgPSBEb250Q291bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFp
bCogPSBudWxscHRyKTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KLSAgICBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8
U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3duZXJFeGVjdXRhYmxlLmdldCgpKTsgfQotCi0gICAgVk0q
IHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQotCi0gICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdp
c3RlcjsgfQotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVy
biBtX3RoaXNSZWdpc3RlcjsgfQotCi0gICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT51c2VzRXZhbCgpOyB9Ci0KLSAgICB2b2lkIHNldFNjb3BlUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQo
c2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkgfHwgIXNjb3BlUmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAg
ICAgICAgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsKLSAgICB9Ci0KLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9zY29wZVJlZ2lzdGVyOwotICAgIH0KLSAgICAKLSAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5
cGUpOwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWRFdmFsOwotICAgICAgICBy
ZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkOwotICAgIH0KLQotICAgIFNvdXJjZVByb3Zp
ZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQotICAgIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9Ci0gICAg
dW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExp
bmVDb2x1bW5PZmZzZXQ7IH0KLQotICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQotICAg
IHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+anVtcFRhcmdldChpbmRleCk7IH0KLQotICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnMgPj0gMCk7Ci0g
ICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykpOwotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwotICAgIH0KLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJv
ZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgpCi0gICAgewotICAgICAgICBW
YWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZtX2FyZ3VtZW50VmFsdWVQcm9maWxlc1thcmd1bWVudElu
ZGV4XTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQotICAgIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fdmFsdWVQcm9maWxl
c1tpbmRleF07IH0KLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVl
UHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsKLSAgICB9Ci0gICAgVmFsdWVQcm9m
aWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaW5kZXgpOwotICAgICAgICByZXR1
cm4gdmFsdWVQcm9maWxlKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7
Ci0gICAgfQotCi0gICAgUmFyZUNhc2VQcm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7
IHJldHVybiBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpOyB9Ci0gICAgUmFyZUNhc2VQcm9maWxl
KiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwot
ICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5
dGVjb2RlT2Zmc2V0KTsKLQotICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVj
b2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJh
cmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQoKTsKLSAgICB9Ci0KLSAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29k
ZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJl
Q2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
KCk7Ci0gICAgfQotCi0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
Rm9yUEMoSW5zdHJ1Y3Rpb24qKTsKLQotICAgIGJvb2wgY291bGRUYWtlU3BlY2lhbEZhc3RDYXNl
KGludCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmls
ZXMoKSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3Qg
QXJyYXlQcm9maWxlVmVjdG9yJiBhcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2Zp
bGVzOyB9Ci0gICAgQXJyYXlQcm9maWxlKiBhZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2ZpbGUq
IGFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZSh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpOwotCi0gICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKLQotICAgIHNp
emVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQotICAgIEhh
bmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBSRUxFQVNFX0FTU0VSVCht
X3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhd
OyB9Ci0KLSAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIFZl
Y3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGNvZGVPcmlnaW5zKCk7
Ci0gICAgCi0gICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFz
IGJlZW4gc29tZSBpbmxpbmluZy4KLSAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKLSAgICB9
Ci0gICAgICAgIAotICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4
KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNDb2RlT3JpZ2lucygpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gaW5kZXguYml0cygpIDwgY29kZU9yaWdpbnMoKS5z
aXplKCk7Ci0gICAgfQotCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5kZXgg
aW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCld
OwotICAgIH0KLQotICAgIGJvb2wgYWRkRnJlcXVlbnRFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpCi0gICAgewotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSgpKSk7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChsb2NrZXIsIHRoaXMs
IHNpdGUpOwotICAgIH0KLQotICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCBjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIs
IHNpdGUpOwotICAgIH0KLSAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRF
eGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUp
OwotICAgIH0KLQotICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4g
bV9leGl0UHJvZmlsZTsgfQotCi0gICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxl
SG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLQotICAgIC8vIENvbnN0YW50IFBvb2wKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBz
aXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBudW1iZXJPZkRGR0lkZW50aWZpZXJzKCk7IH0KLSAg
ICBzaXplX3QgbnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0OwotICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdDsKLSNlbHNlCi0gICAgc2l6ZV90IG51
bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZJZGVudGlmaWVycygpOyB9Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsg
fQotI2VuZGlmCi0KLSAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRz
KCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQotICAgIFZlY3RvcjxTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJl
dHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQotICAgIHVuc2lnbmVk
IGFkZENvbnN0YW50KEpTVmFsdWUgdikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7Ci0gICAgICAg
IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBhZGRDb25zdGFudExhemlseSgpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQot
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50
IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQot
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0KLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0K
LSAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xz
LnNpemUoKTsgfQotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRl
eCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQotICAgIAotICAgIFJl
Z0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnJl
Z2V4cChpbmRleCk7IH0KLQotICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgp
OwotICAgIH0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcihjb25zdCBWZWN0b3I8SlNW
YWx1ZT4mIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJz
LnNpemUoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBwZW5kKGJ1
ZmZlcik7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIFZlY3RvcjxKU1ZhbHVl
PiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rvcih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRCdWZmZXJzW2luZGV4XTsKLSAgICB9Ci0gICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIodW5z
aWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gY29uc3RhbnRCdWZmZXJBc1ZlY3Rv
cihpbmRleCkuZGF0YSgpOwotICAgIH0KLQotICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVy
biAmbV92bS0+aGVhcDsgfQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdEZvcihDb2RlT3JpZ2luKTsKLQotICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYg
bGl2ZW5lc3NBbmFseXNpcygpCi0gICAgewotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAgICAgaWYgKCEhbV9saXZlbmVz
c0FuYWx5c2lzKQotICAgICAgICAgICAgICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHZhbGlkYXRlKCk7Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwotCi0gICAg
c2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURh
dGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFNp
bXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoU2ltcGxlSnVt
cFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsg
fQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7
IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9Ci0gICAgdm9pZCBjbGVhclN3aXRjaEp1bXBUYWJsZXMo
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuY2xlYXIoKTsKLSAgICB9Ci0K
LSAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXpl
KCkgOiAwOyB9Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgU3RyaW5nSnVtcFRhYmxl
JiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQo
bV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07IH0KLQotICAgIEV2YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNy
ZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVD
YWNoZTsgfQotCi0gICAgZW51bSBTaHJpbmtNb2RlIHsKLSAgICAgICAgLy8gU2hyaW5rIHByaW9y
IHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIHRoYXQgbWF5IHBvaW50IGRpcmVjdGx5IGludG8g
dmVjdG9ycy4KLSAgICAgICAgRWFybHlTaHJpbmssCi0KLSAgICAgICAgLy8gU2hyaW5rIGFmdGVy
IGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlLCBhbmQgYWZ0ZXIgcG9zc2libHkgY3JlYXRpbmcgbmV3
IHZlY3RvcnMKLSAgICAgICAgLy8gYW5kIGFwcGVuZGluZyB0byBvdGhlcnMuIEF0IHRoaXMgdGlt
ZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJpbmsgY2VydGFpbiB2ZWN0b3JzCi0gICAgICAgIC8vIGJl
Y2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIHRoYXQgcmVmZXJlbmNl
cyB0aGVtIGRpcmVjdGx5LgotICAgICAgICBMYXRlU2hyaW5rCi0gICAgfTsKLSAgICB2b2lkIHNo
cmlua1RvRml0KFNocmlua01vZGUpOwotCi0gICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGlu
ZyB3aGVuIEpJVHRpbmcga2lja3MgaW4sIGluIGEgbWl4ZWQgbW9kZQotICAgIC8vIGV4ZWN1dGlv
biB3b3JsZC4KLQotICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jv
c3NlZEFuZFNldCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigp
Ci0gICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHko
KTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9s
ZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwotICAgIHZvaWQgaml0U29vbigpOwotCi0g
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7Ci0gICAg
fQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVyZSosIEJhZzxMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwot
ICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAmIGxsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAoKSB7
IHJldHVybiBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7IH0KLQotICAgIC8vIEZ1bmN0aW9u
cyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMK
LSAgICAvLyBjb250cm9scyBib3RoIHdoZW4gdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW52
b2tlZCBhbmQgd2hlbiBPU1IKLSAgICAvLyBlbnRyeSBoYXBwZW5zLiBUd28gdHJpZ2dlcnMgZXhp
c3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1cm4KLSAgICAvLyB0cmlnZ2VyLiBJbiBl
aXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRpdGlvbiB0byBtX2ppdEV4ZWN1dGVDb3VudGVyCi0gICAg
Ly8gY2F1c2VzIGl0IHRvIGJlY29tZSBub24tbmVnYXRpdmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBp
bGVyIGlzCi0gICAgLy8gaW52b2tlZC4gVGhpcyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2Vl
IGlmIHRoaXMgQ29kZUJsb2NrIGhhcwotICAgIC8vIGFscmVhZHkgYmVlbiBvcHRpbWl6ZWQgKGku
ZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5zIGEgQ29kZUJsb2NrCi0gICAgLy8gdGhhdCB3YXMgb3B0
aW1pemVkIHdpdGggYSBoaWdoZXIgdGllciBKSVQgdGhhbiB0aGlzIG9uZSkuIEluIHRoZQotICAg
IC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJpZ2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlv
biBzdWNjZWVkcwotICAgIC8vIChvciBoYXMgYWxyZWFkeSBzdWNjZWVkZWQgaW4gdGhlIHBhc3Qp
IHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0bwotICAgIC8vIHJlZGlyZWN0IHByb2dyYW0gZmxvdyBp
bnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4KLQotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2Fs
bGVkIGZyb20gd2l0aGluIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMsCi0gICAgLy8gYW5kIGFy
ZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUgaGV1cmlzdGlj
cwotICAgIC8vIGZvciBob3cgbXVjaCB3YXJtLXVwIGlzIG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4
dCBvcHRpbWl6YXRpb24KLSAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFy
dCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCi0gICAgLy8gYXMgdGhpcyBpcyBjYWxs
ZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgotCi0gICAgLy8gV2hlbiB3ZSBvYnNl
cnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzLCB3ZSB0cmlnZ2VyIGEKLSAgICAvLyBy
ZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2UgaW5jcmVhc2UgdGhlIG9wdGltaXphdGlv
biB0cmlnZ2VyCi0gICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgdW5z
aWduZWQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJu
IFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLm51bWJlck9m
U2V0UmVnaXN0ZXJzKCk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAgICBzaXplX3QgY2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVz
KCk7Ci0KLSAgICBpbnQzMl90IGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0Owot
Ci0gICAgaW50MzJfdCBhZGp1c3RlZENvdW50ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hv
bGQpOwotCi0gICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX2ppdEV4ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVD
VF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1fY291bnRlcik7IH0KLSAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBP
QkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9s
ZCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3Vu
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV90b3RhbENv
dW50KTsgfQotCi0gICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBqaXRFeGVjdXRl
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KLQotICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgb3B0aW1pemF0aW9u
IHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkLCBhbmQgaWYgbm90LAotICAgIC8vIGFkanVzdCB0
aGUgaGV1cmlzdGljcyBhY2NvcmRpbmdseS4gUmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlc2hvbGQg
aGFzCi0gICAgLy8gYmVlbiByZWFjaGVkLgotICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRo
cmVzaG9sZFJlYWNoZWQoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBv
cHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBUaGlzIGlzCi0gICAgLy8gcmFyZWx5IHdpc2Us
IHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNhbGx5IG1vcmUKLSAgICAvLyBl
eHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUgY29kZS4KLSAgICB2b2lkIG9wdGltaXpl
TmV4dEludm9jYXRpb24oKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXph
dGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0Ci0gICAgLy8gb3B0aW1pemF0aW9u
IHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKLSAgICAv
LyBzbyB0aGlzIGlzIHJlYWxseSBtZWFudCB0byBkZWxheSB0aGF0IGFzIG11Y2ggYXMgcG9zc2li
bGUuIFRoaXMKLSAgICAvLyBpcyBjYWxsZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdl
IGV4cGVjdCBpdCB0byBmYWlsIGluCi0gICAgLy8gdGhlIGZ1dHVyZSBhcyB3ZWxsLgotICAgIHZv
aWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byByZWlu
aXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLAotICAgIC8vIGZvcmNp
bmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdn
ZXIKLSAgICAvLyBmaXJlcy4gVGhpcyBpcyBjYWxsZWQgaW4gdGhlIENvZGVCbG9jayBjb25zdHJ1
Y3Rvci4gSXQgYWxzbwotICAgIC8vIG1ha2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBpZiBhbiBPU1Ig
ZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0Ci0gICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdl
bmVyYXRlZCwgc28gdGhlIHZhbHVlIG9mIHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciB0aGF0
IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFpbGFibGUgZGlyZWN0bHkuCi0gICAgdm9p
ZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0KLSAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4g
b3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5IGFmdGVyCi0gICAgLy8gYSBsb3Qgb2Yg
d2FybS11cC4KLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCk7Ci0KLSAgICAvLyBD
YWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBi
dXQKLSAgICAvLyBub3QgbmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNl
IGlmIG9wdGltaXphdGlvbgotICAgIC8vIHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRp
b24gbWVhbnMgdGhhdCBhbGwgY2FsbHMgYXJlCi0gICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGlt
aXplZCBjb2RlLCBzbyB0aGlzIG9ubHkgYWZmZWN0cyBjYWxsCi0gICAgLy8gZnJhbWVzIHRoYXQg
YXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlzIENvZGVCbG9jay4gVGhlIHZhbHVlIGhlcmUKLSAgICAv
LyBpcyB0dW5lZCB0byBzdHJpa2UgYSBiYWxhbmNlIGJldHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVu
dHJ5Ci0gICAgLy8gKHdoaWNoIGlzIHRvbyBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxv
b3AgYmFjayBlZGdlIHRvCi0gICAgLy8gdHJpZ2dlciBPU1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUg
Y29zdCBvZiBleGVjdXRpbmcgYmFzZWxpbmUKLSAgICAvLyBjb2RlICh3aGljaCBpcyBoaWdoIGVu
b3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQgdG8KLSAgICAvLyBoYXZlIGEgZnVs
bCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKLSAg
ICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkgaXMgZm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2
ZSBmdW5jdGlvbnMKLSAgICAvLyB3aXRoIGxvb3BzLiBDb25zaWRlciB0aGF0IHRoZXJlIG1heSBi
ZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUKLSAgICAvLyByZWN1cnNpdmUgZnVuY3Rpb24sIGZvciBh
IHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhlIHRvcAotICAgIC8vIG9uZSB0cmlnZ2Vy
cyBvcHRpbWl6YXRpb24sIGFuZCB0aGVuIHJldHVybnMsIGFuZCB0aGVuIGFsbCBvZgotICAgIC8v
IHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBkb24ndCB3YW50IG9wdGltaXphdGlvbiB0byBiZSB0cmln
Z2VyZWQgb24KLSAgICAvLyBlYWNoIHJldHVybiwgYXMgdGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91
cy4gSXQgb25seSBtYWtlcyBzZW5zZQotICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9uIGlm
IG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBob3QKLSAgICAvLyBpbiB0aGUgYmFzZWxp
bmUgY29kZS4KLSAgICB2b2lkIG9wdGltaXplU29vbigpOwotCi0gICAgdm9pZCBmb3JjZU9wdGlt
aXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCk7Ci0KLSAgICB2b2lkIHNldE9wdGltaXphdGlv
blRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7Ci0g
ICAgCi0gICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4
aXRDb3VudGVyOyB9Ci0KLSAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRl
cisrOyB9Ci0KLSAgICB1aW50MzJfdCogYWRkcmVzc09mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVy
biAmbV9vc3JFeGl0Q291bnRlcjsgfQotCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9T
UkV4aXRDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9vc3JF
eGl0Q291bnRlcik7IH0KLQotICAgIHVpbnQzMl90IGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xk
KHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOwotICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVz
aG9sZEZvclJlb3B0aW1pemF0aW9uKCk7Ci0gICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xk
Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOwotICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5v
dygpOwotICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCk7Ci0KLSAgICB2b2lk
IHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwotICAgIHZvaWQgc2V0Q2FsbGVl
U2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKLSAg
ICAKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoKTsgfQotI2Vsc2UgLy8gTm8gSklU
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkgeyByZXR1cm4gMDsgfTsKLSAgICB2b2lk
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBp
bGVzKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSAgICBib29sIHNob3VsZE9wdGltaXplTm93
KCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwotICAgIHZv
aWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlQWxsUHJlZGlj
dGlvbnMoKTsKLQotICAgIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudCgpOwotICAgIGludCBz
dGFja1BvaW50ZXJPZmZzZXQoKTsKLQotICAgIGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1
bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIGJvb2wgaGFzRGVidWdn
ZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQotICAgIHZv
aWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0
czsgfQotCi0gICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsK
LSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9udW1CcmVha3BvaW50cyA+PSBudW1CcmVha3BvaW50cyk7Ci0g
ICAgICAgIG1fbnVtQnJlYWtwb2ludHMgLT0gbnVtQnJlYWtwb2ludHM7Ci0gICAgfQotCi0gICAg
ZW51bSBTdGVwcGluZ01vZGUgewotICAgICAgICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKLSAgICAg
ICAgU3RlcHBpbmdNb2RlRW5hYmxlZAotICAgIH07Ci0gICAgdm9pZCBzZXRTdGVwcGluZ01vZGUo
U3RlcHBpbmdNb2RlKTsKLQotICAgIHZvaWQgY2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCkKLSAgICB7
Ci0gICAgICAgIG1fc3RlcHBpbmdNb2RlID0gU3RlcHBpbmdNb2RlRGlzYWJsZWQ7Ci0gICAgICAg
IG1fbnVtQnJlYWtwb2ludHMgPSAwOwotICAgIH0KLQotICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21w
aWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAgICAKLSAgICAvLyBGSVhNRTogTWFrZSB0
aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgotCi0gICAgaW50IG1fbnVtQ2FsbGVlTG9j
YWxzOwotICAgIGludCBtX251bVZhcnM7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBpbnRlbnRpb25h
bGx5IHB1YmxpYzsgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55b25lIGRvaW5nIGFueQot
ICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcgdG8gaG9sZCB0aGUgbG9jazoKLSAgICAvLwotICAgIC8v
IC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLgotICAgIC8v
Ci0gICAgLy8gLSBRdWVyaW5nIGFueSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBm
cm9tIGEgdGhyZWFkIG90aGVyIHRoYW4KLSAgICAvLyAgIHRoZSBtYWluIHRocmVhZC4KLSAgICAv
LwotICAgIC8vIEFkZGl0aW9uYWxseSwgaXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5s
aW5lIGNhY2hlIG9uIHRoZSBtYWluCi0gICAgLy8gdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0aGUgaW5saW5lIGNhY2hlIHdpdGhvdXQKLSAgICAvLyBs
b2NraW5nLiBUaGlzIGlzIGNydWNpYWwgc2luY2UgZXhlY3V0aW5nIHRoZSBpbmxpbmUgY2FjaGUg
aXMgZWZmZWN0aXZlbHkKLSAgICAvLyAicXVlcnlpbmciIGl0LgotICAgIC8vCi0gICAgLy8gQW5v
dGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZl
ciBpdCB3YW50cwotICAgIC8vIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhl
IEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBhbnkKLSAgICAvLyBjb25jdXJyZW50IGNv
bXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdoYXQgdGhleSdyZSBkb2luZy4KLSAgICBtdXRhYmxl
IENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKLQotICAgIEF0b21pYzxib29sPiBtX3Zpc2l0V2Vh
a2x5SGFzQmVlbkNhbGxlZDsKLQotICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8v
IE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KLQot
I2lmIEVOQUJMRShKSVQpCi0gICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7
IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCi0jZW5kaWYKLQotICAgIGJvb2wgbV9hbGxUcmFuc2l0
aW9uc0hhdmVCZWVuTWFya2VkIDogMTsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkg
R0MuCi0KLSAgICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKLSAgICBib29sIG1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKLSAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTCA6IDE7Ci0gICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOwotICAgIGJvb2wgbV9pc1N0
cmljdE1vZGUgOiAxOwotICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOyAvLyBDb2RlVHlwZQot
Ci0gICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQg
d291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKLSAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3
ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KLSAgICB2b2lkIGJlZ2luVmFsaWRh
dGlvbkRpZEZhaWwoKTsKLSAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRh
dGlvbkRpZEZhaWwoKTsKLQotICAgIHN0cnVjdCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZv
PiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwotCi0gICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFy
Z2UgYXJyYXkgbGl0ZXJhbHMKLSAgICAgICAgVmVjdG9yPFZlY3RvcjxKU1ZhbHVlPj4gbV9jb25z
dGFudEJ1ZmZlcnM7Ci0KLSAgICAgICAgLy8gSnVtcCBUYWJsZXMKLSAgICAgICAgVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Ci0KLSAgICAgICAgRXZhbENvZGVD
YWNoZSBtX2V2YWxDb2RlQ2FjaGU7Ci0gICAgfTsKLQotICAgIHZvaWQgY2xlYXJFeGNlcHRpb25I
YW5kbGVycygpCi0gICAgewotICAgICAgICBpZiAobV9yYXJlRGF0YSkKLSAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCi0gICAg
ewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IC8vIFdlIG1heSBiZSBoYW5k
bGluZyB0aGUgZXhjZXB0aW9uIG9mIGFuIGlubGluZWQgY2FsbCBmcmFtZS4KLSAgICAgICAgbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7Ci0gICAgfQotCi0g
ICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNp
dGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBz
ZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYp
OwotICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7Ci0jZW5kaWYKLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwotICAgIHZv
aWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7Ci0jZWxzZQotICAgIHZvaWQg
dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKLQotICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYg
bGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JF
bnRyeUJsb2NrT3JOdWxsKCk7Ci0gICAgCi0gICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhl
Y1N0YXRlKiBjYWxsZXJGcmFtZSk7Ci0gICAgCi0gICAgZG91YmxlIG9wdGltaXphdGlvblRocmVz
aG9sZFNjYWxpbmdGYWN0b3IoKTsKLQotICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRD
b3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKLQotICAgIHZvaWQgc2V0
Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7Ci0KLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChp
bnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0g
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0gICAgICAgIFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiomLAotICAgICAgICBj
b25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAm
ID0gQ2FsbExpbmtJbmZvTWFwKCkpOwotCi0gICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIp
IGNvbnN0OwotICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7Ci0gICAg
dm9pZCBwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50Qmlu
YXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50Q29uZGl0aW9uYWxKdW1w
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0
cnVjdGlvbiomLCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50
R2V0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJ
bnN0cnVjdGlvbiomKTsKLSAgICB2b2lkIHByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOwotICAg
IGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07Ci0gICAg
dm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwotICAgIHZvaWQg
cHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNv
bnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50UHV0QnlJ
ZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01h
cCYpOwotICAgIHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRl
KiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7Ci0g
ICAgdm9pZCBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBF
eGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNo
YXIqIG9wLCBpbnQgb3BlcmFuZCk7Ci0KLSAgICB2b2lkIGJlZ2luRHVtcFByb2ZpbGluZyhQcmlu
dFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIHZvaWQgZHVtcFZhbHVl
UHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJp
bnRlZFByb2ZpbGluZyk7Ci0gICAgdm9pZCBkdW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0m
LCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2
b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBS
YXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1
bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0mLCBBcml0aFByb2ZpbGUqLCBib29sJiBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKLQotICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseSgpOwotICAgIGJv
b2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKTsKLSAgICBib29sIHNob3VsZEpl
dHRpc29uRHVlVG9PbGRBZ2UoKTsKLSAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYp
OwotICAgICAgICAKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImKTsKLSAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoU2xvdFZpc2l0b3ImKTsKLQotICAg
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVNpbmNlQ3JlYXRpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM+KAotICAgICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkg
LSBtX2NyZWF0aW9uVGltZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAgIG1f
cmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwotICAgIH0KLQotICAgIHZv
aWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNv
dW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mKTsKLQotICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENv
ZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7Ci0gICAgaW50IG1fbnVtUGFyYW1ldGVyczsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVkIG1fZGVidWdnZXJSZXF1ZXN0czsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgOiAxOwot
ICAgICAgICAgICAgdW5zaWduZWQgbV9zdGVwcGluZ01vZGUgOiAxOwotICAgICAgICAgICAgdW5z
aWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwotICAgICAgICB9OwotICAgIH07Ci0gICAgV3Jp
dGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX293bmVyRXhlY3V0YWJsZTsKLSAgICBWTSogbV92
bTsKLQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwotICAgIFZpcnR1YWxSZWdpc3RlciBt
X3Njb3BlUmVnaXN0ZXI7Ci0gICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKLQotICAg
IFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7Ci0gICAgdW5zaWduZWQgbV9zb3VyY2VP
ZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7Ci0KLSAgICBSZWZD
b3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0luZm8+IG1fbGxpbnRDYWxsTGlua0luZm9zOwotICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKLSAgICBTdHJ1Y3R1
cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKLSAgICBSZWZQdHI8
SklUQ29kZT4gbV9qaXRDb2RlOwotI2lmIEVOQUJMRShKSVQpCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNz
OwotICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lD
czsKLSAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOwotICAgIEJhZzxCeVZhbEluZm8+IG1fYnlW
YWxJbmZvczsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgU2Vu
dGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9y
cGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2Rl
T3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwotI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7Ci0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2Vy
dmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKLSAgICAvLyBmb3IgREZHIGNvZGUgYmxvY2tz
LgotICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKLSAgICBDb21wcmVzc2VkTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7Ci0j
ZW5kaWYKLSAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmls
ZXM7Ci0gICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVBy
b2ZpbGVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPiBtX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGVzOwotICAgIEFycmF5UHJvZmlsZVZlY3RvciBtX2FycmF5UHJv
ZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PE9iamVjdEFsbG9jYXRpb25Qcm9maWxlPiBtX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlczsKLQotICAgIC8vIENvbnN0YW50IFBvb2wKLSAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIpID09IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXJfVW5rbm93bik7
Ci0gICAgLy8gVE9ETzogVGhpcyBjb3VsZCBqdXN0IGJlIGEgcG9pbnRlciB0byBtX3VubGlua2Vk
Q29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBERkcgbXV0YXRlcwotICAgIC8vIGl0LCBzbyB3ZSdy
ZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCi0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3du
Pj4gbV9jb25zdGFudFJlZ2lzdGVyczsKLSAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKLSAgICBSZWZDb3VudGVk
QXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsK
LSAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1f
ZnVuY3Rpb25FeHByczsKLQotICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRp
dmU7Ci0gICAgCi0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291
bnRlcjsKLQotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVy
OwotICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7Ci0gICAgdWludDE2X3QgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXI7Ci0gICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKLQotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVh
dGlvblRpbWU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
PiBtX2xpdmVuZXNzQW5hbHlzaXM7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1f
cmFyZURhdGE7Ci0KLSAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcjsKLSAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcjsKLX07Ci0KLS8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlv
biwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdAotLy8gcmVzcG9uc2libGUgZm9yIG1hcmtp
bmcgaXQuCi0KLWNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAg
IHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxv
Y2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBz
dGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFn
LCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxv
Y2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9j
az4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9ncmFt
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAg
ICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgICAgIFByb2dy
YW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3Jh
bUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwg
dm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3Ro
ZXIpCi0gICAgewotICAgIH0KLQotICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSog
c2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25l
ZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBz
dHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3Vy
Y2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLQotY2xhc3MgTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVk
ZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGlj
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1Rh
ZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgewotICAgICAgICBNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIE1vZHVsZVByb2dy
YW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29w
ZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgICAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25l
ckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZp
cnN0TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIs
IDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKLX07Ci0KIGNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMg
R2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBC
YXNlOwpAQCAtMTIwMSwxNzUgKzgxLDQgQEAgcHJpdmF0ZToKICAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIHVubGlua2VkRXZhbENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxVbmxp
bmtlZEV2YWxDb2RlQmxvY2sqPih1bmxpbmtlZENvZGVCbG9jaygpKTsgfQogfTsKIAotY2xhc3Mg
RnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBl
ZGVmIENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBGdW5j
dGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlv
bkNvZGVCbG9jayYgb3RoZXIpCi0gICAgewotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5z
dGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0t
PmhlYXApKQotICAgICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNv
ZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwot
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUq
IHNjb3BlLAotICAgICAgICBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
Ci0gICAgewotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVBy
b3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAgIGlu
c3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2Rl
QmxvY2ssIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
RnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQot
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0
aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsCi0gICAgICAgIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0
cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJj
ZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotCi0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotY2xhc3MgV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMg
Q29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOwotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCi0g
ICAgewotICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIFdlYkFzc2VtYmx5
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5Q29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayh2bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYg
b3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
aywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICA6IENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLX07Ci0jZW5kaWYKLQot
aW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0g
ICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6
cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19
Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
LSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRl
Ojp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgcmV0dXJuIHVuY2hlY2tl
ZFIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIHZvaWQgQ29kZUJsb2NrOjpjbGVhclZpc2l0
V2Vha2x5SGFzQmVlbkNhbGxlZCgpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQu
c3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENv
ZGVCbG9jayhGdW5jdG9yJiYgZnVuY3RvcikKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAg
IGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJs
b2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlw
ZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2Rl
QmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdl
dCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIEZ1bmN0b3IgZihzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAg
IGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1
dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2st
PmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5nZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVk
Q29kZUJsb2NrKGYpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkKLSAgICAgICAgICAgIGNv
ZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1
bmN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBFeGVjdXRhYmxlVHlwZT4KLUpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJl
Rm9yRXhlY3V0aW9uKFZNJiB2bSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3Bl
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIENvZGVCbG9jayomIHJlc3VsdENvZGVCbG9j
aykKLXsKLSAgICBpZiAoaGFzSklUQ29kZUZvcihraW5kKSkgewotICAgICAgICBpZiAoc3RkOjpp
c19zYW1lPEV4ZWN1dGFibGVUeXBlLCBFdmFsRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAg
ICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0
YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2Ft
ZTxFeGVjdXRhYmxlVHlwZSwgUHJvZ3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAg
IHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkpOwotICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3Nh
bWU8RXhlY3V0YWJsZVR5cGUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAg
ICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKLSAgICAgICAgZWxzZSBp
ZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBGdW5jdGlvbkV4ZWN1dGFibGU+Ojp2YWx1
ZSkKLSAgICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyktPmNvZGVCbG9ja0ZvcihraW5kKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gcHJlcGFyZUZvckV4ZWN1dGlv
bkltcGwodm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgcmVzdWx0Q29kZUJsb2NrKTsKLX0KLQot
I2RlZmluZSBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgc3VtbWFyeSwgZGV0YWlscykg
XAotICAgIChjb2RlQmxvY2stPnZtKCktPmxvZ0V2ZW50KGNvZGVCbG9jaywgc3VtbWFyeSwgWyZd
ICgpIHsgcmV0dXJuIHRvQ1N0cmluZyBkZXRhaWxzOyB9KSkKLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlv
bkNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIwODMwMykJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHA6MjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCwgMjAxMi0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKKyNpbmNsdWRlICJCYXNp
Y0Jsb2NrTG9jYXRpb24uaCIKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1
ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVm
LmgiCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQu
aCIKKyNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIK
KyNpbmNsdWRlICJERkdEcml2ZXIuaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiREZHV29ya2xpc3QuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCIKKyNpbmNsdWRlICJHZXRQdXRJbmZvLmgiCisjaW5jbHVkZSAi
SW5saW5lQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJK
SVQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisj
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50Lmgi
CisjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5o
IgorI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgorI2luY2x1ZGUgIkxMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkxvd0xldmVsSW50
ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlBy
b2ZpbGVyRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVk
ZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUg
IlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVk
ZSAiVHlwZUxvY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKKyNpbmNs
dWRlICJVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSAiVk1JbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0JhZ1Rv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
U2ltcGxlU3RhdHMuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmlu
Z0ltcGwuaD4KKworI2lmIEVOQUJMRShKSVQpCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExp
c3QuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0
aW9ucy5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyNpbmNsdWRlICJGVExKSVRD
b2RlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiQ29kZUJsb2NrIiwgMCwgMCwKKyAgICBDUkVBVEVfTUVU
SE9EX1RBQkxFKENvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkNvZGVC
bG9jazo6c19pbmZvID0geworICAgICJGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkNvZGVCbG9jaykKK307CisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnNfaW5mbyA9IHsKKyAgICAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlDb2RlQmxvY2spCit9Owor
I2VuZGlmCisKK2NvbnN0IENsYXNzSW5mbyBHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAg
ICAiR2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9E
X1RBQkxFKEdsb2JhbENvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBQcm9ncmFtQ29k
ZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIlByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUNvZGVCbG9jaykKK307CisKK2Nv
bnN0IENsYXNzSW5mbyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIk1v
ZHVsZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBF
dmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19p
bmZvLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbENvZGVCbG9jaykKK307CisKK3Zv
aWQgRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2Fz
dDxGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+RnVuY3Rpb25Db2RlQmxvY2soKTsKK30KKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK3ZvaWQgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNl
bGwpLT5+V2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKK30KKyNlbmRpZgorCit2b2lkIFByb2dyYW1D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxQcm9ncmFtQ29k
ZUJsb2NrKj4oY2VsbCktPn5Qcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+fk1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKK30K
Kwordm9pZCBFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nh
c3Q8RXZhbENvZGVCbG9jayo+KGNlbGwpLT5+RXZhbENvZGVCbG9jaygpOworfQorCitDU3RyaW5n
IENvZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvZGVUeXBl
KCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgICAgIHJldHVybiAiPGdsb2JhbD4iOwor
ICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIHJldHVybiAiPGV2YWw+IjsKKyAgICBjYXNlIEZ1
bmN0aW9uQ29kZToKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKKyAgICBjYXNlIE1vZHVs
ZUNvZGU6CisgICAgICAgIHJldHVybiAiPG1vZHVsZT4iOworICAgIGRlZmF1bHQ6CisgICAgICAg
IENSQVNIKCk7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKKyAgICB9Cit9CisKK2Jv
b2wgQ29kZUJsb2NrOjpoYXNIYXNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2hhc2g7Cit9
CisKK2Jvb2wgQ29kZUJsb2NrOjppc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIWlzQ29tcGlsYXRpb25UaHJlYWQoKTsKK30KKworQ29kZUJsb2NrSGFzaCBDb2RlQmxv
Y2s6Omhhc2goKSBjb25zdAoreworICAgIGlmICghbV9oYXNoKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzU2FmZVRvQ29tcHV0ZUhhc2goKSk7CisgICAgICAgIG1faGFzaCA9IENvZGVCbG9j
a0hhc2gob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktp
bmQoKSk7CisgICAgfQorICAgIHJldHVybiBtX2hhc2g7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2Nr
Ojpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAoreworICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1
bmN0aW9uQ29kZSkKKyAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3Vy
Y2UoKS50b1VURjgoKTsKKyAgICAKKyAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3Vy
Y2UoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOworICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiB1bmxpbmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwor
ICAgIHVuc2lnbmVkIHVubGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQo
KTsKKyAgICB1bnNpZ25lZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCk7CisgICAgaW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxp
bmtlZFN0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSArIHVubGlu
a2VkLT51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCk7CisgICAgdW5zaWduZWQgcmFuZ2VFbmQg
PSBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0
aCgpOworICAgIHJldHVybiB0b0NTdHJpbmcoCisgICAgICAgICJmdW5jdGlvbiAiLAorICAgICAg
ICBwcm92aWRlci0+c291cmNlKCkuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFu
Z2VTdGFydCkudXRmOCgpKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9u
ZUxpbmUoKSBjb25zdAoreworICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVG
b3JUb29scygpKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2li
bGUoKSBjb25zdAoreworICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgp
KQorICAgICAgICByZXR1cm4gdG9DU3RyaW5nKGhhc2goKSk7CisgICAgcmV0dXJuICI8bm8taGFz
aD4iOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVh
bSYgb3V0LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KGluZmVycmVkTmFtZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7CisgICAgb3V0
LnByaW50KCI6WyIsIFJhd1BvaW50ZXIodGhpcyksICItPiIpOworICAgIGlmICghIW1fYWx0ZXJu
YXRpdmUpCisgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKGFsdGVybmF0aXZlKCkpLCAiLT4i
KTsKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGpp
dFR5cGUsIGNvZGVUeXBlKCkpOworCisgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KQorICAgICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIG91dC5wcmlu
dCgiLCAiLCBpbnN0cnVjdGlvbkNvdW50KCkpOworICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCisgICAgICAg
IG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7CisgICAgaWYgKG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAoTmV2
ZXJJbmxpbmUpIik7CisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGlt
aXplKCkpCisgICAgICAgIG91dC5wcmludCgiIChOZXZlck9wdGltaXplKSIpOworICAgIGVsc2Ug
aWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlckZUTE9wdGltaXplKCkpCisgICAgICAg
IG91dC5wcmludCgiIChOZXZlckZUTE9wdGltaXplKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQorICAgICAgICBvdXQucHJpbnQoIiAo
RGlkVHJ5VG9FbnRlckluTG9vcCkiKTsKKyAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKKyAg
ICBpZiAobV9kaWRGYWlsSklUQ29tcGlsYXRpb24pCisgICAgICAgIG91dC5wcmludCgiIChKSVRG
YWlsKSIpOworICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQg
JiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCisgICAgICAgIG91dC5wcmludCgiIChGVExGYWls
KSIpOworICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYg
bV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKQorICAgICAgICBvdXQucHJpbnQoIiAoSGFkRlRMUmVw
bGFjZW1lbnQpIik7CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEFzc3VtaW5nSklUVHlwZShv
dXQsIGppdFR5cGUoKSk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwo
KSwgIihAaWQiLCBpZDAsICIpIik7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5h
bWUoaW50IHIpIGNvbnN0Cit7CisgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQor
ICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOworCisgICAgcmV0dXJuIHRvQ1N0cmluZyhW
aXJ0dWFsUmVnaXN0ZXIocikpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6Y29uc3RhbnROYW1l
KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnQoaW5k
ZXgpOworICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGlu
ZGV4KSwgIikiKTsKK30KKworc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVn
RXhwKiByZWdFeHApCit7CisgICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAg
fTsKKyAgICBpbnQgaW5kZXggPSAxOworICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQorICAgICAg
ICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOworICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkK
KyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKKyAgICBpZiAocmVnRXhwLT5tdWx0aWxp
bmUoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7CisgICAgaWYgKHJlZ0V4cC0+c3Rp
Y2t5KCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAneSc7CisgICAgaWYgKHJlZ0V4cC0+
dW5pY29kZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOworCisgICAgcmV0dXJu
IHRvQ1N0cmluZygiLyIsIHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Cit9CisK
K3N0YXRpYyBDU3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKK3sKKyAg
ICByZXR1cm4gdG9DU3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwg
cmUsICIpIik7Cit9CisKK05FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb29r
TmFtZShpbnQgZGVidWdIb29rVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERlYnVn
SG9va1R5cGU+KGRlYnVnSG9va1R5cGUpKSB7CisgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJh
bWU6CisgICAgICAgICAgICByZXR1cm4gImRpZEVudGVyQ2FsbEZyYW1lIjsKKyAgICAgICAgY2Fz
ZSBXaWxsTGVhdmVDYWxsRnJhbWU6CisgICAgICAgICAgICByZXR1cm4gIndpbGxMZWF2ZUNhbGxG
cmFtZSI7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gIndpbGxFeGVjdXRlU3RhdGVtZW50IjsKKyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4
cHJlc3Npb246CisgICAgICAgICAgICByZXR1cm4gIndpbGxFeGVjdXRlRXhwcmVzc2lvbiI7Cisg
ICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVQcm9ncmFtOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxs
RXhlY3V0ZVByb2dyYW0iOworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgorICAgICAg
ICAgICAgcmV0dXJuICJkaWRFeGVjdXRlUHJvZ3JhbSI7CisgICAgICAgIGNhc2UgRGlkUmVhY2hC
cmVha3BvaW50OgorICAgICAgICAgICAgcmV0dXJuICJkaWRSZWFjaEJyZWFrcG9pbnQiOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOwor
fQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNT
dGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBj
aGFyKiBvcCkKK3sKKyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKK3sKKyAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludENv
bmRpdGlvbmFsSnVtcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElu
c3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgaW50IGxvY2F0aW9uLCBjb25zdCBj
aGFyKiBvcCkKK3sKKyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgb2Zm
c2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50ZigiJXMsICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworfQorCit2
b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRl
KiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCit7CisgICAgY29u
c3QgY2hhciogb3A7CisgICAgc3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJ
RChpdC0+dS5vcGNvZGUpKSB7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIG9wID0g
ImdldF9ieV9pZCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xvYWQ6CisgICAgICAgIG9wID0gImdldF9ieV9pZF9wcm90b19sb2FkIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6CisgICAgICAgIG9wID0gImdldF9ieV9p
ZF91bnNldCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoK
KyAgICAgICAgb3AgPSAiYXJyYXlfbGVuZ3RoIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNpZiBDT01QSUxFUl9R
VUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKKyAgICAgICAgb3AgPSAwOworI2VuZGlm
CisgICAgfQorICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7CisgICAg
aXQgKz0gNDsgLy8gSW5jcmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KK30KKworc3Rh
dGljIHZvaWQgZHVtcFN0cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1l
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAg
aWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnRmKCIl
cyA9ICVwIiwgbmFtZSwgc3RydWN0dXJlKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShpZGVudC5pbXBsKCkpOworICAgIGlmIChv
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAl
ZCkiLCBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91
dCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAg
ICBvdXQucHJpbnRmKCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOworICAgIGJvb2wgZmlyc3QgPSB0
cnVlOworICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBjaGFpbi0+aGVhZCgpOworICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7CisgICAgICAgICAr
K2N1cnJlbnRTdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmly
c3QgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsK
KyAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBjdXJyZW50U3RydWN0dXJlLT5n
ZXQoKSwgaWRlbnQpOworICAgIH0KKyAgICBvdXQucHJpbnRmKCJdIik7Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBFeGVjU3Rh
dGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKK3sKKyAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRp
b247CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oaWRlbnQpOyAvLyB0ZWxs
IHRoZSBjb21waWxlciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29uZmlndXJhdGlv
bnMuCisgICAgCisgICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBvcF9nZXRfYXJyYXlfbGVuZ3RoKQorICAgICAgICBvdXQu
cHJpbnRmKCIgbGxpbnQoYXJyYXlfbGVuZ3RoKSIpOworICAgIGVsc2UgaWYgKFN0cnVjdHVyZUlE
IHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChz
dHJ1Y3R1cmVJRCk7CisgICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKKyAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgb3V0
LnByaW50ZigiKSIpOworICAgICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2Rl
SUQoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9ieV9pZF9wcm90b19sb2FkKQor
ICAgICAgICAgICAgb3V0LnByaW50ZigiIHByb3RvKCVwKSIsIGluc3RydWN0aW9uWzZdLnUucG9p
bnRlcik7CisgICAgfQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJQdHIgPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJ
bmZvLnJlc2V0QnlHQykKKyAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsK
KyAgICAgICAgCisgICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CisgICAgICAgICAgICAKKyAg
ICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOworICAgICAgICAgICAgCisgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKKyAgICAgICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKKyAgICAgICAgICAgIGJhc2VT
dHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICBzdHViID0gc3R1YkluZm8u
dS5zdHViOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNl
dDoKKyAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJyYXlMZW5ndGgiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzdHViKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsK
KworICAgICAgICBvdXQucHJpbnRmKCIpIik7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0obWFwKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVT
dGF0dXMoUHJpbnRTdHJlYW0mIG91dCwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYg
bWFwKQoreworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBsb2NhdGlvbjsKKworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRp
ZmllcihpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgIAorICAgIFVOVVNFRF9QQVJBTShp
ZGVudCk7IC8vIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9y
bSBjb25maWd1cmF0aW9ucy4KKworICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbls4XS51
LnB1dEJ5SWRGbGFncyk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0g
aW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Cisg
ICAgICAgIG91dC5wcmludCgiIGxsaW50KCIpOworICAgICAgICBpZiAoU3RydWN0dXJlSUQgbmV3
U3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEKSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChuZXdTdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInBy
ZXYiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIG5ld1N0cnVjdHVyZSwgaWRlbnQp
OworICAgICAgICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzdd
LnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
Iik7CisgICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwg
InN0cnVjdCIsIHN0cnVjdHVyZSwgaWRlbnQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0
ciA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7CisgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9ICpzdHViUHRyOworICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRC
eUdDKQorICAgICAgICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdDKSIpOworICAgICAgICAK
KyAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
c3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKKyAgICAgICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7CisgICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpz
dHViSW5mby51LnN0dWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgorICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIG91dC5wcmludGYoIikiKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSht
YXApOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVh
bSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiBpdCwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYg
aGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCit7CisgICAg
aW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFt
ZShkc3QpLCAiLCAiLCByZWdpc3Rlck5hbWUoZnVuYyksICIsICIsIGFyZ0NvdW50LCAiLCAiLCBy
ZWdpc3Rlck9mZnNldCk7CisgICAgb3V0LnByaW50KCIgKHRoaXMgYXQgIiwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgLXJlZ2lzdGVyT2Zmc2V0KSwgIikiKTsKKyAgICBpZiAoY2FjaGVE
dW1wTW9kZSA9PSBEdW1wQ2FjaGVzKSB7CisgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPSBpdFsxXS51LmNhbGxMaW5rSW5mbzsKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by0+bGFzdFNlZW5DYWxsZWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludGYoCisgICAgICAgICAg
ICAgICAgIiBsbGludCglcCwgZXhlYyAlcCkiLAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+bGFzdFNlZW5DYWxsZWUuZ2V0KCksCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5s
YXN0U2VlbkNhbGxlZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShKSVQp
CisgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9j
YXRpb24pKSkgeworICAgICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNl
ZW5DYWxsZWUoKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiIGppdCglcCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2Rl
OjpGVExKSVQpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7CisjZWxzZQorICAgICAg
ICBVTlVTRURfUEFSQU0obWFwKTsKKyNlbmRpZgorICAgIH0KKyAgICArK2l0OworICAgICsraXQ7
CisgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwor
ICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNT
dGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBj
aGFyKiBvcCkKK3sKKyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgaWQw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgIGl0ICs9IDU7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkKK3sKKyAgICBk
dW1wU291cmNlKFdURjo6ZGF0YUZpbGUoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wU291
cmNlKFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0
aW9uRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKKyAgICAgICAgU3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCktPmdldFJhbmdlKAorICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSwKKyAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5nIGVu
ZCBvZmZzZXQgaXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KKyAgICAgICAgCisgICAg
ICAgIG91dC5wcmludCgiZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCksIHNvdXJjZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZp
ZXcoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoKQoreworICAgIGR1bXBC
eXRlY29kZShXVEY6OmRhdGFGaWxlKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgLy8gV2Ugb25seSB1c2UgdGhlIEV4ZWNTdGF0
ZSogZm9yIHRoaW5ncyB0aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhlY3V0aW9uLAor
ICAgIC8vIGxpa2UgY29udmVydGluZyBhIEpTU3RyaW5nIHRvIGEgU3RyaW5nLiBIZW5jZSB0aGUg
Z2xvYmFsRXhlYyBpcyBhcHByb3ByaWF0ZS4KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIAorICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50
ID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OyBpICs9IG9wY29kZUxlbmd0aHNbZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5z
dHJ1Y3Rpb25zKClbaV0udS5vcGNvZGUpXSkKKyAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50Owor
CisgICAgb3V0LnByaW50KCp0aGlzKTsKKyAgICBvdXQucHJpbnRmKAorICAgICAgICAiOiAlbHUg
bV9pbnN0cnVjdGlvbnM7ICVsdSBieXRlczsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVn
aXN0ZXIocyk7ICVkIHZhcmlhYmxlKHMpIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCisg
ICAgICAgIG1fbnVtUGFyYW1ldGVycywgbV9udW1DYWxsZWVMb2NhbHMsIG1fbnVtVmFycyk7Cisg
ICAgb3V0LnByaW50KCI7IHNjb3BlIGF0ICIsIHNjb3BlUmVnaXN0ZXIoKSk7CisgICAgb3V0LnBy
aW50ZigiXG4iKTsKKyAgICAKKyAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7CisgICAgQ2FsbExp
bmtJbmZvTWFwIGNhbGxMaW5rSW5mb3M7CisgICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsK
KyAgICBnZXRDYWxsTGlua0luZm9NYXAoY2FsbExpbmtJbmZvcyk7CisgICAgCisgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBjb25zdCBJ
bnN0cnVjdGlvbiogZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7CisgICAgZm9yIChjb25zdCBJ
bnN0cnVjdGlvbiogaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBkdW1wQnl0
ZWNvZGUob3V0LCBleGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Cisg
ICAgCisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBvdXQucHJpbnRm
KCJcbklkZW50aWZpZXJzOlxuIik7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgb3V0LnByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpKSwgaWRlbnRpZmllcihpKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSAhPSBudW1iZXJPZklkZW50aWZpZXJzKCkp
OworICAgIH0KKworICAgIGlmICghbV9jb25zdGFudFJlZ2lzdGVycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgb3V0LnByaW50ZigiXG5Db25zdGFudHM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGkgPSAw
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb25EZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICBzd2l0Y2ggKG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2ldKSB7CisgICAgICAgICAgICBjYXNlIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOgorICAgICAgICAgICAgICAgIHNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGRvdWJsZSI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRp
b25EZXNjcmlwdGlvbiA9ICI6IGluIHNvdXJjZSBhcyBpbnRlZ2VyIjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cjoKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9
ICIiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0LnByaW50ZigiICAgayV1ID0gJXMlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0
b0NTdHJpbmcobV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpLCBzb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0g
d2hpbGUgKGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgfQorCisgICAgaWYg
KHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgeworICAg
ICAgICBvdXQucHJpbnRmKCJcbm1fcmVnZXhwczpcbiIpOworICAgICAgICBzaXplX3QgaSA9IDA7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVzXG4iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5saW5rZWRD
b2RlLT5yZWdleHAoaSkpLmRhdGEoKSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hp
bGUgKGkgPCBjb3VudCk7CisgICAgfQorCisgICAgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKG91dCk7
CisgICAgCisgICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiU3dpdGNoIEp1bXAgVGFibGVz
OlxuIik7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIgICUxZCA9IHtcbiIsIGkpOworICAgICAgICAgICAgaW50IGVudHJ5ID0g
MDsKKyAgICAgICAgICAgIFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9y
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuZW5kKCk7CisgICAg
ICAgICAgICBmb3IgKFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIsICsrZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISppdGVyKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJcdFx0JTRkID0+ICUwNGRcbiIsIGVudHJ5ICsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzW2ldLm1pbiwgKml0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50
ZigiICAgICAgfVxuIik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBt
X3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiXG5TdHJpbmcgU3dpdGNoIEp1bXAgVGFi
bGVzOlxuIik7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIgICUxZCA9IHtcbiIsIGkpOworICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAg
ICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNl
dFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBpdGVyLT5rZXktPnV0ZjgoKS5kYXRhKCks
IGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgICAg
ICB9XG4iKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOworICAgIH0KKworICAgIG91dC5w
cmludGYoIlxuIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMo
UHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiXG5F
eGNlcHRpb24gSGFuZGxlcnM6XG4iKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlx0ICVkOiB7IHN0
YXJ0OiBbJTRkXSBlbmQ6IFslNGRdIHRhcmdldDogWyU0ZF0gfSAlc1xuIiwKKyAgICAgICAgICAg
ICAgICBpICsgMSwgaGFuZGxlci5zdGFydCwgaGFuZGxlci5lbmQsIGhhbmRsZXIudGFyZ2V0LCBo
YW5kbGVyLnR5cGVOYW1lKCkpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChp
IDwgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOworICAgIH0KK30KKwor
dm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKQoreworICAgIGlmIChoYXNQcmludGVkUHJvZmlsaW5nKSB7
CisgICAgICAgIG91dC5wcmludCgiOyAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBvdXQucHJpbnQoIiAgICAiKTsKKyAgICBoYXNQcmludGVkUHJvZmlsaW5nID0gdHJ1ZTsK
K30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgKytpdDsK
KyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlv
bihsb2NrZXIpOworICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAg
ICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5
UHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAKKyAgICArK2l0OworICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQor
ICAgICAgICByZXR1cm47CisgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJv
ZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOworICAgIGlmICghZGVzY3JpcHRp
b24ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0
LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOworfQor
Cit2b2lkIENvZGVCbG9jazo6ZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpCit7CisgICAgaWYgKCFwcm9maWxlIHx8ICFwcm9maWxlLT5tX2NvdW50ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50
ZWRQcm9maWxpbmcpOworICAgIG91dC5wcmludChuYW1lLCBwcm9maWxlLT5tX2NvdW50ZXIpOwor
fQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBB
cml0aFByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCit7CisgICAg
aWYgKCFwcm9maWxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYmVnaW5EdW1wUHJvZmls
aW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0LnByaW50KCJyZXN1bHRzOiAi
LCAqcHJvZmlsZSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3AoUHJp
bnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCkKK3sKKyAgICBvdXQucHJpbnRmKCJbJTRkXSAlLTE3cyAiLCBs
b2NhdGlvbiwgb3ApOworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0
aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQp
Cit7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7
CisgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0YSgpKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiBpdCwKKyAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlu
a0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCit7CisgICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdp
bjsKKyAgICBib29sIGhhc1ByaW50ZWRQcm9maWxpbmcgPSBmYWxzZTsKKyAgICBPcGNvZGVJRCBv
cGNvZGUgPSBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOwor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9zY29w
ZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJnZXRfc2NvcGUiLCByMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfc2NvcGVkX2FyZ3Vt
ZW50cyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2Nsb25lZF9hcmd1
bWVudHMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9h
cmd1bWVudF9jb3VudDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJhcmd1bWVudF9jb3VudCIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgrK2l0
KS0+dS51bnNpZ25lZFZhbHVlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBh
cmd1bWVudE9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9yZXN0X2xlbmd0aDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJnZXRfcmVzdF9sZW5ndGgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudE9mZnNldCA9ICgrK2l0KS0+dS51bnNpZ25lZFZhbHVlOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJndW1lbnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNh
cGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRG
dW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3RoaXMiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXUsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBjYWNoZWRGdW5j
dGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rv
X3RoaXM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAidG9fdGhpcyIsIHIwKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gKCsraXQpLT51LnN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUp
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIGNhY2hlKHN0cnVjdCA9ICIsIFJhd1BvaW50
ZXIoc3RydWN0dXJlKSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAoKytpdCkt
PnUudG9UaGlzU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2NoZWNrX3RkeiIsIHIwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogeworICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmZl
cnJlZElubGluZUNhcGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfb2JqZWN0Iik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
aW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICArK2l0OyAvLyBTa2lwIG9iamVj
dCBhbGxvY2F0aW9uIHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX25ld19hcnJheTogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXkiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShhcmd2KS5kYXRhKCksIGFyZ2MpOworICAgICAgICAgICAgKytpdDsg
Ly8gU2tpcCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKKyAgICAgICAg
ICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBsZW5ndGgg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV93aXRoX3NpemUiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGxlbmd0aCkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxs
b2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV9idWZm
ZXIiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUo
ZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJh
eSBhbGxvY2F0aW9uIHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3
X3JlZ2V4cCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5r
ZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cyIsIHJlZ2V4cE5hbWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX21vdjogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm1vdiIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgICsraXQ7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAg
ICAgICsraXQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9wcm9maWxlX3R5cGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogeworICAgICAgICAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSAoKytpdCktPnUuYmFzaWNC
bG9ja0xvY2F0aW9uOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAicHJvZmlsZV9jb250cm9sX2Zsb3ciKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIlslZCwgJWRdIiwgYmFzaWNCbG9ja0xvY2F0aW9uLT5zdGFydE9mZnNldCgpLCBiYXNp
Y0Jsb2NrTG9jYXRpb24tPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3Bfbm90OiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJub3QiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlcV9udWxsIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcTogeworICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcSIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogeworICAgICAgICAgICAgcHJp
bnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxX251bGwiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKKyAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzdHJpY3RlcSIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uc3RyaWN0
ZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJuc3RyaWN0ZXEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbGVzczogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImxlc3MiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfbGVzc2VxOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibGVzc2VxIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2dyZWF0ZXI6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJncmVhdGVyIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogeworICAgICAgICAgICAgcHJpbnRC
aW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXJlcSIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbmM6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5jIiwgcjApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWM6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVj
IiwgcjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90
b19udW1iZXI6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInRvX251bWJlciIpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwg
aXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF90b19zdHJpbmc6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX3N0cmluZyIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgICAgIHByaW50
VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lZ2F0ZSIpOworICAgICAgICAgICAg
KytpdDsgLy8gb3BfbmVnYXRlIGhhcyBhbiBleHRyYSBvcGVyYW5kIGZvciB0aGUgQXJpdGhQcm9m
aWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hZGQ6
IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJh
ZGQiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX211bDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm11bCIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGl2OiB7CisgICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGl2Iik7CisgICAgICAgICAg
ICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9t
b2Q6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJtb2QiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cG93OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicG93Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3N1YjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN1YiIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibHNoaWZ0Iik7CisgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAg
ICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJzaGlmdCIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7
CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidXJz
aGlmdCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9i
aXRhbmQ6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJiaXRhbmQiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdHhvcjogeworICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImJpdHhvciIpOworICAgICAgICAgICAgKytp
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0b3I6
IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJi
aXRvciIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZTogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3Zl
cnJpZGVzX2hhc19pbnN0YW5jZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0YW5jZW9mIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Imluc3RhbmNlb2ZfY3VzdG9tIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdW5zaWduZWQ6IHsKKyAg
ICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVuc2lnbmVk
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3R5cGVv
ZjogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
dHlwZW9mIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2lzX2VtcHR5OiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJpc19lbXB0eSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX3VuZGVmaW5lZCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7CisgICAgICAgICAgICBw
cmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19ib29sZWFuIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewor
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfbnVt
YmVyIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lz
X2NlbGxfd2l0aF90eXBlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHR5cGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2NlbGxfd2l0aF90eXBlIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7CisgICAgICAgICAgICBwcmludFVu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6IHsK
KyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29i
amVjdF9vcl9udWxsIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2lzX2Z1bmN0aW9uOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJpc19mdW5jdGlvbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0cnlfZ2V0
X2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVu
dGlmaWVyKGlkMCkpLmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0
LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
cHJvdG9fbG9hZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDogeworICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQpOworICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0
dXMob3V0LCBleGVjLCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKKyAgICAgICAgICAgIGR1bXBWYWx1
ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczogewor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Z2V0X2J5X2lkX3dpdGhfdGhpcyIpOworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMikuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7
CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2Zp
bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dl
dF9ieV92YWxfd2l0aF90aGlzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9ieV92YWxfd2l0aF90aGlzIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MykuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pZCIpOworICAgICAgICAgICAgcHJpbnRQdXRCeUlk
Q2FjaGVTdGF0dXMob3V0LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lk
X3dpdGhfdGhpcyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShp
ZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxf
d2l0aF90aGlzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInB1dF9ieV92YWxfd2l0aF90aGlzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dl
dHRlcl9ieV9pZDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
bjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAicHV0X2dldHRlcl9ieV9pZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
dF9zZXR0ZXJfYnlfaWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSku
ZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBu
MCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9i
eV92YWw6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicHV0X2dldHRlcl9ieV92YWwiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBuMCwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0dGVyX2J5X3ZhbCIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIp
LmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2RlZmluZV9kYXRhX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImRlZmluZV9kYXRhX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMykuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByNCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjMpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJk
ZWxfYnlfaWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlk
ZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbCIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAg
ICAgICAgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfdmFsIik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wQXJy
YXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfdmFsX2RpcmVjdCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcEFycmF5UHJvZmls
aW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlf
dmFsIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRh
dGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pbmRleDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaW5kZXgiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAldSwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgbjAsIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3Bfam1wOiB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJqbXAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVkKC0+JWQpIiwgb2Zm
c2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2p0cnVlOiB7CisgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVt
cChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqdHJ1ZSIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKKyAgICAgICAgICAg
IHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpm
YWxzZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9q
ZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBi
ZWdpbiwgaXQsIGxvY2F0aW9uLCAiamVxX251bGwiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CisgICAgICAgICAgICBwcmludENv
bmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqbmVxX251bGwi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5lcV9w
dHI6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOwor
ICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5lcV9wdHIiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCBwb2ludGVyLCBtX2dsb2JhbE9iamVjdC0+YWN0dWFsUG9pbnRlckZv
cihwb2ludGVyKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICArK2l0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbGVzczog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImpsZXNzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpsZXNzZXEi
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24g
KyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9qZ3JlYXRlcjogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpncmVhdGVyIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImpncmVhdGVyZXEiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3MiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBv
ZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9q
bmxlc3NlcTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZz
ZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpubGVzc2VxIik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiam5ncmVhdGVyIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+
JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBv
ZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXJl
cSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlv
biArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2xvb3BfaGludDogeworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibG9vcF9oaW50Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3dhdGNoZG9nOiB7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ3YXRjaGRvZyIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJsb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3Bfc3dpdGNoX2ltbTogeworICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN3aXRjaF9pbW0iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwg
JXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQs
IHJlZ2lzdGVyTmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKKyAgICAgICAg
ICAgIGludCB0YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
ZGVmYXVsdFRhcmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNjcnV0
aW5lZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfY2hhciIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRU
YXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJl
Z2lzdGVyKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7CisgICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAic3dpdGNoX3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJWQs
ICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVm
YXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAibmV3X2Z1bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVk
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19nZW5l
cmF0b3JfZnVuYzogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBm
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1
bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibmV3X2Z1bmNfZXhwIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5l
d19hc3luY19mdW5jX2V4cCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6IHsKKyAgICAgICAgICAgIGludCBmdW5jUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgbmFtZVJlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic2V0X2Z1bmN0
aW9uX25hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShmdW5jUmVnKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuYW1lUmVnKS5kYXRhKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAg
ICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2Fj
aGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAgICAg
ICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRhaWxfY2FsbCIsIER1bXBD
YWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAg
ICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9u
dER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCB0aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCBhcmd1bWVudHMgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdEZy
ZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHZhckFyZ09m
ZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG9wTmFtZTsKKyAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2FsbF92
YXJhcmdzKQorICAgICAgICAgICAgICAgIG9wTmFtZSA9ICJjYWxsX3ZhcmFyZ3MiOworICAgICAg
ICAgICAgZWxzZSBpZiAob3Bjb2RlID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAgICAgICAg
ICAgICAgIG9wTmFtZSA9ICJjb25zdHJ1Y3RfdmFyYXJncyI7CisgICAgICAgICAgICBlbHNlIGlm
IChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCisgICAgICAgICAgICAgICAgb3BOYW1l
ID0gInRhaWxfY2FsbF92YXJhcmdzIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgICAgICAgICAgb3BOYW1lID0g
InRhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyI7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcE5hbWUpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVkLCAlZCIsIHJlZ2lzdGVyTmFtZShy
ZXN1bHQpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
dGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RG
cmVlUmVnaXN0ZXIsIHZhckFyZ09mZnNldCk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxp
bmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfcmV0OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVy
T3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJldCIsIHIwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAg
ICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1
bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgY291bnQgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN0cmNhdCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY291bnQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6
IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b19wcmltaXRpdmUiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkp
OworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVw
IiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7CisgICAgICAg
ICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRv
ciA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1l
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3By
b3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVy
dHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUp
LmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmlj
X3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgaW5kZXggPSBpdFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9
IGl0WzVdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0
WzZdLnUucHJvZmlsZTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX2dldF9kaXJlY3RfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9y
KS5kYXRhKCksIHByb2ZpbGUpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9n
ZXRfZGlyZWN0X3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGlu
dCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShi
YXNlKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcHJv
cGVydHlfZW51bWVyYXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogeworICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0g
aXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAib3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShl
bnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpIC0g
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgo
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgp
LmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0
cmluZykgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9wdXNoX3dpdGhfc2NvcGU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBuZXdTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGN1cnJlbnRTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRo
X3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJO
YW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUobmV3U2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGN1cnJlbnRTY29wZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZTogeworICAgICAgICAgICAgaW50IGRz
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHBhcmVudFNjb3BlID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJnZXRfcGFyZW50X3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwYXJl
bnRTY29wZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKKyAgICAgICAgICAgIGludCBk
c3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgaW5pdGlhbFZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJj
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcywgJXMiLCAKKyAgICAgICAgICAgICAgICByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3ltYm9sVGFibGUpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGluaXRpYWxWYWx1ZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJjYXRjaCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3ciLCBy
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjogeworICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBFcnJvclR5cGUgazEgPSBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KCgrK2l0
KS0+dS51bnNpZ25lZFZhbHVlKTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRocm93X3N0YXRpY19lcnJvciIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICIsIGNvbnN0YW50TmFtZShrMCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IG91dC5wcmludChrMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2RlYnVnOiB7CisgICAgICAgICAgICBpbnQgZGVidWdIb29rVHlwZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGhhc0JyZWFrcG9pbnRGbGFnID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJkZWJ1ZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgZGVi
dWdIb29rTmFtZShkZWJ1Z0hvb2tUeXBlKSwgaGFzQnJlYWtwb2ludEZsYWcpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hc3NlcnQ6IHsKKyAgICAgICAg
ICAgIGludCBjb25kaXRpb24gPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBs
aW5lID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJhc3NlcnQiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlZCIsIHJlZ2lzdGVyTmFtZShjb25kaXRpb24pLmRhdGEoKSwgbGluZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VuZDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbmQiLCBy
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPigoKytpdCktPnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBpbnQgZGVwdGggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHZvaWQq
IHBvaW50ZXIgPSAoKytpdCktPnUucG9pbnRlcjsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJlc29sdmVfc2NvcGUiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsIDwlcz4sICVkLCAlcCIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKS5kYXRhKCksIHJlc29sdmVUeXBlTmFtZShyZXNvbHZlVHlwZSksIGRlcHRoLCBw
b2ludGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fc2NvcGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1
dEluZm8gPSBHZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKKyAgICAgICAgICAgICsraXQ7
IC8vIFN0cnVjdHVyZQorICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFu
ZDsgLy8gT3BlcmFuZAorICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiZ2V0X2Zyb21fc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludChy
ZWdpc3Rlck5hbWUocjApLCAiLCAiLCByZWdpc3Rlck5hbWUocjEpKTsKKyAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgYW5vbnltb3VzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkpOworICAg
ICAgICAgICAgb3V0LnByaW50KCIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29s
dmVNb2RlTmFtZShnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFt
ZShnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUo
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSksICI+LCAiLCBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Nj
b3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0
UHV0SW5mbygoKytpdCktPnUub3BlcmFuZCk7CisgICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1
cmUKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJh
bmQKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInB1dF90b19zY29wZSIpOworICAgICAgICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShy
MCkpOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRf
TUFYKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRl
bnRpZmllcihpZDApKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgcmVnaXN0ZXJOYW1l
KHIxKSwgIiwgIiwgZ2V0UHV0SW5mby5vcGVyYW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdl
dFB1dEluZm8ucmVzb2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSksICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSwgIj4sIDxzdHJ1Y3R1cmU+LCAiLCBvcGVyYW5kKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2Zyb21fYXJndW1lbnRzIik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCBvZmZzZXQpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5n
KG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7CisgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
cHV0X3RvX2FyZ3VtZW50cyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBvZmZzZXQsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGR1bXBS
YXJlQ2FzZVByb2ZpbGUob3V0LCAicmFyZSBjYXNlOiAiLCByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChsb2NhdGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIHsKKyAgICAg
ICAgZHVtcEFyaXRoUHJvZmlsZShvdXQsIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxv
Y2F0aW9uKSwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIFZlY3RvcjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGV4
aXRQcm9maWxlKCkuZXhpdFNpdGVzRm9yKGxvY2F0aW9uKTsKKyAgICBpZiAoIWV4aXRTaXRlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGl0U2l0ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
IGV4aXRTaXRlc1tpXS5raW5kKCksICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7CisgICAg
fQorI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICBvdXQucHJpbnQoIlxuIik7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsCisgICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29u
c3QgQ2FsbExpbmtJbmZvTWFwJiBjYWxsTGlua0luZm9zKQoreworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OworICAgIGR1bXBC
eXRlY29kZShvdXQsIGV4ZWMsIGluc3RydWN0aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3Ms
IGNhbGxMaW5rSW5mb3MpOworfQorCisjZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFj
cm8pIFwKKyAgICBtYWNybyhpbnN0cnVjdGlvbnMpIFwKKyAgICBtYWNybyhjYWxsTGlua0luZm9z
KSBcCisgICAgbWFjcm8obGlua2VkQ2FsbGVyTGlzdCkgXAorICAgIG1hY3JvKGlkZW50aWZpZXJz
KSBcCisgICAgbWFjcm8oZnVuY3Rpb25FeHByZXNzaW9ucykgXAorICAgIG1hY3JvKGNvbnN0YW50
UmVnaXN0ZXJzKQorCisjZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKG1h
Y3JvKSBcCisgICAgbWFjcm8ocmVnZXhwcykgXAorICAgIG1hY3JvKGZ1bmN0aW9ucykgXAorICAg
IG1hY3JvKGV4Y2VwdGlvbkhhbmRsZXJzKSBcCisgICAgbWFjcm8oc3dpdGNoSnVtcFRhYmxlcykg
XAorICAgIG1hY3JvKHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKKyAgICBtYWNybyhldmFsQ29k
ZUNhY2hlKSBcCisgICAgbWFjcm8oZXhwcmVzc2lvbkluZm8pIFwKKyAgICBtYWNybyhsaW5lSW5m
bykgXAorICAgIG1hY3JvKGNhbGxSZXR1cm5JbmRleFZlY3RvcikKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3Ip
Cit7CisgICAgcmV0dXJuIHZlY3Rvci5jYXBhY2l0eSgpICogc2l6ZW9mKFQpOworfQorCituYW1l
c3BhY2UgeworCitjbGFzcyBQdXRUb1Njb3BlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWls
IHsKK3B1YmxpYzoKKyAgICBQdXRUb1Njb3BlRmlyZURldGFpbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgICAgICAsIG1faWRlbnQoaWRlbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG91dC5wcmludCgiTGlua2luZyBwdXRfdG9fc2NvcGUgaW4gIiwgRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcChqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKSksICIgZm9yICIsIG1faWRlbnQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50Owor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKKyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIu
bV9udW1DYWxsZWVMb2NhbHMpCisgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQorICAg
ICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKKyNpZiBFTkFCTEUoSklUKQorICAgICwg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKKyNlbmRp
ZgorICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2RpZEZhaWxG
VExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxz
ZSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCisgICAgLCBt
X2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKKyAgICAsIG1fY29kZVR5cGUob3Ro
ZXIubV9jb2RlVHlwZSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBv
dGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQo
ZmFsc2UpCisgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAs
IG1fbnVtQnJlYWtwb2ludHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3Zt
LCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKKyAgICAsIG1fdm0ob3RoZXIu
bV92bSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQorICAgICwg
bV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCisgICAgLCBtX3Njb3BlUmVnaXN0
ZXIob3RoZXIubV9zY29wZVJlZ2lzdGVyKQorICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKKyAg
ICAsIG1fc291cmNlKG90aGVyLm1fc291cmNlKQorICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIu
bV9zb3VyY2VPZmZzZXQpCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2Zp
cnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9j
b25zdGFudFJlZ2lzdGVycykKKyAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQorICAgICwgbV9m
dW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKKyAgICAsIG1fZnVuY3Rpb25FeHBy
cyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAg
LCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcigwKQorICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9j
bG9jazo6bm93KCkpCit7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFs
c2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKGhlYXAoKS0+aXNE
ZWZlcnJlZCgpKTsKKyAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CisKKyAg
ICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJs
b2NrJiBvdGhlcikKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsKKworICAgIGlmIChvdGhl
ci5tX3JhcmVEYXRhKSB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgCisgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5t
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOworICAgICAgICBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOworICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICB9CisgICAgCisgICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKK30KKworQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssCisgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCkKKyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFs
T2JqZWN0KHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9i
amVjdCgpKQorICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVt
Q2FsbGVlTG9jYWxzKQorICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCisgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorI2lmIEVOQUJMRShKSVQp
CisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQorI2VuZGlmCisgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMKGZhbHNlKQorICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkpCisgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpCisgICAgLCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpKQorICAgICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVu
bGlua2VkQ29kZUJsb2NrKQorICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAg
ICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVh
a3BvaW50cygwKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCks
IHRoaXMsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZt
KCkpCisgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVy
KCkpCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKKyAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQorICAgICwgbV9zb3VyY2VPZmZz
ZXQoc291cmNlT2Zmc2V0KQorICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KQorICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAgICwgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
MCkKKyAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygp
KQoreworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKKworICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7
CisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisgICAgQVNTRVJUKG1f
c291cmNlKTsKKyAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKKyAgICBKU1Njb3BlKiBzY29wZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisKKyAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZs
b3dQcm9maWxlcigpKQorICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVt
b3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworCisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7CisgICAgaWYgKHVubGlua2VkQ29kZUJs
b2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5s
aW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCld
LnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7CisgICAgICAgIExp
bmtUaW1lQ29uc3RhbnQgdHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOwor
ICAgICAgICBpZiAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5y
ZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSkKKyAgICAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9i
amVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7CisgICAgfQorCisgICAgLy8g
V2UgYWxyZWFkeSBoYXZlIHRoZSBjbG9uZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVu
dmlyb25tZW50IHNpbmNlIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUKKyAgICAvLyB0aGUgbW9kdWxl
IGVudmlyb25tZW50cyBiZWZvcmUgbGlua2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0
aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB3aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCisgICAg
aWYgKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
Pih1bmxpbmtlZENvZGVCbG9jaykpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJv
bFRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSgpOworICAgICAgICBpZiAobV92bS0+dHlw
ZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNs
b25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUt
PnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgIH0KKyAgICAgICAgcmVw
bGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFi
bGUpOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlID0gdm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpOworICAg
IG1fZnVuY3Rpb25EZWNscyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPj4odW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsK
KyAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRGVjbHMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGkpOworICAgICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlKQorICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmlu
c2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2Vk
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ld
LnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4
ZWN1dGFibGUtPnNvdXJjZSgpKSk7CisgICAgfQorCisgICAgbV9mdW5jdGlvbkV4cHJzID0gUmVm
Q291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlu
a2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAg
ICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCisgICAgICAgICAg
ICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93
bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsK
KyAgICB9CisKKyAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKKyAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBpZiAoc2l6ZV90IGNv
dW50ID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyQ291bnQoKSkgeworICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuZ3Jvdyhjb3VudCk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6Q29uc3RhbnRCdWZmZXImIGJ1ZmZlciA9IHVubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihpKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpXSA9IGJ1ZmZlcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisjaWYgRU5BQkxFKEpJVCkKKyAgICAg
ICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhMTEludDo6Z2V0Q29kZVB0cihvcF9jYXRjaCkpKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
IGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIpOworI2VuZGlmCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAgICBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIHB0
ciA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFi
bGUuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgICAgICAgICAgZm9y
ICg7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAgICAgICAgICAgICAgIE9mZnNldExvY2F0
aW9uIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9IHB0
ci0+dmFsdWUuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hK
dW1wVGFibGVzKCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
cy5ncm93KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VU
YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7CisgICAgICAgICAg
ICAgICAgU2ltcGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbaV07CisgICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBz
b3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4g
PSBzb3VyY2VUYWJsZS5taW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBBbGxvY2F0ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5m
b3MoKSkKKyAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MgPSBSZWZDb3VudGVkQXJyYXk8TExJ
bnRDYWxsTGlua0luZm8+KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZkFycmF5UHJvZmlsZXMoKSkKKyAgICAgICAgbV9hcnJheVByb2ZpbGVz
Lmdyb3coc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSkKKyAgICAgICAgbV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPihzaXpl
KTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkpCisgICAgICAgIG1fdmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxW
YWx1ZVByb2ZpbGU+KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpKQorICAgICAgICBtX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZT4oc2l6ZSk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHNldENhbGxlZVNhdmVSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworI2Vu
ZGlmCisKKyAgICAvLyBDb3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5zdHJ1Y3Rpb25z
CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5jb3VudCgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW06OlJlYWRl
ciBpbnN0cnVjdGlvblJlYWRlcih1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwor
CisgICAgLy8gQm9va2tlZXAgdGhlIHN0cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25t
ZW50cy4KKyAgICBIYXNoU2V0PEpTTW9kdWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5j
ZWRNb2R1bGVFbnZpcm9ubWVudHM7CisKKyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
IGluc3RydWN0aW9ucyhpbnN0cnVjdGlvbkNvdW50KTsKKworICAgIHVuc2lnbmVkIHZhbHVlUHJv
ZmlsZUNvdW50ID0gMDsKKyAgICBhdXRvIGxpbmtWYWx1ZVByb2ZpbGUgPSBbJl0odW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIG9wTGVuZ3RoKSB7CisgICAgICAgIHVuc2lnbmVkIHZh
bHVlUHJvZmlsZUluZGV4ID0gdmFsdWVQcm9maWxlQ291bnQrKzsKKyAgICAgICAgVmFsdWVQcm9m
aWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1t2YWx1ZVByb2ZpbGVJbmRleF07CisgICAg
ICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgcHJv
ZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBpbnN0cnVj
dGlvbnNbYnl0ZWNvZGVPZmZzZXQgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKKyAgICB9Owor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWluc3RydWN0aW9uUmVhZGVyLmF0RW5kKCk7ICkg
eworICAgICAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9IGluc3RydWN0aW9uUmVh
ZGVyLm5leHQoKTsKKworICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChw
Y1swXS51Lm9wY29kZSk7CisKKyAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gdm0uaW50ZXJwcmV0
ZXItPmdldE9wY29kZShwY1swXS51Lm9wY29kZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAx
OyBqIDwgb3BMZW5ndGg7ICsraikgeworICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAh
PSBzaXplb2YoaW50cHRyX3QpKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0u
dS5wb2ludGVyID0gMDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5k
ID0gcGNbal0udS5vcGVyYW5kOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocGNbMF0udS5v
cGNvZGUpIHsKKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAg
ICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQ
cm9maWxlKGkpOworCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czoKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXgg
PSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxl
c1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9m
aWxlSW5kZXhdOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBjYXNlIG9wX3RyeV9n
ZXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBjYXNlIG9wX3RvX251bWJlcjog
eworICAgICAgICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5
UHJvZmlsZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9
ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogeworICAgICAg
ICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQ
cm9maWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0g
Jm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBjYXNlIG9w
X25ld19hcnJheV9idWZmZXI6CisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTog
eworICAgICAgICAgICAgaW50IGFycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVu
Z3RoIC0gMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0
aCAtIDFdID0gJm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXNbYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
bmV3X29iamVjdDogeworICAgICAgICAgICAgaW50IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5k
ZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9ICZtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlc1tvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGlu
dCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisK
KyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOworICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRp
YWxpemUodm0sCisgICAgICAgICAgICAgICAgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIGxpbmtWYWx1
ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4
ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmls
ZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2Zp
bGVJbmRleF07CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxs
TGlua0luZm9zW3BjWzVdLnUub3BlcmFuZF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOworICAgICAg
ICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgICAg
ICBDUkFTSCgpOworCisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+
KHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IExv
Y2FsQ2xvc3VyZVZhcik7CisgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0u
dS5vcGVyYW5kOworCisgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFj
dFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBz
Y29wZSwgaWRlbnQsIEdldCwgdHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXph
dGlvbik7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5
cGU7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRo
OworICAgICAgICAgICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkgeworICAgICAgICAgICAg
ICAgIGlmIChvcC50eXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAgICAgICAgICAgICAvLyBL
ZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVu
dHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50
KSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxl
eGljYWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
Nl0udS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUuc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJv
bFRhYmxlKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywg
Y29uc3RhbnRTY29wZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CisgICAgICAgICAg
ICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gZ2V0X2Zy
b21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAor
CisgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOworCisgICAg
ICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkpOworICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIDRdID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIs
IGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKwor
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdl
dFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkub3BlcmFuZCgpOworICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFy
KQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0
SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09
IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
fHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAg
ZWxzZSBpZiAob3Auc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihv
cC5vcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwg
aWQsIHZhbHVlLCBHZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7
CisgICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2Un
cmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgorICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzVdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJv
bFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRh
YmxlLT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50
U2V0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpbnQgbG9j
YWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0g
SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxv
Y2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVN
b2RlKCksIG9wLnR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQo
KTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBv
cC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJl
VmFyIHx8IG9wLnR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3Aud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgICAgICAgICAg
b3Aud2F0Y2hwb2ludFNldC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhp
cywgaWRlbnQpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBv
cC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKKworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTogeworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOworICAgICAgICAgICAgLy8g
VGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxlX3R5cGUgcmVnVG9Q
cm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/Cisg
ICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwor
ICAgICAgICAgICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7CisgICAgICAgICAgICBH
bG9iYWxWYXJpYWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQgPSAwOworICAgICAgICAgICAgUmVmUHRy
PFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CisgICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUg
PSBtX3VubGlua2VkQ29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9m
ZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgUHJvZmlsZVR5cGVCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2Zp
bGVUeXBlQnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgc3dpdGNoIChmbGFn
KSB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVDbG9zdXJlVmFyOiB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzJd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nh
c3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLy8gRXZl
biB0aG91Z2ggdHlwZSBwcm9maWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3Ig
YSBQdXQsIHdlIGNhbiBhbHdheXMgY2xhaW0gYSBHZXQgYmVjYXVzZQorICAgICAgICAgICAgICAg
IC8vIHdlJ3JlIGFic3RyYWN0bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgorICAgICAgICAg
ICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0
eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKworICAgICAgICAg
ICAgICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIp
CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gb3AubGV4aWNhbEVudmlyb25tZW50
LT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xv
YmFsVmFyKQorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0
LmdldCgpLT5zeW1ib2xUYWJsZSgpOworCisgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGltcGwgPSAob3AudHlwZSA9PSBNb2R1bGVWYXIpID8gb3AuaW1wb3J0ZWROYW1lLmdldCgp
IDogaWRlbnQuaW1wbCgpOworICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgeworICAg
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMg
Y3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHBy
ZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tl
ciwgaW1wbCwgdm0pOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9s
VGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7CisKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2Fs
bHlSZXNvbHZlZDogeworICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNb
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNj
b3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90
IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICAgICAgZ2xvYmFs
VmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRl
bnQuaW1wbCgpLCB2bSk7CisgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRh
YmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsK
KworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRDogCisgICAgICAgICAgICBj
YXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OiB7CisgICAgICAgICAgICAg
ICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogeworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG93bmVyRXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSk7
CisgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUpLT5yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7CisgICAgICAg
ICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudDsK
KyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEFuYWx5emUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQmVjYXVzZSBhIHJldHVybiBzdGF0ZW1lbnQgY2FuIGJlIGFkZGVkIGltcGxpY2l0bHkg
dG8gcmV0dXJuIHVuZGVmaW5lZCBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgIC8vIGFuZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2Vz
IGJlY2F1c2UgdGhleSBhcmVuJ3QgaW4gdGhlIGFjdHVhbCBzb3VyY2UgdGV4dCBvZgorICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdXNlcidzIHByb2dyYW0sIGdpdmUgdGhlIHR5cGUgcHJvZmls
ZXIgc29tZSByYW5nZSB0byBpZGVudGlmeSB0aGVzZSByZXR1cm4gc3RhdGVtZW50cy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgdGV4dCBvZmZzZXQgdGhhdCBpcyB1c2Vk
IGFzIGlkZW50aWZpY2F0aW9uIGlzICJmIiBpbiB0aGUgZnVuY3Rpb24ga2V5d29yZAorICAgICAg
ICAgICAgICAgICAgICAvLyBhbmQgaXMgc3RvcmVkIG9uIFR5cGVMb2NhdGlvbidzIG1fZGl2b3RG
b3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50IG1lbWJlciB2YXJpYWJsZS4KKyAgICAg
ICAgICAgICAgICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5h
bHl6ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlw
ZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVM
b2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAorICAgICAg
ICAgICAgICAgIG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RF
bmQsIGdsb2JhbFR5cGVTZXQsICZ2bSk7CisgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OworICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9u
ID0gbG9jYXRpb25QYWlyLnNlY29uZDsKKworICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmls
ZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQorICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVy
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisKKyAgICAgICAgICAgIGlm
IChzaG91bGRBbmFseXplICYmIGlzTmV3TG9jYXRpb24pCisgICAgICAgICAgICAgICAgdm0udHlw
ZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKKworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKKyAgICAgICAgICAg
IGlmIChwY1sxXS51LmluZGV4ID09IERpZFJlYWNoQnJlYWtwb2ludCkKKyAgICAgICAgICAgICAg
ICBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogeworICAgICAgICAgICAgaW50
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPT0gbnVtUGFyYW1ldGVycygpIC0gMSwgIldlIGFz
c3VtZSB0aGF0IHRoaXMgaXMgdHJ1ZSB3aGVuIHJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdCBwYXJh
bWV0ZXIgZHVyaW5nIE9TUiBleGl0IGluIHRoZSBGVEwgSklULiIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaSArPSBvcExlbmd0aDsKKyAgICB9CisKKyAgICBpZiAodm0uY29u
dHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0Zv
ckNvbnRyb2xGbG93UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsKKworICAgIG1faW5zdHJ1Y3Rpb25z
ID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOworCisgICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJl
c2hvbGRzIG9ubHkgYWZ0ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRo
ZXNlCisgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhl
b3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb24gc3Ry
ZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgorICAgIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICBqaXRBZnRlcldhcm1VcCgpOworCisgICAgLy8gSWYg
dGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRo
ZW4gY29tcHV0ZSBpdCBoZXJlCisgICAgLy8gc3luY2hyb25vdXNseS4KKyAgICBpZiAoT3B0aW9u
czo6YWx3YXlzQ29tcHV0ZUhhc2goKSkKKyAgICAgICAgaGFzaCgpOworCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBHZW5lcmF0ZWRCeXRlY29kZXMoKSkKKyAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Cisg
ICAgCisgICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKKyAgICBoZWFwKCktPnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJ
bnN0cnVjdGlvbikpOworfQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
OiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPnZtKCksIHRoaXMsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDAp
CisgICAgLCBtX251bVZhcnMoMCkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNl
KQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fu
bm90Q29tcGlsZSkKKyNlbmRpZgorICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2Up
CisgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNv
bXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKKyAgICAs
IG1faXNTdHJpY3RNb2RlKGZhbHNlKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCisg
ICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUo
U3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBt
X293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRh
YmxlKQorICAgICwgbV92bSh2bSkKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyKDApCisgICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojpub3coKSkKK3sKKyAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOworfQorCit2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCopCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisg
ICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKK30KKyNlbmRpZgorCitDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQoreworICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24o
dGhpcyk7CisKKyAgICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBN
aXhlZFRyaVN0YXRlKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6
ZShGYWxzZVRyaVN0YXRlKTsKKworI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCisg
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKKyNlbmRpZgorCisgICAgLy8gV2UgbWF5IGJlIGRlc3Ry
b3llZCBiZWZvcmUgYW55IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUgZGVzdHJveWVk
LgorICAgIC8vIENvbnNpZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVucmVhY2hhYmxl
IGF0IHRoZSBzYW1lIHRpbWUuIFRoZXJlCisgICAgLy8gaXMgbm8gZ3VhcmFudGVlIGFib3V0IHRo
ZSBvcmRlciBpbiB3aGljaCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgorICAgIC8vIFNv
LCBpZiB3ZSBkb24ndCByZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVzdHJveWVkIGJl
Zm9yZSB0aGUKKyAgICAvLyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGludG8gdXMsIHRo
ZW4gdGhlIENhbGxMaW5rSW5mbyB2ZWN0b3IncworICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkg
dG8gcmVtb3ZlIG5vZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0Lgor
ICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91
dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAg
Ly8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2Yg
dGhlIH5DYWxsTGlua0luZm8KKyAgICAvLyBkZXN0cnVjdG9ycy4KKworI2lmIEVOQUJMRShKSVQp
CisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHVi
SW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWIgPSAqaXRlcjsKKyAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOworICAgICAgICBz
dHViLT5kZXJlZigpOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCit2b2lkIENv
ZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKK3sKKyAgICBBU1NFUlQoY29u
c3RhbnRzLnNpemUoKSA9PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6ZSgp
KTsKKyAgICBzaXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOworICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVyID0g
ISFtX3ZtLT50eXBlUHJvZmlsZXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsK
KworICAgICAgICBpZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPihjb25z
dGFudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOworICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9m
aWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTeW1i
b2xUYWJsZSogY2xvbmUgPSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOworICAg
ICAgICAgICAgICAgIGlmICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCisgICAg
ICAgICAgICAgICAgICAgIGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKKworICAg
ICAgICAgICAgICAgIGNvbnN0YW50ID0gY2xvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3Rh
bnQpOworICAgIH0KKworICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0g
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworfQorCit2b2lkIENvZGVCbG9jazo6
c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQoreworICAgIG1f
YWx0ZXJuYXRpdmUuc2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Cit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkKK3sKKyAgICBtX251bVBhcmFtZXRl
cnMgPSBuZXdWYWx1ZTsKKworICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRl
ZEFycmF5PFZhbHVlUHJvZmlsZT4obmV3VmFsdWUpOworfQorCit2b2lkIEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEV2YWxDYWNoZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKKyAgICBmb3IgKEV2YWxDYWNoZU1h
cDo6aXRlcmF0b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOworfQorCitDb2RlQmxvY2sqIENv
ZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKQoreworI2lmIEVOQUJMRShGVExf
SklUKQorICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOworICAg
IHJldHVybiBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJ
VCkKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKwordm9pZCBD
b2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGJvb2wg
c2V0QnlNZSA9ICFtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJv
bmcoZmFsc2UsIHRydWUpOworICAgIGlmICghc2V0QnlNZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7CisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRp
b25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKKyAgICAvLyBhbmQgamV0dGlz
b25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBv
ZiB0aG9zZSB0aGluZ3MKKyAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3
ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CisgICAgLy8gZmln
dXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCisgICAgdmlzaXRvci5hZGRV
bmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworCisgICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgd2UgamV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFs
dGVybmF0aXZlLCBzbyBtYWtlIHN1cmUgdGhhdCBpdAorICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4g
aWYgd2UgZG9uJ3QuCisgICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOworICAgIAor
ICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhh
cnZlc3RlcnMgZm9yOiBERkcgZml4cG9pbnQgZm9yCisgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0
cnlpbmcgdG8gZmluZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21l
CisgICAgLy8gaW5saW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVt
IHJlZ2FyZGxlc3MuCisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gV2Ug
Z2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0
YWJsZSBpcyBsaXZlLAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4g
YW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBi
bG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZl
cmVuY2VzIGJlaW5nCisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3
ZSdyZSBzdGlsbCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0g
b25lIHJvdW5kIG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJt
aW5lLCBiYXNlZCBvbgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0
cywgb3IgYnkgb3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVh
c29ucywgdGhhdCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlm
eSB1cyBvZiB0aGlzCisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVy
ZW5jZXMoKS4KKworICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwor
ICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworCisgICAgbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7CisgICAgZGV0ZXJtaW5lTGl2
ZW5lc3ModmlzaXRvcik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisKK3NpemVfdCBD
b2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIENvZGVCbG9jayog
dGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBzaXplX3QgZXh0cmFN
ZW1vcnlBbGxvY2F0ZWQgPSB0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2ppdENvZGUpCisgICAgICAg
IGV4dHJhTWVtb3J5QWxsb2NhdGVkICs9IHRoaXNPYmplY3QtPm1faml0Q29kZS0+c2l6ZSgpOwor
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFNZW1vcnlBbGxvY2F0
ZWQ7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0
PENvZGVCbG9jayo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
Ly8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxp
emVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCisgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUg
cHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhp
bmdzCisgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBu
byBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAorICAgIC8vIGZpZ3VyZXMgb3V0IHdo
ZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgorICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKworICAgIGlmIChDb2RlQmxv
Y2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQorICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG90aGVyQmxvY2spOworCisg
ICAgaWYgKG1faml0Q29kZSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQobV9qaXRDb2RlLT5zaXplKCkpOworICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCisg
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNp
emUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsK
KworICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgIHN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKKworICAgIG1fYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OworfQorCitib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCit7CisgICAgaWYg
KE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3Mg
ZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KKyAgICAvLyB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKKyAgICAv
LyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4K
KyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCkKK3sKKyAgICBpZiAoIUpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuICFIZWFwOjppc01hcmtlZCh0aGlzKTsKK30KKworc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdGltZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2VyQ29kZUJsb2NrSmV0dGlzb25UaW1pbmcoKSkpIHsK
KyAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuazoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
KDEwKTsKKyAgICAgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwICsgMjApOworICAgICAgICBjYXNlIEpJ
VENvZGU6OkRGR0pJVDoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDQwKTsKKyAgICAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMjApOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rOgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOwor
ICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEw
IGFkZGl0aW9uYWwgc2Vjb25kcywgc2luY2UgQmFzZWxpbmVKSVQgYW5kCisgICAgICAgIC8vIElu
dGVycHJldGVyVGh1bmsgc2hhcmUgYSBDb2RlQmxvY2suCisgICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9u
bzo6c2Vjb25kcyg1ICsgMTApKTsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKSk7CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6
CisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICB9Cit9
CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKK3sKKyAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25E
dWVUb09sZEFnZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKHRpbWVT
aW5jZUNyZWF0aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQor
c3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiYgdHJhbnNpdGlvbikKK3sKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYg
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKK3ZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisKKyAgICBpZiAobV9hbGxUcmFu
c2l0aW9uc0hhdmVCZWVuTWFya2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGFsbEFy
ZU1hcmtlZFNvRmFyID0gdHJ1ZTsKKyAgICAgICAgCisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gbV92bS0+aW50ZXJwcmV0ZXI7CisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSB7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tp
XV07CisgICAgICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVj
dGlvblswXS51Lm9wY29kZSkpIHsKKyAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0
XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdTdHJ1Y3R1cmVJRCkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQorICAgICAg
ICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0
dXJlSUQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KKyAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
b2xkU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihuZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNp
ZiBFTkFCTEUoSklUKQorICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CisgICAg
ICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1Yklu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQorICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgJj0gKCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAgfQorI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgZm9yIChh
dXRvJiB3ZWFrUmVmZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykK
KyAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyICY9IHdlYWtSZWZlcmVuY2UtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbihkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldKSkgeworICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVu
IHRoZSB0YXJnZXQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNv
IGxpdmU6CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29k
ZSBibG9jay4gV2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQorICAg
ICAgICAgICAgICAgIC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2Yg
dGhlIHRyYW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCisgICAgICAgICAgICAg
ICAgLy8gICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0
aGUgdXNlcidzCisgICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBm
b3IgdGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgIC8vICAg
bGl2ZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJj
ZSBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKKyAgICAg
ICAgICAgICAgICAvLyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNv
LCBzdG9yZXMgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3Vy
Y2UgbXVzdCBiZSBsaXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzaG9ydC1jaXJjdWl0IHRoZSBs
aXZlbmVzcyBpZiB0aGUgc3RydWN0dXJlIGlzIGhhcm1sZXNzCisgICAgICAgICAgICAgICAgLy8g
dG8gbWFyayAoaS5lLiBpdHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFs
cmVhZHkKKyAgICAgICAgICAgICAgICAvLyBsaXZlKS4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3Rv
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFy
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisg
ICAgCisgICAgaWYgKGFsbEFyZU1hcmtlZFNvRmFyKQorICAgICAgICBtX2FsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQgPSB0cnVlOworfQorCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2
ZW5lc3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55
IHJlbWFpbmluZyB3b3JrIHRvIGRvLgorICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0g
bV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICBpZiAoZGZnQ29tbW9uLT5saXZlbmVzc0hhc0Jl
ZW5Qcm92ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBOb3cgY2hlY2sgYWxsIG9m
IG91ciB3ZWFrIHJlZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdlCisg
ICAgLy8gaGF2ZSBwcm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyByZWZl
cmVuY2VzLiBJZiBhdCBlbmQgb2YKKyAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92ZWQg
bGl2ZW5lc3MsIHRoZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgorICAgIGJvb2wgYWxsQXJl
TGl2ZVNvRmFyID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAg
ICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBzb21l
IHdlYWsgcmVmZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3
YXMKKyAgICAvLyB1bnN1Y2Nlc3NmdWwuCisgICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBS
ZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAorICAgIC8vIGNvbWUgYmFjayBoZXJl
IGFnYWluLCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCisgICAgZGZnQ29tbW9uLT5s
aXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSB0cnVlOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVBvaW50ZXIodGhpcyk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0K
KyAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAorICAgICAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcikpOworCisgICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2
aXNpdG9yKTsKKyAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOworfQor
Cit2b2lkIENvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCit7CisgICAgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bj
b2RlKG9wX2dldF9ieV9pZCk7CisgICAgaW5zdHJ1Y3Rpb25bNF0udS5wb2ludGVyID0gbnVsbHB0
cjsKKyAgICBpbnN0cnVjdGlvbls1XS51LnBvaW50ZXIgPSBudWxscHRyOworICAgIGluc3RydWN0
aW9uWzZdLnUucG9pbnRlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKCkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYg
KG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmlu
dGVycHJldGVyOworICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7
CisgICAgZm9yIChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3Ry
dWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsK
KyAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUpKSB7CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9wcm90b19sb2FkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNl
dDogeworICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVj
dGlvbls0XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8
fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3Ry
dWN0dXJlSUQpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExM
SW50IHByb3BlcnR5IGFjY2Vzcy5cbiIpOworICAgICAgICAgICAgY2xlYXJMTEludEdldEJ5SWRD
YWNoZShjdXJJbnN0cnVjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZDogeworICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3Ry
dWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAg
U3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVy
ZUlEOworICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25b
N10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVy
ZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCkpKSAmJgorICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwg
SGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKSkpICYmCisgICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChj
aGFpbikpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQg
cHV0IHRyYW5zaXRpb24uXG4iKTsKKyAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3Ry
dWN0dXJlSUQgPSAwOworICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0g
MDsKKyAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQgPSAwOworICAg
ICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVu
Z3RoOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKKyAgICAg
ICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJr
ZWQoY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAl
cC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAg
IGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBjdXJJ
bnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAorICAgICAgICAgICAgICAgIGN1
ckluc3RydWN0aW9uWzNdLnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogeworICAgICAgICAg
ICAgYXV0byYgY2FjaGVXcml0ZUJhcnJpZXIgPSBjdXJJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsK
KyAgICAgICAgICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIgfHwgY2FjaGVXcml0ZUJhcnJpZXIu
dW52YWxpZGF0ZWRHZXQoKSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rp
b24gPSBjYWNoZVdyaXRlQmFycmllci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc01h
cmtlZChjYWNoZWRGdW5jdGlvbikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBMTEludCBjcmVhdGVfdGhpcyB3aXRoIGNhY2hlZCBjYWxsZWUgJXAuXG4iLCBjYWNo
ZWRGdW5jdGlvbik7CisgICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5jbGVhcigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
OiB7CisgICAgICAgICAgICAvLyBSaWdodCBub3cgdGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkuIEFueSBzeW1ib2wgdGFibGVzIHRoYXQgdGhpcyB3aWxsIHJlZmVyIHRvCisgICAgICAgICAg
ICAvLyBhcmUgZm9yIG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0
aW9ucyBzdHJvbmdseSwgYW5kIHRoZXkgcmVmZXIKKyAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1i
b2wgdGFibGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4K
KyAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSA9
IGN1ckluc3RydWN0aW9uWzZdLnUuc3ltYm9sVGFibGU7CisgICAgICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlIHx8IEhlYXA6OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBz
eW1ib2xUYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKKyAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8
IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIAorICAgICAgICAgICAgICAgIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1
XS51LnN0cnVjdHVyZTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFy
a2VkKHN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUp
OworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQob3Bjb2RlSUQsIGZhbHNl
LCAiVW5oYW5kbGVkIG9wY29kZSBpbiBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
LCAlcyglZCkgYXQgYmMgJXUiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sIG9wY29kZUlELCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBX
ZSBjYW4ndCBqdXN0IHJlbW92ZSBhbGwgdGhlIHNldHMgd2hlbiB3ZSBjbGVhciB0aGUgY2FjaGVz
IHNpbmNlIHdlIG1pZ2h0IGhhdmUgY3JlYXRlZCBhIHdhdGNocG9pbnQgc2V0CisgICAgLy8gdGhl
biBjbGVhcmVkIHRoZSBjYWNoZSB3aXRob3V0IEdDaW5nIGluIGJldHdlZW4uCisgICAgbV9sbGlu
dEdldEJ5SWRXYXRjaHBvaW50TWFwLnJlbW92ZUlmKFtdKGNvbnN0IFN0cnVjdHVyZVdhdGNocG9p
bnRNYXA6OktleVZhbHVlUGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4g
IUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KTsKKyAgICB9KTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9sbGludENhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQo
bV9sbGludENhbGxMaW5rSW5mb3NbaV0uY2FsbGVlLmdldCgpKSkgeworICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmlu
ZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOworICAgICAgICAgICAgbV9sbGludENh
bGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEhbV9sbGlu
dENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxp
bnRDYWxsTGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKKyAgICAgICAgICAgIG1f
bGxpbnRDYWxsTGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7CisgICAgfQorfQor
Cit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit7Cisj
aWYgRU5BQkxFKEpJVCkKKyAgICBmb3IgKGF1dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp2bSgpKTsKKwor
ICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1Yklu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9ICoqaXRlcjsKKyAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNl
cyh0aGlzKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9u
YWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGNvZGVCbG9j
ay0+c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgeworICAgICAgICBjb2RlQmxv
Y2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKKyAgICAgICAgY29kZUJs
b2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVC
bG9jay0+aml0VHlwZSgpKSkKKyAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29k
ZSgpKQorICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMo
KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdG9IYXNoTWFw
KG1fc3R1YkluZm9zLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpnZXRTdHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCBy
ZXN1bHQpOworfQorCit2b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3sKKyNpZiBFTkFC
TEUoSklUKQorICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQorICAgICAgICB0b0hh
c2hNYXAobV9jYWxsTGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENv
ZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0Q2FsbExpbmtJ
bmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5m
b01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpCit7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewor
ICAgICAgICBmb3IgKGF1dG8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKKyAgICAgICAgICAg
IHJlc3VsdC5hZGQoQ29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBieVZhbElu
Zm8pOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldEJ5VmFs
SW5mb01hcChsb2NrZXIsIHJlc3VsdCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorU3RydWN0dXJl
U3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQor
eworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIG1f
c3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlKTsKK30KKworSklUQWRkSUMqIENvZGVCbG9jazo6YWRk
SklUQWRkSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fYWRk
SUNzLmFkZChhcml0aFByb2ZpbGUpOworfQorCitKSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRN
dWxJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gbV9tdWxJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7Cit9CisKK0pJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklD
KEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX3N1YklDcy5hZGQo
YXJpdGhQcm9maWxlKTsKK30KKworSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0
aFByb2ZpbGUpOworfQorCitTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1Yklu
Zm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvIDogbV9zdHViSW5mb3MpIHsKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3Jp
Z2luID09IGNvZGVPcmlnaW4pCisgICAgICAgICAgICByZXR1cm4gc3R1YkluZm87CisgICAgfQor
ICAgIHJldHVybiBudWxscHRyOworfQorCitCeVZhbEluZm8qIENvZGVCbG9jazo6YWRkQnlWYWxJ
bmZvKCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJl
dHVybiBtX2J5VmFsSW5mb3MuYWRkKCk7Cit9CisKK0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjph
ZGRDYWxsTGlua0luZm8oKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5hZGQoKTsKK30KKworQ2FsbExpbmtJbmZv
KiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5k
ZXgpCit7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4oKSA9PSBDb2Rl
T3JpZ2luKGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiAqaXRlcjsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKTsKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgIC8vIFdlIGNhbiBjbGVhciB0
aGVzZSBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkg
c3R1YiBpbmZvcywgY2FsbAorICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3
ZSBkb24ndCBoYXZlIEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCisgICAg
Ly8gc3RydWN0dXJlcyB1c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldFN0dWJJbmZvTWFwIGFu
ZCBmcmllbmRzKSB3aWxsIHJldHVybiBub3RoaW5nIGlmIHdlCisgICAgLy8gZG9uJ3QgaGF2ZSBK
SVQgY29kZS4KKyAgICBtX3N0dWJJbmZvcy5jbGVhcigpOworICAgIG1fY2FsbExpbmtJbmZvcy5j
bGVhcigpOworICAgIG1fYnlWYWxJbmZvcy5jbGVhcigpOworICAgIAorICAgIC8vIFdlIGNhbiBj
bGVhciB0aGlzIGJlY2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1
cmVzIGFyZSBndWFyZGVkIGJ5IHdoZXRoZXIKKyAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KKyAg
ICBtX3JhcmVDYXNlUHJvZmlsZXMuY2xlYXIoKTsKK30KKyNlbmRpZgorCit2b2lkIENvZGVCbG9j
azo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCisgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZAorICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0
IGl0IG1hdGNoZXMgdGhlIGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAorICAg
IC8vIHRoZSBPU1IgZXhpdCBhZ2FpbnN0LgorCisgICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJu
YXRpdmUpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgIGlmIChkZmdDb21tb24tPmlubGlu
ZUNhbGxGcmFtZXMpIHsKKyAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZn
Q29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9i
amVjdCk7CisgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworICAgIGlmIChtX3JhcmVEYXRhKQorICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25FeHBycy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rp
b25FeHByc1tpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0p
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAoQnlWYWxJ
bmZvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZi
eVZhbEluZm8tPmNhY2hlZFN5bWJvbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdmlz
aXRPU1JFeGl0VGFyZ2V0cyh2aXNpdG9yKTsKKyNlbmRpZgorCisgICAgdXBkYXRlQWxsUHJlZGlj
dGlvbnMoKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCEhZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4p
OyAvLyBBbG1vc3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdp
biBzaG91bGQgYWxzbyBiZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhv
dWdoLgorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5t
X2Zyb20pOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tp
XS5tX3RvKTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNl
c1tpXSk7CisKKyAgICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Cisj
ZW5kaWYgICAgCit9CisKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZl
KCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsKKyAg
ICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQt
PmFsdGVybmF0aXZlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICBSRUxFQVNF
X0FTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmppdFR5cGUoKSkgfHwgcmVz
dWx0LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmJhc2VsaW5lVmVyc2lvbigpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgQ29k
ZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgb3JpZ2luYWwgQ29k
ZUJsb2NrIGZvciBhbiBleGVjdXRhYmxlLgorICAgICAgICAvLyBBc3N1bWUgdGhhdCB3ZSdyZSB0
aGUgYmFzZWxpbmUgQ29kZUJsb2NrLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICByZXN1
bHQgPSByZXN1bHQtPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEpJVCkKK2Jv
b2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5
cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNl
bWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOworfQorCitib29sIENvZGVCbG9jazo6
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudChqaXRUeXBlKCkpOworfQorI2VuZGlmCisKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6
OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWly
ZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29k
ZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgcmV0dXJuIGhhbmRsZXJGb3JJ
bmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKK30KKworSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRs
ZXIgcmVxdWlyZWRIYW5kbGVyKQoreworICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK0Nh
bGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQoreworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsK
KyAgICBBU1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsK
KyAgICBDb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxT
aXRlKTsKKyAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChvcmlnaW5hbE9yaWdpbik7CisjZWxzZQorICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBu
ZXcgb24tdGhlLWZseSBleGNlcHRpb24gaGFuZGxpbmcKKyAgICAvLyBjYWxsIHNpdGVzIG91dHNp
ZGUgdGhlIERGRy9GVEwgaW5saW5lIGNhY2hlcy4KKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luYWxD
YWxsU2l0ZSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleCgwdSk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnJlbW92ZUV4
Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7CisgICAgVmVjdG9yPEhhbmRsZXJJbmZv
PiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBleGNlcHRpb25IYW5kbGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBI
YW5kbGVySW5mbyYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBpZiAo
aGFuZGxlci5zdGFydCA8PSBpbmRleCAmJiBoYW5kbGVyLmVuZCA+IGluZGV4KSB7CisgICAgICAg
ICAgICBleGNlcHRpb25IYW5kbGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit1bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworfQorCit1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlu
dCBkaXZvdDsKKyAgICBpbnQgc3RhcnRPZmZzZXQ7CisgICAgaW50IGVuZE9mZnNldDsKKyAgICB1
bnNpZ25lZCBsaW5lOworICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICBleHByZXNzaW9uUmFuZ2VG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgcmV0dXJuIGNvbHVtbjsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5z
aWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Cit7CisgICAgbV91bmxpbmtlZENv
ZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICBkaXZvdCArPSBt
X3NvdXJjZU9mZnNldDsKKyAgICBjb2x1bW4gKz0gbGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQoKTsKKyAgICBsaW5lICs9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUo
KTsKK30KKworYm9vbCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2ln
bmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSB2bSgpLT5pbnRlcnByZXRlcjsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0
cnVjdGlvbnMoKS5lbmQoKTsKKyAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2lu
OyBpdCAhPSBlbmQ7KSB7CisgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSk7CisgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9k
ZWJ1ZykgeworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBpdCAtIGJlZ2lu
OworICAgICAgICAgICAgaW50IHVudXNlZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdM
aW5lOworICAgICAgICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKKyAgICAgICAgICAgIGV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWQsIHVu
dXNlZCwgdW51c2VkLCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAgICAgICAgICBp
ZiAobGluZSA9PSBvcERlYnVnTGluZSAmJiAoY29sdW1uID09IEJyZWFrcG9pbnQ6OnVuc3BlY2lm
aWVkQ29sdW1uIHx8IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpdCArPSBvcGNvZGVMZW5ndGhzW29wY29k
ZUlEXTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvZGVCbG9jazo6c2hy
aW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisKKyAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQo
KTsKKyAgICAKKyAgICBpZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNocmluaykgeworICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAgICBp
ZiAobV9yYXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0gLy8gZWxzZSBkb24n
dCBzaHJpbmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9p
bnRlcnMgaW50byB0aGVzZSB0YWJsZXMuCit9CisKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2Rl
QmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJ
bmZvKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwor
ICAgIG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKK30KKwordm9pZCBDb2RlQmxvY2s6
OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5
bW9ycGhpY0NhbGxOb2RlKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2Fs
bGVyRnJhbWUpOworICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcp
OworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK3ZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNv
bWluZ0NhbGxzKCkKK3sKKyAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAh
PSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2Fs
bHMuYmVnaW4oKS0+dW5saW5rKCk7CisjaWYgRU5BQkxFKEpJVCkKKyAgICB3aGlsZSAobV9pbmNv
bWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2lu
Y29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICB3aGlsZSAobV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5l
bmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5r
KCp2bSgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCit2b2lkIENvZGVCbG9jazo6bGlu
a0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyog
aW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBt
X2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKK30KKworQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsK
K30KKworI2lmIEVOQUJMRShKSVQpCitDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQo
KQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7
CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVG
b3JDYWxsKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQor
ICAgICAgICByZXR1cm4ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2soKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6
aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5Q29k
ZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQor
eworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CisK
KyAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKKyAgICAg
ICAgaWYgKG1faXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9u
Rm9yQ29uc3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOworICAgICAgICByZXR1cm4gREZHOjpm
dW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAgfQorCisgICAgaWYgKGNs
YXNzSW5mbyA9PSBFdmFsQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OmV2
YWxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1D
b2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlM
ZXZlbCh0aGlzKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRo
aXMpOworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChjbGFzc0luZm8gPT0gV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29t
cGlsZTsKKyNlbmRpZgorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwor
dm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24s
IFJlb3B0aW1pemF0aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCit7Cisj
aWYgIUVOQUJMRShERkdfSklUKQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyAgICBVTlVTRURf
UEFSQU0oZGV0YWlsKTsKKyNlbmRpZgorICAgIAorICAgIENPREVCTE9DS19MT0dfRVZFTlQodGhp
cywgImpldHRpc29uIiwgKCJkdWUgdG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUg
PT0gQ291bnRSZW9wdGltaXphdGlvbiwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWls
KSkpOworCisgICAgUkVMRUFTRV9BU1NFUlQocmVhc29uICE9IFByb2ZpbGVyOjpOb3RKZXR0aXNv
bmVkKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoREZHOjpzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKCJKZXR0aXNvbmluZyAiLCAqdGhpcyk7
CisgICAgICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pCisgICAgICAgICAgICBk
YXRhTG9nKCIgYW5kIGNvdW50aW5nIHJlb3B0aW1pemF0aW9uIik7CisgICAgICAgIGRhdGFMb2co
IiBkdWUgdG8gIiwgcmVhc29uKTsKKyAgICAgICAgaWYgKGRldGFpbCkKKyAgICAgICAgICAgIGRh
dGFMb2coIiwgIiwgKmRldGFpbCk7CisgICAgICAgIGRhdGFMb2coIi5cbiIpOworICAgIH0KKyAg
ICAKKyAgICBpZiAocmVhc29uID09IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5j
ZSkgeworICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkgeworICAgICAg
ICAgICAgZGF0YUxvZygqdGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0aGUg
Zm9sbG93aW5nIGRlYWQgcmVmZXJlbmNlczpcbiIpOworICAgICAgICAgICAgREZHOjpDb21tb25E
YXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0
aW9uID0gZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IG9yaWdpbiA9IHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpOworICAgICAgICAgICAgICAg
IEpTQ2VsbCogZnJvbSA9IHRyYW5zaXRpb24ubV9mcm9tLmdldCgpOworICAgICAgICAgICAgICAg
IEpTQ2VsbCogdG8gPSB0cmFuc2l0aW9uLm1fdG8uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYg
KCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpICYmIEhlYXA6OmlzTWFya2VkKGZy
b20pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgVHJhbnNpdGlvbiB1bmRlciAiLCBSYXdQb2ludGVyKG9yaWdpbiksICIsICIsIFJh
d1BvaW50ZXIoZnJvbSksICIgLT4gIiwgUmF3UG9pbnRlcih0byksICIuXG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFr
ID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQod2VhaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBSYXdQb2ludGVy
KHdlYWspLCAiLlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAo
KSk7CisgICAgCisgICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToK
KyAgICAvLyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3Rh
Y2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAorICAgIC8vICAgIHdlIHNob3Vs
ZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFm
dGVyIHRoZSByZXR1cm4uCisgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUg
b3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4K
KworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PbGRBZ2UpIHsKKyAgICAgICAgaWYgKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29t
cGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKSkKKyAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7
CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0
cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQu
CisgICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Cisg
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXND
dXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiICAg
IERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKKyAgICAKKyAgICAvLyBDb3VudCB0aGUg
cmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgorICAgIGlmICht
b2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRo
aXMgc2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NworICAgICAgICBiYXNlbGluZUFsdGVybmF0
aXZlKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0
aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmICh0aGlz
ICE9IHJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUg
bmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUK
KyAgICAgICAgLy8gYmxvY2tzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFs
dGVybmF0aXZlKCkpCisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKKworICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpCisg
ICAgICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50
IHRvIGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQorICAgIC8vIGJlY2F1c2UgdGhh
dCB3b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCisgICAgaWYg
KG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25l
clNjcmlwdEV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgYWNj
b21wbGlzaGVzICgyKS4KKyAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
CisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgp
LCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAo
REZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiICAgIERpZCBp
bnN0YWxsIGJhc2VsaW5lIHZlcnNpb24gb2YgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorfQorCitKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmpl
Y3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQoreworICAgIGlmICghY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKK30KKworY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBS
ZWN1cnNpb25DaGVja0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGRlcHRoVG9DaGVjaykKKyAgICAgICAgOiBtX3N0YXJ0Q2Fs
bEZyYW1lKHN0YXJ0Q2FsbEZyYW1lKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
KyAgICAgICAgLCBtX2RlcHRoVG9DaGVjayhkZXB0aFRvQ2hlY2spCisgICAgICAgICwgbV9mb3Vu
ZFN0YXJ0Q2FsbEZyYW1lKGZhbHNlKQorICAgICAgICAsIG1fZGlkUmVjdXJzZShmYWxzZSkKKyAg
ICB7IH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQ2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZy
YW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRDYWxsRnJh
bWUgPT0gbV9zdGFydENhbGxGcmFtZSkKKyAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFt
ZSA9IHRydWU7CisKKyAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgeworICAgICAg
ICAgICAgaWYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSA9PSBtX2NvZGVCbG9j
aykgeworICAgICAgICAgICAgICAgIG1fZGlkUmVjdXJzZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFtX2RlcHRoVG9DaGVjay0tKQorICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKKyAgICB9CisKKyAgICBib29sIGRpZFJlY3Vyc2UoKSBjb25zdCB7IHJldHVybiBt
X2RpZFJlY3Vyc2U7IH0KKworcHJpdmF0ZToKKyAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJh
bWU7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
ZGVwdGhUb0NoZWNrOworICAgIG11dGFibGUgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7Cisg
ICAgbXV0YWJsZSBib29sIG1fZGlkUmVjdXJzZTsKK307CisKK3ZvaWQgQ29kZUJsb2NrOjpub3Rp
Y2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSkKK3sKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgIGRhdGFMb2coIk5vdGljaW5n
IGNhbGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwg
KnRoaXMsICJcbiIpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghbV9zaG91
bGRBbHdheXNCZUlubGluZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWNhbGxl
ckNvZGVCbG9jaykgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmco
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFERkc6OmlzU21h
bGxFbm91Z2hUb0lubGluZUNvZGVJbnRvKGNhbGxlckNvZGVCbG9jaykpIHsKKyAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVj
YXVzZSBjYWxsZXIgaXMgdG9vIGxhcmdlLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykgeworICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0aWxsIGluIHRoZSBpbnRl
cnByZXRlciwgdGhlbiB3ZSBjYW4ndCBleHBlY3QgaW5saW5pbmcgdG8KKyAgICAgICAgLy8gaGFw
cGVuIGFueXRpbWUgc29vbi4gQXNzdW1lIGl0J3MgcHJvZml0YWJsZSB0byBvcHRpbWl6ZSBpdCBz
ZXBhcmF0ZWx5LiBUaGlzCisgICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIFNB
Qkkgb25seSBpZiBpdCBpcyBjYWxsZWQgbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4KKyAgICAgICAg
Ly8gYW55IG9mIGl0cyBjYWxsZXJzLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBpbiBMTElu
dC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJj
YXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5j
dGlvbkNvZGUpIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBn
bG9iYWwgY29kZSwgYXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQorICAgICAgICAvLyBvcHRpbWl6
ZWQgYW55dGltZSBzb29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUg
c2luY2Ugd2UKKyAgICAgICAgLy8gZGVsYXkgZXZhbCBvcHRpbWl6YXRpb24gYnkgYSAqbG90Ki4K
KyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFy
aW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFJlY3Vyc2l2ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVk
LgorICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciBmdW5jdG9yKGNhbGxlckZyYW1lLCB0aGlzLCBP
cHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0aCgpKTsKKyAgICB2bSgpLT50b3BDYWxsRnJhbWUt
Pml0ZXJhdGUoZnVuY3Rvcik7CisKKyAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNlKCkpIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSByZWN1cnNpb24gd2FzIGRldGVjdGVkLlxuIik7
CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
U3RhdGUoKSA9PSBERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgeworICAgICAgICBkYXRhTG9n
KCJJbiBjYWxsIGZyb20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFtZS0+Y29k
ZU9yaWdpbigpLCAiIHRvICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0eSBsZXZl
bCBpcyBub3Qgc2V0LlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIGlm
IChjYW5Db21waWxlKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkp
CisgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgdGhlIGNhbGxlciBp
cyBub3QgYSBERkcgY2FuZGlkYXRlLlxuIik7CisgICAgCisgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCit1bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VS
VChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyTWF4KCkpOworICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCisj
aWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMpCit7CisgICAgbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0
ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVnaXN0ZXJBdE9mZnNldExpc3Qp
Cit7CisgICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0
TGlzdCk7Cit9CisgICAgCitzdGF0aWMgc2l6ZV90IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKHNpemVfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQoreworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjcHVSZWdpc3RlclNpemUgPSBzaXplb2Yodm9pZCopOworICAgIHJldHVy
biAoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIGNhbGxlZVNhdmVS
ZWdpc3RlcnMgKiBjcHVSZWdpc3RlclNpemUpIC8gc2l6ZW9mKFJlZ2lzdGVyKSk7CisKK30KKwor
c2l6ZV90IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpCit7CisgICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisK
K3NpemVfdCBDb2RlQmxvY2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCit7
CisgICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVycy0+c2l6ZSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmNvdW50UmVv
cHRpbWl6YXRpb24oKQoreworICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKKyAg
ICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyTWF4KCkpCisgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIgPSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOworfQorCit1bnNp
Z25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoKQoreworICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKKyAgICBpZiAoT3B0aW9uczo6dGVzdFRo
ZUZUTCgpKSB7CisgICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiAxMDAwMDAwOworICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgfQorICAg
IHJldHVybiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUo
KSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworfQorCitpbnQzMl90
IENvZGVCbG9jazo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV2YWxU
aHJlc2hvbGRNdWx0aXBsaWVyKCk7CisgICAgCisgICAgcmV0dXJuIDE7Cit9CisKK2RvdWJsZSBD
b2RlQmxvY2s6Om9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKQoreworICAgIC8v
IFRoaXMgZXhwcmVzc2lvbiBhcmlzZXMgZnJvbSBkb2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9m
CisgICAgLy8KKyAgICAvLyBGW3hfXSA9OiBhICogU3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsg
ZAorICAgIC8vCisgICAgLy8gYWdhaW5zdCB0aGUgZGF0YSBwb2ludHM6CisgICAgLy8KKyAgICAv
LyAgICB4ICAgICAgIEZbeF9dCisgICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFs
bGVzdCByZWFzb25hYmxlIGNvZGUgYmxvY2spCisgICAgLy8gICAyMDAgICAgICAgMS4wICAgICAg
ICAgICh0eXBpY2FsIHNtYWxsLWlzaCBjb2RlIGJsb2NrKQorICAgIC8vICAgMzIwICAgICAgIDEu
MiAgICAgICAgICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBv
cHRpbWl6ZSkKKyAgICAvLyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNh
dyBpbiAzZC1jdWJlIHRoYXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKKyAgICAvLyAgNDAw
MCAgICAgICA1LjUgICAgICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRo
ZSBmdW5jdGlvbiB0byBjb252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQor
ICAgIC8vIDEwMDAwICAgICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKKyAgICAv
LworICAgIC8vIEkgYWNoaWV2ZSB0aGUgbWluaW1pemF0aW9uIHVzaW5nIHRoZSBmb2xsb3dpbmcg
TWF0aGVtYXRpY2EgY29kZToKKyAgICAvLworICAgIC8vIE15RnVuY3Rpb25UZW1wbGF0ZVt4Xywg
YV8sIGJfLCBjXywgZF9dIDo9IGEqU3FydFt4ICsgYl0gKyBBYnNbYyp4XSArIGQKKyAgICAvLwor
ICAgIC8vIHNhbXBsZXMgPSB7ezEwLCAwLjl9LCB7MjAwLCAxfSwgezMyMCwgMS4yfSwgezEyNjgs
IDV9LCB7NDAwMCwgNS41fSwgezEwMDAwLCA2fX0KKyAgICAvLworICAgIC8vIHNvbHV0aW9uID0g
CisgICAgLy8gICAgIE1pbmltaXplW1BsdXMgQEAgKChNeUZ1bmN0aW9uVGVtcGxhdGVbI1tbMV1d
LCBhLCBiLCBjLCBkXSAtICNbWzJdXSleMiAmIC9AIHNhbXBsZXMpLAorICAgIC8vICAgICAgICAg
e2EsIGIsIGMsIGR9XVtbMl1dCisgICAgLy8KKyAgICAvLyBBbmQgdGhlIGNvZGUgYmVsb3cgKHRv
IGluaXRpYWxpemUgYSwgYiwgYywgZCkgaXMgZ2VuZXJhdGVkIGJ5OgorICAgIC8vCisgICAgLy8g
UHJpbnRbImNvbnN0IGRvdWJsZSAiIDw+IFRvU3RyaW5nWyNbWzFdXV0gPD4gIiA9ICIgPD4KKyAg
ICAvLyAgICAgSWZbI1tbMl1dIDwgMC4wMDAwMSwgIjAuMCIsIFRvU3RyaW5nWyNbWzJdXV1dIDw+
ICI7Il0gJiAvQCBzb2x1dGlvbgorICAgIC8vCisgICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUg
Zm9sbG93aW5nIHRvIGJlIHRydWU6CisgICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hl
YXAgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCisgICAg
Ly8gICB0aGFuIGxhdGVyLgorICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2
ZSB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAorICAgIC8v
ICAgYW5kIHNvbWV0aW1lcyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5l
dmVyIG9wdGltaXplIHRoZW0uCisgICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5v
dCB0b3RhbGx5IGxpbmVhciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQorICAgIC8vICAg
REZHIGluY3VycyBzb21lIGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0
aGVyZSBpcyBlbm91Z2ggc2xvcAorICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4g
aW5zdHJ1Y3Rpb24gY291bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAorICAgIC8v
ICAgdGhhdCBmb3IgdGhvc2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hv
dWxkIG5vdCBoYXZlIGEgc3Ryb25nCisgICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9s
ZC4KKyAgICAvLworICAgIC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93
IHRvIGFjaGlldmUgdGhlbTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKKyAgICAvLyBleGFt
cGxlIHdoZXJlIHRoZSBoZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3Vi
ZSB3aXRoIGluc3RydWN0aW9uCisgICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQg
ZWFybHkgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKKyAg
ICAvLyB0b3RhbGx5IHdyb25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlv
biBjb3VudCAxMjY4LCB3aGljaCB3YXMgZXhwZW5zaXZlCisgICAgLy8gdG8gY29tcGlsZSBhbmQg
ZGlkbid0IHJ1biBvZnRlbiBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGlu
aW9uKSwgYW5kCisgICAgLy8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRo
YXQgcmVwcmVzZW50ZWQgbXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCisgICAgLy8gaGV1cmlzdGlj
cyBzaG91bGQgZG8gZm9yIHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCisgICAgLy8KKyAg
ICAvLyBUaGUgZXhwcmVzc2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFy
b3NlIGJlY2F1c2UgSSBzdGFydGVkIHdpdGggYW4KKyAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFu
ZCB0aGVuIGRpZCB0d28gdGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBl
bnN1cmUKKyAgICAvLyB0aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0
aXZlIHZhbHVlIG9mIGMgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbgorICAgIC8vIHRoZSBmdW5jdGlv
biB0dXJuaW5nIG92ZXIgYW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJl
dyBpbiBhIFNxcnQKKyAgICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0
aW9uIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQorICAgIC8vIHRv
IHNtYWxsIGNoYW5nZXMgaW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3
aGVuIHggZ2V0cyBsYXJnZS4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0
IGVzc2VudGlhbGx5IGVsaW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQorICAgIC8v
IGV4cHJlc3Npb24gKGMgPT0gMC4wKS4KKyAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0Owor
ICAgIGNvbnN0IGRvdWJsZSBiID0gMS4wMjQwNjsKKyAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsK
KyAgICBjb25zdCBkb3VibGUgZCA9IDAuODI1OTE0OworICAgIAorICAgIGRvdWJsZSBpbnN0cnVj
dGlvbkNvdW50ID0gdGhpcy0+aW5zdHJ1Y3Rpb25Db3VudCgpOworICAgIAorICAgIEFTU0VSVChp
bnN0cnVjdGlvbkNvdW50KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIg
d2UgaGF2ZSBhbiBpbnN0cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBqdXN0IHJldHVy
biB0aGUgdmFsdWUgb2YgZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCisgICAgCisgICAgZG91Ymxl
IHJlc3VsdCA9IGQgKyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1
Y3Rpb25Db3VudDsKKyAgICAKKyAgICByZXN1bHQgKj0gY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBs
aWVyKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGlu
c3RydWN0aW9uQ291bnQsCisgICAgICAgICAgICAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVy
IGJ5ICIsIHJlc3VsdCwgIiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLAorICAg
ICAgICAgICAgIlxuIik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBp
bnQzMl90IGNsaXBUaHJlc2hvbGQoZG91YmxlIHRocmVzaG9sZCkKK3sKKyAgICBpZiAodGhyZXNo
b2xkIDwgMS4wKQorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBpZiAodGhyZXNob2xkID4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAg
ICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhyZXNob2xkKTsKK30KKworaW50
MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVz
aG9sZCkKK3sKKyAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihkZXNpcmVkVGhyZXNob2xkKSAqCisgICAgICAgIG9wdGltaXphdGlvblRocmVzaG9s
ZFNjYWxpbmdGYWN0b3IoKSAqCisgICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCkpKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSkgewor
ICAgICAgICBpZiAod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktl
eSh0aGlzLCBERkc6OkRGR01vZGUpKQorICAgICAgICAgICAgPT0gREZHOjpXb3JrbGlzdDo6Q29t
cGlsZWQpIHsKKyAgICAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgCisgICAgcmV0
dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhp
cyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKK3sKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBP
cHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOworICAgIG1faml0RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOworfQorCit2b2lkIENvZGVCbG9jazo6ZG9udE9wdGlt
aXplQW55dGltZVNvb24oKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAg
ICAgIGRhdGFMb2coKnRoaXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwor
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBD
b2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXAoKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1faml0RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKAorICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyNlbmRpZgorfQorCit2
b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQoreworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcg
YWZ0ZXIgbG9uZyB3YXJtLXVwLlxuIik7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9qaXRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGFkanVzdGVkQ291bnRlclZh
bHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCB0aGlz
KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVTb29uKCkKK3sKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRp
bWl6aW5nIHNvb24uXG4iKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2ppdEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0
aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkpLCB0aGlzKTsKKyNlbmRpZgorfQorCit2
b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpCit7
CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywg
IjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5LlxuIik7CisgICAgbV9qaXRFeGVjdXRl
Q291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKK3ZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIEpJVENvZGU6
OkpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKKyAgICBpZiAodHlwZSAhPSBKSVRDb2RlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJh
c2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlwZSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogdGhlUmVwbGFj
ZW1lbnQgPSByZXBsYWNlbWVudCgpOworICAgIGlmICgocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkgIT0gKHRoZVJlcGxhY2VtZW50ICE9IHRoaXMpKSB7CisgICAgICAgIGRhdGFMb2co
KnRoaXMsICI6IHdlIGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKKyAgICAgICAg
aWYgKHRoZVJlcGxhY2VtZW50ID09IHRoaXMpCisgICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUg
b3VyIG93biByZXBsYWNlbWVudC5cbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRh
TG9nKCJvdXIgcmVwbGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAodGhlUmVwbGFjZW1lbnQpLCAi
XG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOworICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAgICBkb250
T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxh
dGlvbkRlZmVycmVkOgorICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGltaXplQW55
dGltZVNvb24oKSBidXQgd2UgY2Fubm90IGJlY2F1c2UKKyAgICAgICAgLy8gZm9yY2VPcHRpbWl6
YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQgd29uJ3QK
KyAgICAgICAgLy8gbmVjZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywgd2UgbWFrZSBz
dXJlIHRoYXQgZXZlbiBpZiB0aGF0CisgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcg
YSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQorICAgICAgICAv
LyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCisgICAgICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDoKKyAgICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgorICAgICAg
ICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQg
cmVzdWx0OiAiLCBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCksICJcbiIpOworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKyNlbmRpZgorICAgIAordWludDMyX3QgQ29kZUJs
b2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xk
KQoreworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhp
cyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5CisgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdv
bid0IGh1cnQgdXMuCisgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKKyAg
ICBmb3IgKHVuc2lnbmVkIG4gPSBiYXNlbGluZVZlcnNpb24oKS0+cmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKTsgbi0tOykgeworICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQg
PDwgMTsKKyAgICAgICAgaWYgKG5ld1Jlc3VsdCA8IHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJlc3VsdCA9
IG5ld1Jlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordWludDMyX3QgQ29k
ZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCit7CisgICAgcmV0
dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJl
b3B0aW1pemF0aW9uKCkgKiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSk7Cit9CisKK3Vp
bnQzMl90IENvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9t
TG9vcCgpCit7CisgICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6
Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSAqIGNvZGVUeXBlVGhyZXNo
b2xkTXVsdGlwbGllcigpKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVO
b3coKQoreworICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9s
ZEZvclJlb3B0aW1pemF0aW9uKCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGlt
aXplRnJvbUxvb3BOb3coKQoreworICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRD
b3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKK30KKyNlbmRpZgorCitB
cnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2FycmF5UHJvZmlsZXNbaV0uYnl0ZWNvZGVPZmZzZXQoKSA9PSBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiAmbV9hcnJheVByb2ZpbGVzW2ldOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7
Cit9CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIG1fYXJy
YXlQcm9maWxlcy5hcHBlbmQoQXJyYXlQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0
dXJuICZtX2FycmF5UHJvZmlsZXMubGFzdCgpOworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9j
azo6YWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGFkZEFycmF5UHJvZmls
ZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6
OmdldE9yQWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQXJyYXlQcm9maWxlKiByZXN1bHQgPSBn
ZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tl
ciwgYnl0ZWNvZGVPZmZzZXQpOworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JB
ZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0T3JBZGRBcnJheVByb2Zp
bGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK1Zl
Y3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIENvZGVCbG9jazo6Y29k
ZU9yaWdpbnMoKQoreworICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5jb2RlT3Jp
Z2luczsKK30KKworc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNv
bnN0Cit7CisgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCkt
PmRmZ0lkZW50aWZpZXJzLnNpemUoKTsKK30KKworY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2Nr
OjppZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QKK3sKKyAgICBzaXplX3QgdW5saW5rZWRJZGVu
dGlmaWVycyA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQorICAg
ICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOworICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgcmV0dXJuIG1faml0
Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlm
aWVyc107Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKK3ZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAK
KyAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOworICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4g
dmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKKyAgICAgICAgdW5zaWduZWQg
bnVtU2FtcGxlcyA9IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7CisgICAgICAgIGlm
IChudW1TYW1wbGVzID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCisgICAgICAgICAg
ICBudW1TYW1wbGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0
IHdhbnQgcHJvZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdl
aWdodC4KKyAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOwor
ICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAg
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxl
cygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKKyAgICAgICAgICAgIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOworICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9ucyhsb2NrZXIpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVB
bGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpCit7CisgICAgdW5zaWduZWQgaWdub3JlZFZhbHVl
MSwgaWdub3JlZFZhbHVlMjsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MoaWdub3JlZFZhbHVlMSwgaWdub3JlZFZhbHVlMik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxl
cy5zaXplKCk7IGktLTspCisgICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCB0aGlzKTsKKyAgICAKKyAgICAvLyBEb24ndCBjb3VudCB0aGVz
ZSBlaXRoZXIsIGZvciBzaW1pbGFyIHJlYXNvbnMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZXNbaV0udXBkYXRlSW5kZXhpbmdUeXBlKCk7Cit9CisKK3ZvaWQgQ29kZUJs
b2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucygpCit7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgIGlmIChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnMoKTsKKyAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Cit9CisKK2Jvb2wgQ29kZUJs
b2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4u
LlxuIik7CisKKyAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6
bWF4aW11bU9wdGltaXphdGlvbkRlbGF5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZT
YW1wbGVzSW5Qcm9maWxlczsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MobnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKKworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAg
ZGF0YUxvZ0YoCisgICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAl
bGYgKCV1IC8gJXUpXG4iLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAg
IG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCksCisgICAgICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAor
ICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQorCisgICAgaWYg
KCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpk
ZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQorICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFs
dWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygp
ID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCisgICAgICAgICYmIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9w
dGlvbnM6Om1pbmltdW1PcHRpbWl6YXRpb25EZWxheSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBBU1NFUlQobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSk7CisgICAgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIrKzsKKyAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisjaWYgRU5BQkxFKERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRT
aXRlcygpCit7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KTsKKyAgICBBU1NFUlQoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2
ZSgpOworICAgIAorICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpE
RkdKSVQ6IHsKKyAgICAgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmco
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIERGRzo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9z
ckV4aXRbaV07CisgICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlKHByb2ZpbGVkQmxvY2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
I2lmIEVOQUJMRShGVExfSklUKQorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiB7CisgICAgICAg
IC8vIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBz
aW5jZSB0aGUgRlRMOjpKSVRDb2RlOjpvc3JFeGl0CisgICAgICAgIC8vIHZlY3RvciBjb250YWlu
cyBhIHRvdGFsbHkgZGlmZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5zIHRvIGJlaGF2
ZSBsaWtlCisgICAgICAgIC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KKyAgICAgICAgRlRMOjpK
SVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5mdGwoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IEZUTDo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAgICAgICBl
eGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNpZiBFTkFCTEUoVkVS
Qk9TRV9WQUxVRV9QUk9GSUxFKQordm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkK
K3sKKyAgICBkYXRhTG9nKCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsr
aSkgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9m
aWxlcyhpKTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Cisg
ICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAg
ICAgICAgICBkYXRhTG9nRigiICAgYXJnID0gJXU6ICIsIGkpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0KTsKKyAgICAgICAgaWYgKCFwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSAmJiBwcm9maWxl
LT5tX3ByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCI8ZW1w
dHk+XG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHByb2Zp
bGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisgICAg
fQorICAgIGRhdGFMb2coIlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCk7ICsr
aSkgeworICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGUo
aSk7CisgICAgICAgIGRhdGFMb2dGKCIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5B
QkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKKwordW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJl
Z2lzdGVyQ291bnQoKQoreworICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rOgorICAgICAgICByZXR1cm4gTExJbnQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcih0aGlzKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgY2FzZSBKSVRDb2RlOjpC
YXNlbGluZUpJVDoKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRo
aXMpOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBj
YXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAg
cmV0dXJuIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmZyYW1lUmVnaXN0ZXJDb3VudDsKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitpbnQgQ29kZUJsb2NrOjpzdGFja1BvaW50ZXJPZmZzZXQoKQoreworICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQoKSAtIDEpLm9mZnNldCgpOwor
fQorCitzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQoreworICAg
IC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUg
ZWl0aGVyIG1fdm0gb3IgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0aWFs
aXplZC4gSXQncyBPSyB0byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKKyAgICAv
LyBtYXR0ZXIgaXMgdGhlIHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBzbG93
IHBhdGggaXMgdHJpZ2dlcmVkLgorICAgIGlmICghbV92bSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgaWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJh
c2VsaW5lSklUKQorICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGlj
dGlvbiBhcyB3ZSdsbCBnZXQuCisgICAgCisgICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4g
YSBzaXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCisg
ICAgZG91YmxlIG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQtPm1lYW4oKSArCisgICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKKyAg
ICAKKyAgICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMu
IFNpbGVudGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCisgICAgLy8gaGVyZSBpcyBPSywgc2lu
Y2UgdGhpcyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KKyAgICBpZiAobXVsdGlw
bGllciA8IDAgfHwgbXVsdGlwbGllciA+IDEwMDApCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBtdWx0aXBsaWVyICogbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpOworICAgIAorICAgIC8vIEJlIGV2ZW4gbW9yZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0
IHZhbHVlcyB0aGF0IHdvbid0IGZpdCBpbnRvIGEgc2l6ZV90LiBJZgorICAgIC8vIHRoZSBmdW5j
dGlvbiBpcyBzbyBodWdlIHRoYXQgd2UgY2FuJ3QgZXZlbiBmaXQgaXQgaW50byB2aXJ0dWFsIG1l
bW9yeSB0aGVuIHdlCisgICAgLy8gc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBvdGhlciBndWFy
ZHMgaW4gcGxhY2UgdG8gcHJldmVudCB1cyBmcm9tIGV2ZW4gZ2V0dGluZworICAgIC8vIHRvIHRo
aXMgcG9pbnQuCisgICAgaWYgKGRvdWJsZVJlc3VsdCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRvdWJsZVJlc3VsdCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjp1c2VzT3Bj
b2RlKE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IHZtKCktPmludGVycHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAg
ICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0
ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgeworI2RlZmluZSBERUZJTkVfT1AoY3VyT3Bjb2RlLCBs
ZW5ndGgpICAgICAgICBcCisgICAgICAgIGNhc2UgY3VyT3Bjb2RlOiAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGlmIChjdXJPcGNvZGUgPT0gb3Bjb2RlSUQpICAgICAgXAorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBi
eXRlY29kZU9mZnNldCArPSBsZW5ndGg7ICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKKyN1bmRlZiBERUZJTkVfT1AK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX2NvbnN0
YW50UmVnaXN0ZXJzW2ldLmdldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1i
b2xUYWJsZSo+KG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAg
ICAgIGF1dG8gZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOworICAgICAgICAgICAgZm9y
IChhdXRvIHB0ciA9IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0
cikgeworICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9m
ZnNldCh2aXJ0dWFsUmVnaXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHdvbid0IHdvcmsgZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgorICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAw
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdHItPmtleS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZpcnR1YWxS
ZWdpc3RlciA9PSB0aGlzUmVnaXN0ZXIoKSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
dGhpcyIpOworICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRv
QXJndW1lbnQoKSk7CisKKyAgICByZXR1cm4gIiI7Cit9CisKK1ZhbHVlUHJvZmlsZSogQ29kZUJs
b2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCit7
CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQo
aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOworICAgIHJldHVybiBpbnN0cnVjdGlvbnMo
KVtieXRlY29kZU9mZnNldCArIGxlbmd0aCAtIDFdLnUucHJvZmlsZTsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OnZhbGlkYXRlKCkKK3sKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5l
c3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3Qg
ZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCisgICAgCisgICAgRmFzdEJpdFZlY3RvciBsaXZl
QXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKKyAg
ICAKKyAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X251bUNhbGxlZUxvY2FscykpIHsKKyAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwor
ICAgICAgICBkYXRhTG9nKCIgICAgV3JvbmcgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0IVxuIik7
CisgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOworICAg
ICAgICBkYXRhTG9nKCIgICAgQml0IGNvdW50OiAiLCBsaXZlQXRIZWFkLm51bUJpdHMoKSwgIlxu
Iik7CisgICAgICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgfQorICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fbnVtQ2FsbGVlTG9jYWxzOyBpLS07KSB7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChsaXZlQXRIZWFkW2ldKSB7CisgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25E
aWRGYWlsKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgIiwgcmVnLCAiIGlz
IGV4cGVjdGVkIHRvIGJlIGRlYWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1
bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOworICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZh
aWwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRh
dGlvbkRpZEZhaWwoKQoreworICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZSBpbiAiLCAq
dGhpcywgIjpcbiIpOworICAgIGRhdGFMb2coIlxuIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpl
bmRWYWxpZGF0aW9uRGlkRmFpbCgpCit7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkdW1wQnl0
ZWNvZGUoKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFp
bHVyZS5cbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQoreworICAg
IG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CisgICAgQVNTRVJUKG1fbnVtQnJl
YWtwb2ludHMpOworICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9p
bnQpOworfQorCit2b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3Rl
cHBpbmdNb2RlIG1vZGUpCit7CisgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOworICAgIGlmICht
b2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdn
ZXJTdGVwcGluZyk7Cit9CisKK1JhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2Fz
ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIG1fcmFyZUNhc2VQcm9maWxlcy5h
cHBlbmQoUmFyZUNhc2VQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuICZtX3Jh
cmVDYXNlUHJvZmlsZXMubGFzdCgpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorewor
ICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAorICAgICAg
ICBtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2Rl
T2Zmc2V0LAorICAgICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7Cit9CisK
K3Vuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNl
dChpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0g
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGlm
IChwcm9maWxlKQorICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOworICAgIHJldHVy
biAwOworfQorCitBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIHJldHVybiBhcml0aFByb2ZpbGVG
b3JQQyhpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQpOworfQorCitBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qIHBjKQor
eworICAgIGF1dG8gb3Bjb2RlSUQgPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNb
MF0udS5vcGNvZGUpOworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX25lZ2F0
ZToKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmcGNbM10udS5v
cGVyYW5kKTsKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNh
c2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNh
c2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfZGl2OgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEFyaXRoUHJvZmlsZSo+KCZwY1s0XS51Lm9wZXJhbmQpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIENvZGVCbG9j
azo6Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBp
ZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCk7CisgICAgaWYgKCFwcm9maWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHByb2ZpbGUtPnRvb2tTcGVjaWFsRmFzdFBhdGgoKTsKK30KKworI2lmIEVO
QUJMRShKSVQpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZl
bCgpCit7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxp
dHlMZXZlbCgpOworICAgIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCit2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9j
a0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucykKK3sKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKCktPmhh
c09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2Rl
QmxvY2soKS0+b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7IGkg
PCBvZmZzZXRzTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyBpcyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMgYmxv
Y2ssIGZpbmRpbmcgCisgICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
IHdpbGwgZ2l2ZSB1cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4KKyAg
ICAgICAgc2l6ZV90IHN0YXJ0SWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2ldOworICAgICAgICBSRUxF
QVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW3N0
YXJ0SWR4XS51Lm9wY29kZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOworICAgICAgICBp
bnQgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5v
cGVyYW5kOworICAgICAgICBpbnQgYmFzaWNCbG9ja0VuZE9mZnNldDsKKyAgICAgICAgaWYgKGkg
KyAxIDwgb2Zmc2V0c0xlbmd0aCkgeworICAgICAgICAgICAgc2l6ZV90IGVuZElkeCA9IGJ5dGVj
b2RlT2Zmc2V0c1tpICsgMV07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9w
X3Byb2ZpbGVfY29udHJvbF9mbG93KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQg
PSBpbnN0cnVjdGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBi
ZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZz
ZXQgPSBzdGQ6Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQp
OyAvLyBTb21lIHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1
cmUgaXQgaXMgdGhlIG9mZnNldCBiZWZvcmUuCisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUg
Zm9sbG93aW5nIGNoZWNrIGFsbG93cyBmb3IgdGhlIHNhbWUgdGV4dHVhbCBKYXZhU2NyaXB0IGJh
c2ljIGJsb2NrIHRvIGhhdmUgaXRzIGJ5dGVjb2RlIGVtaXR0ZWQgbW9yZQorICAgICAgICAvLyB0
aGFuIG9uY2UgYW5kIHN0aWxsIHBsYXkgbmljZSB3aXRoIHRoZSBjb250cm9sIGZsb3cgcHJvZmls
ZXIuIFdoZW4gYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0IGlzIGxhcmdlciB0aGFuIAorICAgICAgICAv
LyBiYXNpY0Jsb2NrRW5kT2Zmc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZWNvZGUgZ2Vu
ZXJhdG9yIGhhcyBlbWl0dGVkIGNvZGUgZm9yIHRoZSBzYW1lIEFTVCBub2RlIAorICAgICAgICAv
LyBtb3JlIHRoYW4gb25jZSAoZm9yIGV4YW1wbGU6IEZvckluTm9kZSwgRmluYWxseSBibG9ja3Mg
aW4gVHJ5Tm9kZSwgZXRjKS4gVGhvdWdoIHRoZXNlIGFyZSBkaWZmZXJlbnQgCisgICAgICAgIC8v
IGJhc2ljIGJsb2NrcyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoZXkgYXJlIGdlbmVyYXRlZCBm
cm9tIHRoZSBzYW1lIHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIEphdmFTY3JpcHQgCisgICAg
ICAgIC8vIHByb2dyYW0uIFRoZSBjb25kaXRpb246IAorICAgICAgICAvLyAoYmFzaWNCbG9ja0Vu
ZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgCisgICAgICAgIC8vIGlzIGVuY291bnRl
cmVkIHdoZW4gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgbGllcyBhY3Jvc3MgdGhlIGJvdW5kYXJ5
IG9mIHRoZXNlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgCisgICAgICAgIC8vIGJsb2NrcyBh
bmQgdGhlIHRleHR1YWwgb2Zmc2V0IGdvZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBkdXBsaWNhdGVk
IGJsb2NrIGJhY2sgdG8gdGhlIGJlZ2lubmluZy4gVGhlc2UgCisgICAgICAgIC8vIHJhbmdlcyBh
cmUgZHVtbXkgcmFuZ2VzIGFuZCBhcmUgaWdub3JlZC4gVGhlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUg
YmFzaWMgYmxvY2tzIHBvaW50IHRvIHRoZSBzYW1lIAorICAgICAgICAvLyBpbnRlcm5hbCBkYXRh
IHN0cnVjdHVyZSwgc28gaWYgYW55IG9mIHRoZW0gZXhlY3V0ZSwgaXQgd2lsbCByZWNvcmQgdGhl
IHNhbWUgdGV4dHVhbCBiYXNpYyBibG9jayBpbiB0aGUgCisgICAgICAgIC8vIEphdmFTY3JpcHQg
cHJvZ3JhbSBhcyBleGVjdXRpbmcuCisgICAgICAgIC8vIEF0IHRoZSBieXRlY29kZSBsZXZlbCwg
dGhpcyBzaXR1YXRpb24gbG9va3MgbGlrZToKKyAgICAgICAgLy8gajogb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3cgKGZyb20gai0+aywgd2UgaGF2ZSBiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0KQorICAgICAgICAvLyAuLi4KKyAgICAgICAgLy8gazogb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3cgKHdlIHdhbnQgdG8gc2tpcCBvdmVyIHRoZSBqLT5rIGJsb2NrIGFuZCBz
dGFydCBmcmVzaCBhdCBvZmZzZXQgayBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmFzaWMgYmxvY2sg
ay0+bSkuCisgICAgICAgIC8vIC4uLgorICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xf
ZmxvdworICAgICAgICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9m
ZnNldCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3Ro
KTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBv
ZiBhIENvZGVCbG9jay4KKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUu
YmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJh
c2ljQmxvY2soKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxv
d1Byb2ZpbGVyKCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+c291cmNlSUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
KTsKKworICAgICAgICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0
aGluIHRoZSByYW5nZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNl
dF0KKyAgICAgICAgLy8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZz
ZXRzIGFzIGdhcHMgaW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgorICAgICAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dCBv
ZiBhIEphdmFTY3JpcHQgcHJvZ3JhbSwgCisgICAgICAgIC8vIGZ1bmN0aW9uIGxpdGVyYWxzIGZv
cm0gbmV3IGJhc2ljIGJsb2NrcyBib3VuZGFyaWVzLCBidXQgdGhleSBhcmVuJ3QgcmVwcmVzZW50
ZWQgCisgICAgICAgIC8vIGluc2lkZSB0aGUgQ29kZUJsb2NrJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFt
LgorICAgICAgICBhdXRvIGluc2VydEZ1bmN0aW9uR2FwcyA9IFtiYXNpY0Jsb2NrTG9jYXRpb24s
IGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0gKGNvbnN0IFdyaXRl
QmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBmdW5jdGlvbkV4ZWN1dGFibGUpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIGludCBm
dW5jdGlvblN0YXJ0ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Cisg
ICAgICAgICAgICBpbnQgZnVuY3Rpb25FbmQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5k
T2Zmc2V0KCk7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25TdGFydCA+PSBiYXNpY0Jsb2NrU3Rh
cnRPZmZzZXQgJiYgZnVuY3Rpb25FbmQgPD0gYmFzaWNCbG9ja0VuZE9mZnNldCkKKyAgICAgICAg
ICAgICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmluc2VydEdhcChmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkVuZCk7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8
RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25EZWNscykKKyAgICAg
ICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKKyAgICAgICAgZm9yIChjb25z
dCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rp
b25FeHBycykKKyAgICAgICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKKwor
ICAgICAgICBpbnN0cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2ljQmxvY2tMb2NhdGlvbiA9
IGJhc2ljQmxvY2tMb2NhdGlvbjsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoSklUKQordm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoreyAKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZSht
YXApOworfQorCitPcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBw
YykKK3sKKyAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworICAgICAgICBpZiAoT3B0aW9u
YWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhw
YykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisKKyAgICBmb3IgKEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICpp
dGVyOworICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7CisgICAgfQorCisgICAg
aWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0
aGlzLCBwYykpCisgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworCisgICAgcmV0dXJuIE51bGxv
cHQ7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworT3B0aW9uYWw8dW5zaWduZWQ+IENvZGVC
bG9jazo6Ynl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpCit7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0OworICAg
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKKyAgICBpZiAoaml0
VHlwZSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBieXRlY29kZU9mZnNl
dCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworI2Vsc2UKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRz
KCkpOworICAgICAgICBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpE
RkdKSVQgfHwgaml0VHlwZSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KSk7CisgICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KTsKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyNlbHNl
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXQ7Cit9CisKK2ludDMyX3QgQ29kZUJsb2NrOjp0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoICh1bmxpbmtlZENv
ZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgorICAg
ICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcnVlVHJpU3RhdGU6CisgICAgICAgIHJl
dHVybiB0aHJlc2hvbGQgLyAyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gdGhyZXNob2xkOworfQorCit2b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAo
KQoreworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQoreworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VFNvb24oKSksIHRoaXMpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkK
K3sKKyNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICBkb3VibGUgbnVtQWRkcyA9IDAuMDsK
KyAgICBkb3VibGUgdG90YWxBZGRTaXplID0gMC4wOworICAgIGRvdWJsZSBudW1NdWxzID0gMC4w
OworICAgIGRvdWJsZSB0b3RhbE11bFNpemUgPSAwLjA7CisgICAgZG91YmxlIG51bU5lZ3MgPSAw
LjA7CisgICAgZG91YmxlIHRvdGFsTmVnU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtU3VicyA9
IDAuMDsKKyAgICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4wOworCisgICAgYXV0byBjb3VudElD
cyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgZm9yIChKSVRBZGRJQyog
YWRkSUMgOiBjb2RlQmxvY2stPm1fYWRkSUNzKSB7CisgICAgICAgICAgICBudW1BZGRzKys7Cisg
ICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGNvZGVCbG9jay0+bV9tdWxJQ3MpIHsK
KyAgICAgICAgICAgIG51bU11bHMrKzsKKyAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJ
Qy0+Y29kZVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lD
IDogY29kZUJsb2NrLT5tX25lZ0lDcykgeworICAgICAgICAgICAgbnVtTmVncysrOworICAgICAg
ICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNzKSB7CisgICAg
ICAgICAgICBudW1TdWJzKys7CisgICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNv
ZGVTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg
ICBoZWFwKCktPmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOworCisgICAgZGF0YUxvZygiTnVt
IEFkZHM6ICIsIG51bUFkZHMsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIEFkZCBzaXplIGlu
IGJ5dGVzOiAiLCB0b3RhbEFkZFNpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2ZXJhZ2UgQWRk
IHNpemU6ICIsIHRvdGFsQWRkU2l6ZSAvIG51bUFkZHMsICJcbiIpOworICAgIGRhdGFMb2coIlxu
Iik7CisgICAgZGF0YUxvZygiTnVtIE11bHM6ICIsIG51bU11bHMsICJcbiIpOworICAgIGRhdGFM
b2coIlRvdGFsIE11bCBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE11bFNpemUsICJcbiIpOworICAg
IGRhdGFMb2coIkF2ZXJhZ2UgTXVsIHNpemU6ICIsIHRvdGFsTXVsU2l6ZSAvIG51bU11bHMsICJc
biIpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0YUxvZygiTnVtIE5lZ3M6ICIsIG51bU5l
Z3MsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIE5lZyBzaXplIGluIGJ5dGVzOiAiLCB0b3Rh
bE5lZ1NpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2ZXJhZ2UgTmVnIHNpemU6ICIsIHRvdGFs
TmVnU2l6ZSAvIG51bU5lZ3MsICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0YUxv
ZygiTnVtIFN1YnM6ICIsIG51bVN1YnMsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIFN1YiBz
aXplIGluIGJ5dGVzOiAiLCB0b3RhbFN1YlNpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2ZXJh
Z2UgU3ViIHNpemU6ICIsIHRvdGFsU3ViU2l6ZSAvIG51bVN1YnMsICJcbiIpOworCisgICAgZGF0
YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworI2VuZGlmCit9CisKK0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyYgQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBz
dGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7CisgICAgewor
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBpZiAo
IW1fbGl2ZW5lc3NBbmFseXNpcykKKyAgICAgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcyA9IFdU
Rk1vdmUoYW5hbHlzaXMpOworICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKKyAg
ICB9Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIw
ODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDQ2MzggKzI4LDE4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotCi0jaW5jbHVkZSAiQXJpdGhQ
cm9maWxlLmgiCi0jaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiQnl0
ZWNvZGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
LSNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgi
Ci0jaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCi0jaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHRHJpdmVyLmgiCi0jaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCi0jaW5jbHVkZSAiRGVi
dWdnZXIuaCIKLSNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCi0jaW5jbHVkZSAi
R2V0UHV0SW5mby5oIgotI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgotI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUTWF0aElDLmgiCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQu
aCIKLSNpbmNsdWRlICJMTEludERhdGEuaCIKLSNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIK
LSNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCIKLSNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBo
aWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUmVk
dWNlV2hpdGVzcGFjZS5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgIlR5cGVMb2NhdGlvbkNhY2hlLmgiCi0jaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5o
IgotI2luY2x1ZGUgIlZNSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhlY3V0YWJs
ZS5oIgotI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+Ci0KLSNpZiBFTkFCTEUoSklUKQotI2lu
Y2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShERkdf
SklUKQotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZU
TF9KSVQpCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgotI2VuZGlmCisjaW5jbHVkZSAiRnVuY3Rp
b25Db2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiQ29kZUJsb2NrIiwgMCwgMCwKLSAgICBDUkVBVEVfTUVU
SE9EX1RBQkxFKENvZGVCbG9jaykKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkNvZGVC
bG9jazo6c19pbmZvID0gewogICAgICJGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8s
IDAsCiAgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkNvZGVCbG9jaykKIH07CiAKLSNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi1jb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OnNfaW5mbyA9IHsKLSAgICAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlDb2RlQmxvY2spCi19Owot
I2VuZGlmCi0KLWNvbnN0IENsYXNzSW5mbyBHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAg
ICAiR2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9E
X1RBQkxFKEdsb2JhbENvZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBQcm9ncmFtQ29k
ZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIlByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUNvZGVCbG9jaykKLX07Ci0KLWNv
bnN0IENsYXNzSW5mbyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIk1v
ZHVsZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBF
dmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIkV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19p
bmZvLCAwLAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbENvZGVCbG9jaykKLX07Ci0KIHZv
aWQgRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIGpzQ2Fz
dDxGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+RnVuY3Rpb25Db2RlQmxvY2soKTsKIH0KIAot
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLXZvaWQgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNl
bGwpLT5+V2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKLX0KLSNlbmRpZgotCi12b2lkIFByb2dyYW1D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxQcm9ncmFtQ29k
ZUJsb2NrKj4oY2VsbCktPn5Qcm9ncmFtQ29kZUJsb2NrKCk7Ci19Ci0KLXZvaWQgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+fk1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKLX0K
LQotdm9pZCBFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nh
c3Q8RXZhbENvZGVCbG9jayo+KGNlbGwpLT5+RXZhbENvZGVCbG9jaygpOwotfQotCi1DU3RyaW5n
IENvZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNvZGVUeXBl
KCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICAgIHJldHVybiAiPGdsb2JhbD4iOwot
ICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIHJldHVybiAiPGV2YWw+IjsKLSAgICBjYXNlIEZ1
bmN0aW9uQ29kZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKLSAgICBjYXNlIE1vZHVs
ZUNvZGU6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZT4iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKLSAgICB9Ci19Ci0KLWJv
b2wgQ29kZUJsb2NrOjpoYXNIYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX2hhc2g7Ci19
Ci0KLWJvb2wgQ29kZUJsb2NrOjppc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIWlzQ29tcGlsYXRpb25UaHJlYWQoKTsKLX0KLQotQ29kZUJsb2NrSGFzaCBDb2RlQmxv
Y2s6Omhhc2goKSBjb25zdAotewotICAgIGlmICghbV9oYXNoKSB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGlzU2FmZVRvQ29tcHV0ZUhhc2goKSk7Ci0gICAgICAgIG1faGFzaCA9IENvZGVCbG9j
a0hhc2gob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktp
bmQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2hhc2g7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2Nr
Ojpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAotewotICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1
bmN0aW9uQ29kZSkKLSAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3Vy
Y2UoKS50b1VURjgoKTsKLSAgICAKLSAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3Vy
Y2UoKTsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOwotICAgIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiB1bmxpbmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwot
ICAgIHVuc2lnbmVkIHVubGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQo
KTsKLSAgICB1bnNpZ25lZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxp
bmtlZFN0YXJ0T2Zmc2V0OwotICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSArIHVubGlu
a2VkLT51bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCk7Ci0gICAgdW5zaWduZWQgcmFuZ2VFbmQg
PSBkZWx0YSArIHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0
aCgpOwotICAgIHJldHVybiB0b0NTdHJpbmcoCi0gICAgICAgICJmdW5jdGlvbiAiLAotICAgICAg
ICBwcm92aWRlci0+c291cmNlKCkuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFu
Z2VTdGFydCkudXRmOCgpKTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9u
ZUxpbmUoKSBjb25zdAotewotICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVG
b3JUb29scygpKTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2li
bGUoKSBjb25zdAotewotICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgp
KQotICAgICAgICByZXR1cm4gdG9DU3RyaW5nKGhhc2goKSk7Ci0gICAgcmV0dXJuICI8bm8taGFz
aD4iOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVh
bSYgb3V0LCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50
KGluZmVycmVkTmFtZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7Ci0gICAgb3V0
LnByaW50KCI6WyIsIFJhd1BvaW50ZXIodGhpcyksICItPiIpOwotICAgIGlmICghIW1fYWx0ZXJu
YXRpdmUpCi0gICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKGFsdGVybmF0aXZlKCkpLCAiLT4i
KTsKLSAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGpp
dFR5cGUsIGNvZGVUeXBlKCkpOwotCi0gICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KQotICAgICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOwotICAgIG91dC5wcmlu
dCgiLCAiLCBpbnN0cnVjdGlvbkNvdW50KCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCi0gICAgICAg
IG91dC5wcmludCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7Ci0gICAgaWYgKG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQotICAgICAgICBvdXQucHJpbnQoIiAoTmV2
ZXJJbmxpbmUpIik7Ci0gICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGlt
aXplKCkpCi0gICAgICAgIG91dC5wcmludCgiIChOZXZlck9wdGltaXplKSIpOwotICAgIGVsc2Ug
aWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlckZUTE9wdGltaXplKCkpCi0gICAgICAg
IG91dC5wcmludCgiIChOZXZlckZUTE9wdGltaXplKSIpOwotICAgIGlmIChvd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQotICAgICAgICBvdXQucHJpbnQoIiAo
RGlkVHJ5VG9FbnRlckluTG9vcCkiKTsKLSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpKQotICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKLSAg
ICBpZiAobV9kaWRGYWlsSklUQ29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChKSVRG
YWlsKSIpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQg
JiYgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChGVExGYWls
KSIpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYg
bV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKQotICAgICAgICBvdXQucHJpbnQoIiAoSGFkRlRMUmVw
bGFjZW1lbnQpIik7Ci0gICAgb3V0LnByaW50KCJdIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEFzc3VtaW5nSklUVHlwZShv
dXQsIGppdFR5cGUoKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwo
KSwgIihAaWQiLCBpZDAsICIpIik7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5h
bWUoaW50IHIpIGNvbnN0Ci17Ci0gICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQot
ICAgICAgICByZXR1cm4gY29uc3RhbnROYW1lKHIpOwotCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhW
aXJ0dWFsUmVnaXN0ZXIocikpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6Y29uc3RhbnROYW1l
KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnQoaW5k
ZXgpOwotICAgIHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGlu
ZGV4KSwgIikiKTsKLX0KLQotc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVn
RXhwKiByZWdFeHApCi17Ci0gICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAg
fTsKLSAgICBpbnQgaW5kZXggPSAxOwotICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQotICAgICAg
ICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkK
LSAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAocmVnRXhwLT5tdWx0aWxp
bmUoKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7Ci0gICAgaWYgKHJlZ0V4cC0+c3Rp
Y2t5KCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAneSc7Ci0gICAgaWYgKHJlZ0V4cC0+
dW5pY29kZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOwotCi0gICAgcmV0dXJu
IHRvQ1N0cmluZygiLyIsIHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Ci19Ci0K
LXN0YXRpYyBDU3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKLXsKLSAg
ICByZXR1cm4gdG9DU3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwg
cmUsICIpIik7Ci19Ci0KLU5FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb29r
TmFtZShpbnQgZGVidWdIb29rVHlwZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERlYnVn
SG9va1R5cGU+KGRlYnVnSG9va1R5cGUpKSB7Ci0gICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJh
bWU6Ci0gICAgICAgICAgICByZXR1cm4gImRpZEVudGVyQ2FsbEZyYW1lIjsKLSAgICAgICAgY2Fz
ZSBXaWxsTGVhdmVDYWxsRnJhbWU6Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxMZWF2ZUNhbGxG
cmFtZSI7Ci0gICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gIndpbGxFeGVjdXRlU3RhdGVtZW50IjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4
cHJlc3Npb246Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxFeGVjdXRlRXhwcmVzc2lvbiI7Ci0g
ICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgcmV0dXJuICJ3aWxs
RXhlY3V0ZVByb2dyYW0iOwotICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgotICAgICAg
ICAgICAgcmV0dXJuICJkaWRFeGVjdXRlUHJvZ3JhbSI7Ci0gICAgICAgIGNhc2UgRGlkUmVhY2hC
cmVha3BvaW50OgotICAgICAgICAgICAgcmV0dXJuICJkaWRSZWFjaEJyZWFrcG9pbnQiOwotICAg
IH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwot
fQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNT
dGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBj
aGFyKiBvcCkKLXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLQotICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgb3ApOwotICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpwcmludEJpbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKLXsKLSAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENv
bmRpdGlvbmFsSnVtcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElu
c3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgaW50IGxvY2F0aW9uLCBjb25zdCBj
aGFyKiBvcCkKLXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgb2Zm
c2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMsICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotfQotCi12
b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRl
KiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCi17Ci0gICAgY29u
c3QgY2hhciogb3A7Ci0gICAgc3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJ
RChpdC0+dS5vcGNvZGUpKSB7Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWQ6Ci0gICAgICAgIG9wID0g
ImdldF9ieV9pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xvYWQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9pZF9wcm90b19sb2FkIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9p
ZF91bnNldCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoK
LSAgICAgICAgb3AgPSAiYXJyYXlfbGVuZ3RoIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9R
VUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKLSAgICAgICAgb3AgPSAwOwotI2VuZGlm
Ci0gICAgfQotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAg
aXQgKz0gNDsgLy8gSW5jcmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KLX0KLQotc3Rh
dGljIHZvaWQgZHVtcFN0cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1l
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0gICAg
aWYgKCFzdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBvdXQucHJpbnRmKCIl
cyA9ICVwIiwgbmFtZSwgc3RydWN0dXJlKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseShpZGVudC5pbXBsKCkpOwotICAgIGlmIChv
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKLSAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAl
ZCkiLCBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91
dCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAg
ICBvdXQucHJpbnRmKCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOwotICAgIGJvb2wgZmlyc3QgPSB0
cnVlOwotICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUg
PSBjaGFpbi0+aGVhZCgpOwotICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7Ci0gICAgICAgICAr
K2N1cnJlbnRTdHJ1Y3R1cmUpIHsKLSAgICAgICAgaWYgKGZpcnN0KQotICAgICAgICAgICAgZmly
c3QgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsK
LSAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBjdXJyZW50U3RydWN0dXJlLT5n
ZXQoKSwgaWRlbnQpOwotICAgIH0KLSAgICBvdXQucHJpbnRmKCJdIik7Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBFeGVjU3Rh
dGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKLXsKLSAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRp
b247Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOyAvLyB0ZWxs
IHRoZSBjb21waWxlciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29uZmlndXJhdGlv
bnMuCi0gICAgCi0gICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBvcF9nZXRfYXJyYXlfbGVuZ3RoKQotICAgICAgICBvdXQu
cHJpbnRmKCIgbGxpbnQoYXJyYXlfbGVuZ3RoKSIpOwotICAgIGVsc2UgaWYgKFN0cnVjdHVyZUlE
IHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChz
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKLSAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgb3V0
LnByaW50ZigiKSIpOwotICAgICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2Rl
SUQoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9ieV9pZF9wcm90b19sb2FkKQot
ICAgICAgICAgICAgb3V0LnByaW50ZigiIHByb3RvKCVwKSIsIGluc3RydWN0aW9uWzZdLnUucG9p
bnRlcik7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJQdHIgPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgewotICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3R1YlB0cjsKLSAgICAgICAgaWYgKHN0dWJJ
bmZvLnJlc2V0QnlHQykKLSAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsK
LSAgICAgICAgCi0gICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIHN0dWIgPSBudWxscHRyOwotICAgICAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKLSAgICAgICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKLSAgICAgICAgICAgIGJhc2VT
dHJ1Y3R1cmUgPSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCJzdHViIik7Ci0gICAgICAgICAgICBzdHViID0gc3R1YkluZm8u
dS5zdHViOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNl
dDoKLSAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgotICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJyYXlMZW5ndGgiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1
cmUpIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICBkdW1wU3Ry
dWN0dXJlKG91dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzdHViKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsK
LQotICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0obWFwKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVT
dGF0dXMoUHJpbnRTdHJlYW0mIG91dCwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYg
bWFwKQotewotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBsb2NhdGlvbjsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRp
ZmllcihpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShp
ZGVudCk7IC8vIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9y
bSBjb25maWd1cmF0aW9ucy4KLQotICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbls4XS51
LnB1dEJ5SWRGbGFncyk7Ci0gICAgCi0gICAgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0g
aW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0g
ICAgICAgIG91dC5wcmludCgiIGxsaW50KCIpOwotICAgICAgICBpZiAoU3RydWN0dXJlSUQgbmV3
U3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChuZXdTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInBy
ZXYiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIG5ld1N0cnVjdHVyZSwgaWRlbnQp
OwotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzdd
LnUuc3RydWN0dXJlQ2hhaW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwg
Iik7Ci0gICAgICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwg
InN0cnVjdCIsIHN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICBvdXQucHJpbnQoIikiKTsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0
ciA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9ICpzdHViUHRyOwotICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRC
eUdDKQotICAgICAgICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdDKSIpOwotICAgICAgICAK
LSAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
c3R1YkluZm8uY2FjaGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVw
bGFjZToKLSAgICAgICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICBk
dW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpz
dHViSW5mby51LnN0dWIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIG91dC5wcmludGYoIikiKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSht
YXApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVh
bSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiBpdCwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYg
aGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCi17Ci0gICAg
aW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50KHJlZ2lzdGVyTmFt
ZShkc3QpLCAiLCAiLCByZWdpc3Rlck5hbWUoZnVuYyksICIsICIsIGFyZ0NvdW50LCAiLCAiLCBy
ZWdpc3Rlck9mZnNldCk7Ci0gICAgb3V0LnByaW50KCIgKHRoaXMgYXQgIiwgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgLXJlZ2lzdGVyT2Zmc2V0KSwgIikiKTsKLSAgICBpZiAoY2FjaGVE
dW1wTW9kZSA9PSBEdW1wQ2FjaGVzKSB7Ci0gICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPSBpdFsxXS51LmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by0+bGFzdFNlZW5DYWxsZWUpIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAg
ICAgICAgIiBsbGludCglcCwgZXhlYyAlcCkiLAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+bGFzdFNlZW5DYWxsZWUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5s
YXN0U2VlbkNhbGxlZS0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIGlmIChDYWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9j
YXRpb24pKSkgewotICAgICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNl
ZW5DYWxsZWUoKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiIGppdCglcCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2Rl
OjpGVExKSVQpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0obWFwKTsKLSNlbmRpZgotICAgIH0KLSAgICArK2l0OwotICAgICsraXQ7
Ci0gICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwot
ICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNT
dGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBj
aGFyKiBvcCkKLXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgaWQw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwot
ICAgIGl0ICs9IDU7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkKLXsKLSAgICBk
dW1wU291cmNlKFdURjo6ZGF0YUZpbGUoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291
cmNlKFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0
aW9uRXhlY3V0YWJsZSgpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25F
eGVjdXRhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKLSAgICAgICAgU3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCktPmdldFJhbmdlKAotICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5nIGVu
ZCBvZmZzZXQgaXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KLSAgICAgICAgCi0gICAg
ICAgIG91dC5wcmludCgiZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCksIHNvdXJjZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgb3V0LnByaW50KGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZp
ZXcoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoKQotewotICAgIGR1bXBC
eXRlY29kZShXVEY6OmRhdGFGaWxlKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgLy8gV2Ugb25seSB1c2UgdGhlIEV4ZWNTdGF0
ZSogZm9yIHRoaW5ncyB0aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhlY3V0aW9uLAot
ICAgIC8vIGxpa2UgY29udmVydGluZyBhIEpTU3RyaW5nIHRvIGEgU3RyaW5nLiBIZW5jZSB0aGUg
Z2xvYmFsRXhlYyBpcyBhcHByb3ByaWF0ZS4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50
ID0gMDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OyBpICs9IG9wY29kZUxlbmd0aHNbZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5z
dHJ1Y3Rpb25zKClbaV0udS5vcGNvZGUpXSkKLSAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50Owot
Ci0gICAgb3V0LnByaW50KCp0aGlzKTsKLSAgICBvdXQucHJpbnRmKAotICAgICAgICAiOiAlbHUg
bV9pbnN0cnVjdGlvbnM7ICVsdSBieXRlczsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVn
aXN0ZXIocyk7ICVkIHZhcmlhYmxlKHMpIiwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCi0g
ICAgICAgIG1fbnVtUGFyYW1ldGVycywgbV9udW1DYWxsZWVMb2NhbHMsIG1fbnVtVmFycyk7Ci0g
ICAgb3V0LnByaW50KCI7IHNjb3BlIGF0ICIsIHNjb3BlUmVnaXN0ZXIoKSk7Ci0gICAgb3V0LnBy
aW50ZigiXG4iKTsKLSAgICAKLSAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7Ci0gICAgQ2FsbExp
bmtJbmZvTWFwIGNhbGxMaW5rSW5mb3M7Ci0gICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsK
LSAgICBnZXRDYWxsTGlua0luZm9NYXAoY2FsbExpbmtJbmZvcyk7Ci0gICAgCi0gICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBjb25zdCBJ
bnN0cnVjdGlvbiogZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChjb25zdCBJ
bnN0cnVjdGlvbiogaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkdW1wQnl0
ZWNvZGUob3V0LCBleGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Ci0g
ICAgCi0gICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBvdXQucHJpbnRm
KCJcbklkZW50aWZpZXJzOlxuIik7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgb3V0LnByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpKSwgaWRlbnRpZmllcihpKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSAhPSBudW1iZXJPZklkZW50aWZpZXJzKCkp
OwotICAgIH0KLQotICAgIGlmICghbV9jb25zdGFudFJlZ2lzdGVycy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgb3V0LnByaW50ZigiXG5Db25zdGFudHM6XG4iKTsKLSAgICAgICAgc2l6ZV90IGkgPSAw
OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb25EZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOgotICAgICAgICAgICAgICAgIHNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGRvdWJsZSI7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6SW50ZWdlcjoKLSAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRp
b25EZXNjcmlwdGlvbiA9ICI6IGluIHNvdXJjZSBhcyBpbnRlZ2VyIjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cjoKLSAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9
ICIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3V0LnByaW50ZigiICAgayV1ID0gJXMlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0
b0NTdHJpbmcobV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpLCBzb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0g
d2hpbGUgKGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgewotICAg
ICAgICBvdXQucHJpbnRmKCJcbm1fcmVnZXhwczpcbiIpOwotICAgICAgICBzaXplX3QgaSA9IDA7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVzXG4iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5saW5rZWRD
b2RlLT5yZWdleHAoaSkpLmRhdGEoKSk7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hp
bGUgKGkgPCBjb3VudCk7Ci0gICAgfQotCi0gICAgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKG91dCk7
Ci0gICAgCi0gICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiU3dpdGNoIEp1bXAgVGFibGVz
OlxuIik7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIgICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgaW50IGVudHJ5ID0g
MDsKLSAgICAgICAgICAgIFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9y
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIsICsrZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoISppdGVyKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRm
KCJcdFx0JTRkID0+ICUwNGRcbiIsIGVudHJ5ICsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzW2ldLm1pbiwgKml0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50
ZigiICAgICAgfVxuIik7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBt
X3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiXG5TdHJpbmcgU3dpdGNoIEp1bXAgVGFi
bGVzOlxuIik7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIgICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0
YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwotICAgICAg
ICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNl
dFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgb3V0
LnByaW50ZigiXHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBpdGVyLT5rZXktPnV0ZjgoKS5kYXRhKCks
IGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCk7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgICAg
ICB9XG4iKTsKLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwotICAgIH0KLQotICAgIG91dC5w
cmludGYoIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMo
UHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiXG5F
eGNlcHRpb24gSGFuZGxlcnM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9l
eGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlx0ICVkOiB7IHN0
YXJ0OiBbJTRkXSBlbmQ6IFslNGRdIHRhcmdldDogWyU0ZF0gfSAlc1xuIiwKLSAgICAgICAgICAg
ICAgICBpICsgMSwgaGFuZGxlci5zdGFydCwgaGFuZGxlci5lbmQsIGhhbmRsZXIudGFyZ2V0LCBo
YW5kbGVyLnR5cGVOYW1lKCkpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChp
IDwgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOwotICAgIH0KLX0KLQot
dm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKQotewotICAgIGlmIChoYXNQcmludGVkUHJvZmlsaW5nKSB7
Ci0gICAgICAgIG91dC5wcmludCgiOyAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBvdXQucHJpbnQoIiAgICAiKTsKLSAgICBoYXNQcmludGVkUHJvZmlsaW5nID0gdHJ1ZTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQotewot
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgKytpdDsK
LSAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlv
bihsb2NrZXIpOwotICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAg
ICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5
UHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAKLSAgICArK2l0OwotICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQot
ICAgICAgICByZXR1cm47Ci0gICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJv
ZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOwotICAgIGlmICghZGVzY3JpcHRp
b24ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0
LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOwotfQot
Ci12b2lkIENvZGVCbG9jazo6ZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpCi17Ci0gICAgaWYgKCFwcm9maWxlIHx8ICFwcm9maWxlLT5tX2NvdW50ZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwotICAgIG91dC5wcmludChuYW1lLCBwcm9maWxlLT5tX2NvdW50ZXIpOwot
fQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBB
cml0aFByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAg
aWYgKCFwcm9maWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYmVnaW5EdW1wUHJvZmls
aW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgb3V0LnByaW50KCJyZXN1bHRzOiAi
LCAqcHJvZmlsZSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3AoUHJp
bnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCkKLXsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAlLTE3cyAiLCBs
b2NhdGlvbiwgb3ApOwotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0
aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQp
Ci17Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7
Ci0gICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0YSgpKTsKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKLSAgICBQcmludFN0cmVhbSYgb3V0LCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiBpdCwKLSAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlu
a0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCi17Ci0gICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdp
bjsKLSAgICBib29sIGhhc1ByaW50ZWRQcm9maWxpbmcgPSBmYWxzZTsKLSAgICBPcGNvZGVJRCBv
cGNvZGUgPSBleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOwot
ICAgIHN3aXRjaCAob3Bjb2RlKSB7Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29w
ZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJnZXRfc2NvcGUiLCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9h
cmd1bWVudHM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfc2NvcGVkX2FyZ3Vt
ZW50cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2Nsb25lZF9hcmd1
bWVudHMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9h
cmd1bWVudF9jb3VudDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJhcmd1bWVudF9jb3VudCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgrK2l0
KS0+dS51bnNpZ25lZFZhbHVlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBh
cmd1bWVudE9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2dldF9yZXN0X2xlbmd0aDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJnZXRfcmVzdF9sZW5ndGgiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudE9mZnNldCA9ICgrK2l0KS0+dS51bnNpZ25lZFZhbHVlOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJndW1lbnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNh
cGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRG
dW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3RoaXMiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXUsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBjYWNoZWRGdW5j
dGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rv
X3RoaXM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAidG9fdGhpcyIsIHIwKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gKCsraXQpLT51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIGNhY2hlKHN0cnVjdCA9ICIsIFJhd1BvaW50
ZXIoc3RydWN0dXJlKSwgIikiKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAoKytpdCkt
PnUudG9UaGlzU3RhdHVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfY2hlY2tfdGR6OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2NoZWNrX3RkeiIsIHIwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewotICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZl
cnJlZElubGluZUNhcGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfb2JqZWN0Iik7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
aW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTa2lwIG9iamVj
dCBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX25ld19hcnJheTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXkiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShhcmd2KS5kYXRhKCksIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsg
Ly8gU2tpcCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKLSAgICAgICAg
ICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsZW5ndGgg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV93aXRoX3NpemUiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGxlbmd0aCkuZGF0YSgpKTsKLSAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxs
b2NhdGlvbiBwcm9maWxlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV9idWZm
ZXIiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUo
ZHN0KS5kYXRhKCksIGFyZ3YsIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJh
eSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3
X3JlZ2V4cCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5r
ZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cyIsIHJlZ2V4cE5hbWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21vdjogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm1vdiIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90
eXBlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgICsraXQ7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAg
ICAgICsraXQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9wcm9maWxlX3R5cGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogewotICAgICAgICAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSAoKytpdCktPnUuYmFzaWNC
bG9ja0xvY2F0aW9uOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAicHJvZmlsZV9jb250cm9sX2Zsb3ciKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIlslZCwgJWRdIiwgYmFzaWNCbG9ja0xvY2F0aW9uLT5zdGFydE9mZnNldCgpLCBiYXNp
Y0Jsb2NrTG9jYXRpb24tPmVuZE9mZnNldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3Bfbm90OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJub3QiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlcV9udWxsIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcSIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAgICAgcHJp
bnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxX251bGwiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzdHJpY3RlcSIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uc3RyaWN0
ZXE6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJuc3RyaWN0ZXEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfbGVzczogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImxlc3MiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfbGVzc2VxOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibGVzc2VxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2dyZWF0ZXI6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJncmVhdGVyIik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogewotICAgICAgICAgICAgcHJpbnRC
aW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXJlcSIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbmM6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5jIiwgcjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWM6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVj
IiwgcjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90
b19udW1iZXI6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInRvX251bWJlciIpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwg
aXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF90b19zdHJpbmc6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX3N0cmluZyIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKLSAgICAgICAgICAgIHByaW50
VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lZ2F0ZSIpOwotICAgICAgICAgICAg
KytpdDsgLy8gb3BfbmVnYXRlIGhhcyBhbiBleHRyYSBvcGVyYW5kIGZvciB0aGUgQXJpdGhQcm9m
aWxlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6
IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJh
ZGQiKTsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX211bDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm11bCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0gICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGl2Iik7Ci0gICAgICAgICAg
ICArK2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9t
b2Q6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJtb2QiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
cG93OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X3N1YjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN1YiIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibHNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAg
ICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJzaGlmdCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7
Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidXJz
aGlmdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9i
aXRhbmQ6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJiaXRhbmQiKTsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImJpdHhvciIpOwotICAgICAgICAgICAgKytp
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0b3I6
IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJi
aXRvciIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZTogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3Zl
cnJpZGVzX2hhc19pbnN0YW5jZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0YW5jZW9mIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Imluc3RhbmNlb2ZfY3VzdG9tIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdW5zaWduZWQ6IHsKLSAg
ICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVuc2lnbmVk
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3R5cGVv
ZjogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
dHlwZW9mIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2lzX2VtcHR5OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJpc19lbXB0eSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX3VuZGVmaW5lZCIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAgICAgICBw
cmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19ib29sZWFuIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewot
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfbnVt
YmVyIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lz
X2NlbGxfd2l0aF90eXBlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHR5cGUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2NlbGxfd2l0aF90eXBlIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7Ci0gICAgICAgICAgICBwcmludFVu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6IHsK
LSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29i
amVjdF9vcl9udWxsIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2lzX2Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJpc19mdW5jdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0cnlfZ2V0
X2J5X2lkIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVu
dGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0
LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRf
cHJvdG9fbG9hZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQpOwotICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0
dXMob3V0LCBleGVjLCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGR1bXBWYWx1
ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczogewot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Z2V0X2J5X2lkX3dpdGhfdGhpcyIpOwotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMikuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2Zp
bGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dl
dF9ieV92YWxfd2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9ieV92YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MykuZGF0YSgpKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBwcmludFB1dEJ5SWRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pZCIpOwotICAgICAgICAgICAgcHJpbnRQdXRCeUlk
Q2FjaGVTdGF0dXMob3V0LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lk
X3dpdGhfdGhpcyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShp
ZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxf
d2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInB1dF9ieV92YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dl
dHRlcl9ieV9pZDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
bjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAicHV0X2dldHRlcl9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG4wID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
dF9zZXR0ZXJfYnlfaWQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSku
ZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBu
MCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9i
eV92YWw6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicHV0X2dldHRlcl9ieV92YWwiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBuMCwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0dGVyX2J5X3ZhbCIp
OwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2RlZmluZV9kYXRhX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImRlZmluZV9kYXRhX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMykuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByNCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjMpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJk
ZWxfYnlfaWQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlk
ZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAg
ICAgICAgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQXJy
YXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfdmFsX2RpcmVjdCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcEFycmF5UHJvZmls
aW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlf
dmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pbmRleDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaW5kZXgiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAldSwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgbjAsIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfam1wOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJqbXAiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkKC0+JWQpIiwgb2Zm
c2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2p0cnVlOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVt
cChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqdHJ1ZSIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKLSAgICAgICAgICAg
IHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpm
YWxzZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9q
ZXFfbnVsbDogewotICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBi
ZWdpbiwgaXQsIGxvY2F0aW9uLCAiamVxX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludENv
bmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqbmVxX251bGwi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9w
dHI6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOwot
ICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5lcV9wdHIiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCBwb2ludGVyLCBtX2dsb2JhbE9iamVjdC0+YWN0dWFsUG9pbnRlckZv
cihwb2ludGVyKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICArK2l0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbGVzczog
ewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImpsZXNzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpsZXNzZXEi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24g
KyBvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9qZ3JlYXRlcjogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpncmVhdGVyIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImpncmVhdGVyZXEiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3MiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBv
ZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9q
bmxlc3NlcTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZz
ZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpubGVzc2VxIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7Ci0gICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiam5ncmVhdGVyIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+
JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBv
ZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXJl
cSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlv
biArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2xvb3BfaGludDogewotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibG9vcF9oaW50Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3dhdGNoZG9nOiB7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ3YXRjaGRvZyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJsb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIpOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3Bfc3dpdGNoX2ltbTogewotICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN3aXRjaF9pbW0iKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwg
JXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQs
IHJlZ2lzdGVyTmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAg
ICAgIGludCB0YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
ZGVmYXVsdFRhcmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjcnV0
aW5lZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfY2hhciIpOwotICAgICAg
ICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRU
YXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJl
Z2lzdGVyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAic3dpdGNoX3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJWQs
ICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVm
YXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAibmV3X2Z1bmMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVk
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19nZW5l
cmF0b3JfZnVuYzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBm
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jIik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuYzogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1
bmMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibmV3X2Z1bmNfZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5l
d19hc3luY19mdW5jX2V4cCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0
aW9uX25hbWU6IHsKLSAgICAgICAgICAgIGludCBmdW5jUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgbmFtZVJlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic2V0X2Z1bmN0
aW9uX25hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShmdW5jUmVnKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuYW1lUmVnKS5kYXRhKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAg
ICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2Fj
aGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7Ci0gICAgICAgICAg
ICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRhaWxfY2FsbCIsIER1bXBD
YWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAg
ICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9u
dER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCB0aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBhcmd1bWVudHMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdEZy
ZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHZhckFyZ09m
ZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG9wTmFtZTsKLSAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2FsbF92
YXJhcmdzKQotICAgICAgICAgICAgICAgIG9wTmFtZSA9ICJjYWxsX3ZhcmFyZ3MiOwotICAgICAg
ICAgICAgZWxzZSBpZiAob3Bjb2RlID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICAg
ICAgICAgIG9wTmFtZSA9ICJjb25zdHJ1Y3RfdmFyYXJncyI7Ci0gICAgICAgICAgICBlbHNlIGlm
IChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1l
ID0gInRhaWxfY2FsbF92YXJhcmdzIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0g
InRhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcE5hbWUpOwotICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVkLCAlZCIsIHJlZ2lzdGVyTmFtZShy
ZXN1bHQpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
dGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RG
cmVlUmVnaXN0ZXIsIHZhckFyZ09mZnNldCk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxp
bmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfcmV0OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVy
T3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJldCIsIHIwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAg
ICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1
bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInN0cmNhdCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY291bnQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b19wcmltaXRpdmUiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkp
OwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVw
IiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7Ci0gICAgICAg
ICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRv
ciA9IGl0WzRdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1l
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOwotICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3By
b3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcHJvcGVy
dHlOYW1lID0gaXRbM10udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmlj
X3Byb3BlcnR5KSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgaW5kZXggPSBpdFs0XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9
IGl0WzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0
WzZdLnUucHJvZmlsZTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX2dldF9kaXJlY3RfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9y
KS5kYXRhKCksIHByb2ZpbGUpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9n
ZXRfZGlyZWN0X3BuYW1lKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAgIGlu
dCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShi
YXNlKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcHJv
cGVydHlfZW51bWVyYXRvcikgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0g
aXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAib3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShl
bnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpIC0g
MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgo
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogewotICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0
cmluZykgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9wdXNoX3dpdGhfc2NvcGU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBuZXdTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IGN1cnJlbnRTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRo
X3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJO
YW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUobmV3U2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGN1cnJlbnRTY29wZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZTogewotICAgICAgICAgICAgaW50IGRz
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHBhcmVudFNjb3BlID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJnZXRfcGFyZW50X3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwYXJl
bnRTY29wZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKLSAgICAgICAgICAgIGludCBk
c3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgaW5pdGlhbFZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJj
cmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcywgJXMiLCAKLSAgICAgICAgICAgICAgICByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3ltYm9sVGFibGUpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGluaXRpYWxWYWx1ZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJjYXRjaCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3ciLCBy
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjogewotICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBFcnJvclR5cGUgazEgPSBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KCgrK2l0
KS0+dS51bnNpZ25lZFZhbHVlKTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRocm93X3N0YXRpY19lcnJvciIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICIsIGNvbnN0YW50TmFtZShrMCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IG91dC5wcmludChrMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2RlYnVnOiB7Ci0gICAgICAgICAgICBpbnQgZGVidWdIb29rVHlwZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGhhc0JyZWFrcG9pbnRGbGFnID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJkZWJ1ZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgZGVi
dWdIb29rTmFtZShkZWJ1Z0hvb2tUeXBlKSwgaGFzQnJlYWtwb2ludEZsYWcpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hc3NlcnQ6IHsKLSAgICAgICAg
ICAgIGludCBjb25kaXRpb24gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBs
aW5lID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJhc3NlcnQiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlZCIsIHJlZ2lzdGVyTmFtZShjb25kaXRpb24pLmRhdGEoKSwgbGluZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VuZDogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbmQiLCBy
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IHNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPigoKytpdCktPnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpbnQgZGVwdGggPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHZvaWQq
IHBvaW50ZXIgPSAoKytpdCktPnUucG9pbnRlcjsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJlc29sdmVfc2NvcGUiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsIDwlcz4sICVkLCAlcCIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKS5kYXRhKCksIHJlc29sdmVUeXBlTmFtZShyZXNvbHZlVHlwZSksIGRlcHRoLCBw
b2ludGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fc2NvcGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1
dEluZm8gPSBHZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKLSAgICAgICAgICAgICsraXQ7
IC8vIFN0cnVjdHVyZQotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFu
ZDsgLy8gT3BlcmFuZAotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiZ2V0X2Zyb21fc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludChy
ZWdpc3Rlck5hbWUocjApLCAiLCAiLCByZWdpc3Rlck5hbWUocjEpKTsKLSAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgYW5vbnltb3VzIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkpOwotICAg
ICAgICAgICAgb3V0LnByaW50KCIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29s
dmVNb2RlTmFtZShnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFt
ZShnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUo
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSksICI+LCAiLCBvcGVyYW5kKTsKLSAgICAg
ICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Nj
b3BlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0
UHV0SW5mbygoKytpdCktPnUub3BlcmFuZCk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1
cmUKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJh
bmQKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInB1dF90b19zY29wZSIpOwotICAgICAgICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShy
MCkpOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRf
TUFYKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRl
bnRpZmllcihpZDApKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgcmVnaXN0ZXJOYW1l
KHIxKSwgIiwgIiwgZ2V0UHV0SW5mby5vcGVyYW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdl
dFB1dEluZm8ucmVzb2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSksICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSwgIj4sIDxzdHJ1Y3R1cmU+LCAiLCBvcGVyYW5kKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2Zyb21fYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCBvZmZzZXQpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5n
KG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
cHV0X3RvX2FyZ3VtZW50cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBvZmZzZXQsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGR1bXBS
YXJlQ2FzZVByb2ZpbGUob3V0LCAicmFyZSBjYXNlOiAiLCByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChsb2NhdGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIHsKLSAgICAg
ICAgZHVtcEFyaXRoUHJvZmlsZShvdXQsIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxv
Y2F0aW9uKSwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIFZlY3RvcjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGV4
aXRQcm9maWxlKCkuZXhpdFNpdGVzRm9yKGxvY2F0aW9uKTsKLSAgICBpZiAoIWV4aXRTaXRlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwot
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGl0U2l0ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
IGV4aXRTaXRlc1tpXS5raW5kKCksICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7Ci0gICAg
fQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsK
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICBvdXQucHJpbnQoIlxuIik7Ci19Ci0KLXZv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCi0gICAgUHJpbnRTdHJlYW0mIG91dCwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsCi0gICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29u
c3QgQ2FsbExpbmtJbmZvTWFwJiBjYWxsTGlua0luZm9zKQotewotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgIGR1bXBC
eXRlY29kZShvdXQsIGV4ZWMsIGluc3RydWN0aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3Ms
IGNhbGxMaW5rSW5mb3MpOwotfQotCi0jZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFj
cm8pIFwKLSAgICBtYWNybyhpbnN0cnVjdGlvbnMpIFwKLSAgICBtYWNybyhjYWxsTGlua0luZm9z
KSBcCi0gICAgbWFjcm8obGlua2VkQ2FsbGVyTGlzdCkgXAotICAgIG1hY3JvKGlkZW50aWZpZXJz
KSBcCi0gICAgbWFjcm8oZnVuY3Rpb25FeHByZXNzaW9ucykgXAotICAgIG1hY3JvKGNvbnN0YW50
UmVnaXN0ZXJzKQotCi0jZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKG1h
Y3JvKSBcCi0gICAgbWFjcm8ocmVnZXhwcykgXAotICAgIG1hY3JvKGZ1bmN0aW9ucykgXAotICAg
IG1hY3JvKGV4Y2VwdGlvbkhhbmRsZXJzKSBcCi0gICAgbWFjcm8oc3dpdGNoSnVtcFRhYmxlcykg
XAotICAgIG1hY3JvKHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKLSAgICBtYWNybyhldmFsQ29k
ZUNhY2hlKSBcCi0gICAgbWFjcm8oZXhwcmVzc2lvbkluZm8pIFwKLSAgICBtYWNybyhsaW5lSW5m
bykgXAotICAgIG1hY3JvKGNhbGxSZXR1cm5JbmRleFZlY3RvcikKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXN0YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3Ip
Ci17Ci0gICAgcmV0dXJuIHZlY3Rvci5jYXBhY2l0eSgpICogc2l6ZW9mKFQpOwotfQotCi1uYW1l
c3BhY2UgewotCi1jbGFzcyBQdXRUb1Njb3BlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWls
IHsKLXB1YmxpYzoKLSAgICBQdXRUb1Njb3BlRmlyZURldGFpbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQotICAgICAgICAsIG1faWRlbnQoaWRlbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IG91dC5wcmludCgiTGlua2luZyBwdXRfdG9fc2NvcGUgaW4gIiwgRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcChqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKSksICIgZm9yICIsIG1faWRlbnQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50Owot
fTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQotICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIu
bV9udW1DYWxsZWVMb2NhbHMpCi0gICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQotICAg
ICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSklUKQotICAgICwg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKLSNlbmRp
ZgotICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2RpZEZhaWxG
VExDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxz
ZSkKLSAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBt
X2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKLSAgICAsIG1fY29kZVR5cGUob3Ro
ZXIubV9jb2RlVHlwZSkKLSAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBv
dGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKLSAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQo
ZmFsc2UpCi0gICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKLSAgICAs
IG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3Zt
LCB0aGlzLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKLSAgICAsIG1fdm0ob3RoZXIu
bV92bSkKLSAgICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQotICAgICwg
bV90aGlzUmVnaXN0ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCi0gICAgLCBtX3Njb3BlUmVnaXN0
ZXIob3RoZXIubV9zY29wZVJlZ2lzdGVyKQotICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKLSAg
ICAsIG1fc291cmNlKG90aGVyLm1fc291cmNlKQotICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIu
bV9zb3VyY2VPZmZzZXQpCi0gICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2Zp
cnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9j
b25zdGFudFJlZ2lzdGVycykKLSAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKG90aGVyLm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQotICAgICwgbV9m
dW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKLSAgICAsIG1fZnVuY3Rpb25FeHBy
cyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCi0gICAgLCBtX29zckV4aXRDb3VudGVyKDApCi0gICAg
LCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQotICAgICwgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcigwKQotICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9j
bG9jazo6bm93KCkpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFs
c2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotCi0gICAgQVNTRVJUKGhlYXAoKS0+aXNE
ZWZlcnJlZCgpKTsKLSAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7Ci0KLSAg
ICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJs
b2NrJiBvdGhlcikKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0KLSAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKLQotICAgIGlmIChvdGhl
ci5tX3JhcmVEYXRhKSB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5t
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOwotICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAg
ICB9Ci0gICAgCi0gICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLQotQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssCi0gICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCkKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFs
T2JqZWN0KHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9i
amVjdCgpKQotICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVt
Q2FsbGVlTG9jYWxzKQotICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCi0gICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQotI2VuZGlmCi0gICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQotICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMKGZhbHNlKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkpCi0gICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpCi0gICAgLCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpKQotICAgICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVu
bGlua2VkQ29kZUJsb2NrKQotICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKLSAg
ICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQotICAgICwgbV9udW1CcmVh
a3BvaW50cygwKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCks
IHRoaXMsIG93bmVyRXhlY3V0YWJsZSkKLSAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZt
KCkpCi0gICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVy
KCkpCi0gICAgLCBtX3Njb3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKLSAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQotICAgICwgbV9zb3VyY2VPZmZz
ZXQoc291cmNlT2Zmc2V0KQotICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KQotICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQotICAgICwgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoMCkKLSAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
MCkKLSAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygp
KQotewotICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKLQotICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7
Ci0gICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwotCi0gICAgQVNTRVJUKG1f
c291cmNlKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKLSAgICBKU1Njb3BlKiBzY29wZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7Ci0KLSAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZs
b3dQcm9maWxlcigpKQotICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVt
b3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotCi0gICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSk7Ci0gICAgaWYgKHVubGlua2VkQ29kZUJs
b2NrLT51c2VzR2xvYmFsT2JqZWN0KCkpCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5s
aW5rZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCld
LnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgIExp
bmtUaW1lQ29uc3RhbnQgdHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOwot
ICAgICAgICBpZiAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5y
ZWdpc3RlckluZGV4Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSkKLSAgICAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9i
amVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7Ci0gICAgfQotCi0gICAgLy8g
V2UgYWxyZWFkeSBoYXZlIHRoZSBjbG9uZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVu
dmlyb25tZW50IHNpbmNlIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUKLSAgICAvLyB0aGUgbW9kdWxl
IGVudmlyb25tZW50cyBiZWZvcmUgbGlua2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0
aGUgc3RvcmVkIHN5bWJvbCB0YWJsZSB3aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCi0gICAg
aWYgKFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
Pih1bmxpbmtlZENvZGVCbG9jaykpIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJv
bFRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KS0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSgpOwotICAgICAgICBpZiAobV92bS0+dHlw
ZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNs
b25lZFN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUt
PnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVw
bGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFi
bGUpOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlID0gdm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpOwotICAg
IG1fZnVuY3Rpb25EZWNscyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPj4odW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsK
LSAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0
aW9uRGVjbHMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGkpOwotICAgICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlKQotICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmlu
c2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2Vk
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ld
LnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4
ZWN1dGFibGUtPnNvdXJjZSgpKSk7Ci0gICAgfQotCi0gICAgbV9mdW5jdGlvbkV4cHJzID0gUmVm
Q291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwotICAgIGZvciAoc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlu
a2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7Ci0gICAg
ICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCi0gICAgICAgICAg
ICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93
bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxp
bmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsK
LSAgICB9Ci0KLSAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKLSAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoc2l6ZV90IGNv
dW50ID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyQ291bnQoKSkgewotICAgICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuZ3Jvdyhjb3VudCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZENvZGVCbG9jazo6Q29uc3RhbnRCdWZmZXImIGJ1ZmZlciA9IHVubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihpKTsKLSAgICAgICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX2NvbnN0YW50QnVmZmVyc1tpXSA9IGJ1ZmZlcjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhMTEludDo6Z2V0Q29kZVB0cihvcF9jYXRjaCkpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIpOwotI2VuZGlmCi0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgICAgICBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIHB0
ciA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFi
bGUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9y
ICg7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE9mZnNldExvY2F0
aW9uIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9IHB0
ci0+dmFsdWUuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZz
ZXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hK
dW1wVGFibGVzKCkpIHsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
cy5ncm93KGNvdW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VU
YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7Ci0gICAgICAgICAg
ICAgICAgU2ltcGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbaV07Ci0gICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBz
b3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzOwotICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4g
PSBzb3VyY2VUYWJsZS5taW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBBbGxvY2F0ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKLSAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5m
b3MoKSkKLSAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MgPSBSZWZDb3VudGVkQXJyYXk8TExJ
bnRDYWxsTGlua0luZm8+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZkFycmF5UHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheVByb2ZpbGVz
Lmdyb3coc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPihzaXpl
KTsKLSAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkpCi0gICAgICAgIG1fdmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxW
YWx1ZVByb2ZpbGU+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpKQotICAgICAgICBtX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZT4oc2l6ZSk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHNldENhbGxlZVNhdmVSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotI2Vu
ZGlmCi0KLSAgICAvLyBDb3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5zdHJ1Y3Rpb25z
Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5jb3VudCgpOwotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW06OlJlYWRl
ciBpbnN0cnVjdGlvblJlYWRlcih1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwot
Ci0gICAgLy8gQm9va2tlZXAgdGhlIHN0cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25t
ZW50cy4KLSAgICBIYXNoU2V0PEpTTW9kdWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5j
ZWRNb2R1bGVFbnZpcm9ubWVudHM7Ci0KLSAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
IGluc3RydWN0aW9ucyhpbnN0cnVjdGlvbkNvdW50KTsKLQotICAgIHVuc2lnbmVkIHZhbHVlUHJv
ZmlsZUNvdW50ID0gMDsKLSAgICBhdXRvIGxpbmtWYWx1ZVByb2ZpbGUgPSBbJl0odW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIG9wTGVuZ3RoKSB7Ci0gICAgICAgIHVuc2lnbmVkIHZh
bHVlUHJvZmlsZUluZGV4ID0gdmFsdWVQcm9maWxlQ291bnQrKzsKLSAgICAgICAgVmFsdWVQcm9m
aWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1t2YWx1ZVByb2ZpbGVJbmRleF07Ci0gICAg
ICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcHJv
ZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBpbnN0cnVj
dGlvbnNbYnl0ZWNvZGVPZmZzZXQgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKLSAgICB9Owot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWluc3RydWN0aW9uUmVhZGVyLmF0RW5kKCk7ICkg
ewotICAgICAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9IGluc3RydWN0aW9uUmVh
ZGVyLm5leHQoKTsKLQotICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChw
Y1swXS51Lm9wY29kZSk7Ci0KLSAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gdm0uaW50ZXJwcmV0
ZXItPmdldE9wY29kZShwY1swXS51Lm9wY29kZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAx
OyBqIDwgb3BMZW5ndGg7ICsraikgewotICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAh
PSBzaXplb2YoaW50cHRyX3QpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0u
dS5wb2ludGVyID0gMDsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5k
ID0gcGNbal0udS5vcGVyYW5kOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAocGNbMF0udS5v
cGNvZGUpIHsKLSAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAg
ICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQ
cm9maWxlKGkpOwotCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czoKLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKLSAgICAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXgg
PSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxl
c1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0KLSAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9m
aWxlSW5kZXhdOwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgotICAgICAgICBjYXNlIG9wX3RyeV9n
ZXRfYnlfaWQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOgotICAgICAgICBjYXNlIG9wX3RvX251bWJlcjog
ewotICAgICAgICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAg
ICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5k
OwotICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5
UHJvZmlsZShpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9
ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogewotICAgICAg
ICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQ
cm9maWxlKGkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0g
Jm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OgotICAgICAgICBjYXNlIG9w
X25ld19hcnJheV9idWZmZXI6Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTog
ewotICAgICAgICAgICAgaW50IGFycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVu
Z3RoIC0gMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0
aCAtIDFdID0gJm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXNbYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZUluZGV4XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
bmV3X29iamVjdDogewotICAgICAgICAgICAgaW50IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5k
ZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9ICZtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlc1tvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGlu
dCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7Ci0K
LSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOwotICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRp
YWxpemUodm0sCi0gICAgICAgICAgICAgICAgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbDoKLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIGxpbmtWYWx1
ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOwotICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4
ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmls
ZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2Zp
bGVJbmRleF07Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxs
TGlua0luZm9zW3BjWzVdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOwotICAgICAg
ICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgICAgICAg
ICBDUkFTSCgpOwotCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+
KHBjWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IExv
Y2FsQ2xvc3VyZVZhcik7Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0u
dS5vcGVyYW5kOwotCi0gICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFj
dFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBz
Y29wZSwgaWRlbnQsIEdldCwgdHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXph
dGlvbik7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5
cGU7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRo
OwotICAgICAgICAgICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkgewotICAgICAgICAgICAg
ICAgIGlmIChvcC50eXBlID09IE1vZHVsZVZhcikgewotICAgICAgICAgICAgICAgICAgICAvLyBL
ZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVu
dHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50
KSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxl
eGljYWxFbnZpcm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
Nl0udS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUuc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJv
bFRhYmxlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkKLSAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywg
Y29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7Ci0gICAgICAgICAg
ICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8gZ2V0X2Zy
b21fc2NvcGUgZHN0LCBzY29wZSwgaWQsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAot
Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOwotCi0gICAg
ICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIDRdID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIs
IGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdl
dFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkub3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFy
KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0
SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgIGlmIChvcC50eXBlID09
IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
fHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OwotICAgICAgICAgICAg
ZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihv
cC5vcGVyYW5kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwg
aWQsIHZhbHVlLCBHZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7
Ci0gICAgICAgICAgICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2Un
cmUgcHV0dGluZyB0byBpcyBub3QgYW5vbnltb3VzLgotICAgICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzVdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJv
bFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRh
YmxlLT5maW5kKGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50
U2V0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpbnQgbG9j
YWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0g
SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxv
Y2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7Ci0KLSAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVN
b2RlKCksIG9wLnR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQo
KTsKLSAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBv
cC53YXRjaHBvaW50U2V0OwotICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJl
VmFyIHx8IG9wLnR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAg
ICAgICAgICAgICAgICBpZiAob3Aud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgICAgICAgICAg
b3Aud2F0Y2hwb2ludFNldC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhp
cywgaWRlbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBv
cC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKLQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTogewotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwotICAgICAgICAgICAgLy8g
VGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxlX3R5cGUgcmVnVG9Q
cm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/Ci0g
ICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwot
ICAgICAgICAgICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Ci0gICAgICAgICAgICBH
bG9iYWxWYXJpYWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQgPSAwOwotICAgICAgICAgICAgUmVmUHRy
PFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7Ci0gICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUg
PSBtX3VubGlua2VkQ29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9m
ZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgUHJvZmlsZVR5cGVCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2Zp
bGVUeXBlQnl0ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgc3dpdGNoIChmbGFn
KSB7Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVDbG9zdXJlVmFyOiB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nh
c3Q8UmVzb2x2ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgLy8gRXZl
biB0aG91Z2ggdHlwZSBwcm9maWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3Ig
YSBQdXQsIHdlIGNhbiBhbHdheXMgY2xhaW0gYSBHZXQgYmVjYXVzZQotICAgICAgICAgICAgICAg
IC8vIHdlJ3JlIGFic3RyYWN0bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgotICAgICAgICAg
ICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0
eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIp
Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gb3AubGV4aWNhbEVudmlyb25tZW50
LT5zeW1ib2xUYWJsZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xv
YmFsVmFyKQotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0
LmdldCgpLT5zeW1ib2xUYWJsZSgpOwotCi0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGltcGwgPSAob3AudHlwZSA9PSBNb2R1bGVWYXIpID8gb3AuaW1wb3J0ZWROYW1lLmdldCgp
IDogaWRlbnQuaW1wbCgpOwotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAg
ICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMg
Y3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHBy
ZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tl
ciwgaW1wbCwgdm0pOwotICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9s
VGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2Fs
bHlSZXNvbHZlZDogewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNb
Ml0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNj
b3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90
IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCi0gICAgICAgICAgICAgICAgZ2xvYmFs
VmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRl
bnQuaW1wbCgpLCB2bSk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRh
YmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsK
LQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fz
ZSBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRDogCi0gICAgICAgICAgICBj
YXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG93bmVyRXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSk7
Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUpLT5yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7Ci0gICAgICAg
ICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudDsK
LSAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEFuYWx5emUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQmVjYXVzZSBhIHJldHVybiBzdGF0ZW1lbnQgY2FuIGJlIGFkZGVkIGltcGxpY2l0bHkg
dG8gcmV0dXJuIHVuZGVmaW5lZCBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGFuZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2Vz
IGJlY2F1c2UgdGhleSBhcmVuJ3QgaW4gdGhlIGFjdHVhbCBzb3VyY2UgdGV4dCBvZgotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdXNlcidzIHByb2dyYW0sIGdpdmUgdGhlIHR5cGUgcHJvZmls
ZXIgc29tZSByYW5nZSB0byBpZGVudGlmeSB0aGVzZSByZXR1cm4gc3RhdGVtZW50cy4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgdGV4dCBvZmZzZXQgdGhhdCBpcyB1c2Vk
IGFzIGlkZW50aWZpY2F0aW9uIGlzICJmIiBpbiB0aGUgZnVuY3Rpb24ga2V5d29yZAotICAgICAg
ICAgICAgICAgICAgICAvLyBhbmQgaXMgc3RvcmVkIG9uIFR5cGVMb2NhdGlvbidzIG1fZGl2b3RG
b3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50IG1lbWJlciB2YXJpYWJsZS4KLSAgICAg
ICAgICAgICAgICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5h
bHl6ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlw
ZUxvY2F0aW9uKiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVM
b2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAg
ICAgICAgICAgIG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RF
bmQsIGdsb2JhbFR5cGVTZXQsICZ2bSk7Ci0gICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gbG9jYXRpb25QYWlyLmZpcnN0OwotICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9u
ID0gbG9jYXRpb25QYWlyLnNlY29uZDsKLQotICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmls
ZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVy
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGlm
IChzaG91bGRBbmFseXplICYmIGlzTmV3TG9jYXRpb24pCi0gICAgICAgICAgICAgICAgdm0udHlw
ZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKLQotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAg
IGlmIChwY1sxXS51LmluZGV4ID09IERpZFJlYWNoQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAg
ICBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogewotICAgICAgICAgICAgaW50
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPT0gbnVtUGFyYW1ldGVycygpIC0gMSwgIldlIGFz
c3VtZSB0aGF0IHRoaXMgaXMgdHJ1ZSB3aGVuIHJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdCBwYXJh
bWV0ZXIgZHVyaW5nIE9TUiBleGl0IGluIHRoZSBGVEwgSklULiIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaSArPSBvcExlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAodm0uY29u
dHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0Zv
ckNvbnRyb2xGbG93UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsKLQotICAgIG1faW5zdHJ1Y3Rpb25z
ID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOwotCi0gICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJl
c2hvbGRzIG9ubHkgYWZ0ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRo
ZXNlCi0gICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhl
b3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb24gc3Ry
ZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgotICAgIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCi0gICAgLy8gSWYg
dGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRo
ZW4gY29tcHV0ZSBpdCBoZXJlCi0gICAgLy8gc3luY2hyb25vdXNseS4KLSAgICBpZiAoT3B0aW9u
czo6YWx3YXlzQ29tcHV0ZUhhc2goKSkKLSAgICAgICAgaGFzaCgpOwotCi0gICAgaWYgKE9wdGlv
bnM6OmR1bXBHZW5lcmF0ZWRCeXRlY29kZXMoKSkKLSAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Ci0g
ICAgCi0gICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLSAgICBoZWFwKCktPnJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJ
bnN0cnVjdGlvbikpOwotfQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAg
OiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPnZtKCksIHRoaXMsIGdsb2JhbE9iamVjdCkKLSAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDAp
Ci0gICAgLCBtX251bVZhcnMoMCkKLSAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNl
KQotI2lmIEVOQUJMRShKSVQpCi0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fu
bm90Q29tcGlsZSkKLSNlbmRpZgotICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1faGFzQmVlbkNv
bXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKLSAgICAs
IG1faXNTdHJpY3RNb2RlKGZhbHNlKQotICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCi0g
ICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9zdGVwcGluZ01vZGUo
U3RlcHBpbmdNb2RlRGlzYWJsZWQpCi0gICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBt
X293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRh
YmxlKQotICAgICwgbV92bSh2bSkKLSAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKLSAgICAsIG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCi0gICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyKDApCi0gICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojpub3coKSkKLXsKLSAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwotfQotCi12b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCopCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0g
ICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLSNlbmRpZgotCi1Db2RlQmxv
Y2s6On5Db2RlQmxvY2soKQotewotICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24o
dGhpcyk7Ci0KLSAgICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBN
aXhlZFRyaVN0YXRlKQotICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6
ZShGYWxzZVRyaVN0YXRlKTsKLQotI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0g
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKLSNlbmRpZgotCi0gICAgLy8gV2UgbWF5IGJlIGRlc3Ry
b3llZCBiZWZvcmUgYW55IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUgZGVzdHJveWVk
LgotICAgIC8vIENvbnNpZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVucmVhY2hhYmxl
IGF0IHRoZSBzYW1lIHRpbWUuIFRoZXJlCi0gICAgLy8gaXMgbm8gZ3VhcmFudGVlIGFib3V0IHRo
ZSBvcmRlciBpbiB3aGljaCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgotICAgIC8vIFNv
LCBpZiB3ZSBkb24ndCByZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVzdHJveWVkIGJl
Zm9yZSB0aGUKLSAgICAvLyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGludG8gdXMsIHRo
ZW4gdGhlIENhbGxMaW5rSW5mbyB2ZWN0b3IncwotICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkg
dG8gcmVtb3ZlIG5vZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0Lgot
ICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgb3VyIG91
dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCi0gICAg
Ly8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2Yg
dGhlIH5DYWxsTGlua0luZm8KLSAgICAvLyBkZXN0cnVjdG9ycy4KLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHVi
SW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWIgPSAqaXRlcjsKLSAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOwotICAgICAgICBz
dHViLT5kZXJlZigpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENv
ZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKLXsKLSAgICBBU1NFUlQoY29u
c3RhbnRzLnNpemUoKSA9PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6ZSgp
KTsKLSAgICBzaXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwotICAgIG1fY29uc3RhbnRS
ZWdpc3RlcnMucmVzaXplVG9GaXQoY291bnQpOwotICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVyID0g
ISFtX3ZtLT50eXBlUHJvZmlsZXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsK
LQotICAgICAgICBpZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPihjb25z
dGFudCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9m
aWxpbmcobG9ja2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTeW1i
b2xUYWJsZSogY2xvbmUgPSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOwotICAg
ICAgICAgICAgICAgIGlmICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKLQotICAg
ICAgICAgICAgICAgIGNvbnN0YW50ID0gY2xvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3Rh
bnQpOwotICAgIH0KLQotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0g
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotfQotCi12b2lkIENvZGVCbG9jazo6
c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQotewotICAgIG1f
YWx0ZXJuYXRpdmUuc2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkKLXsKLSAgICBtX251bVBhcmFtZXRl
cnMgPSBuZXdWYWx1ZTsKLQotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRl
ZEFycmF5PFZhbHVlUHJvZmlsZT4obmV3VmFsdWUpOwotfQotCi12b2lkIEV2YWxDb2RlQ2FjaGU6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEV2YWxDYWNoZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKLSAgICBmb3IgKEV2YWxDYWNoZU1h
cDo6aXRlcmF0b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOwotfQotCi1Db2RlQmxvY2sqIENv
ZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKQotewotI2lmIEVOQUJMRShGVExf
SklUKQotICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAg
IHJldHVybiBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCk7Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJ
VCkKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGJvb2wg
c2V0QnlNZSA9ICFtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJv
bmcoZmFsc2UsIHRydWUpOwotICAgIGlmICghc2V0QnlNZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoc2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRp
b25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQgamV0dGlz
b25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBv
ZiB0aG9zZSB0aGluZ3MKLSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3
ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAgLy8gZmln
dXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRV
bmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotCi0gICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgd2UgamV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFs
dGVybmF0aXZlLCBzbyBtYWtlIHN1cmUgdGhhdCBpdAotICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4g
aWYgd2UgZG9uJ3QuCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwotICAgIAot
ICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhh
cnZlc3RlcnMgZm9yOiBERkcgZml4cG9pbnQgZm9yCi0gICAgLy8gamV0dGlzb25pbmcsIGFuZCB0
cnlpbmcgdG8gZmluZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21l
Ci0gICAgLy8gaW5saW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVt
IHJlZ2FyZGxlc3MuCi0gICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gV2Ug
Z2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0
YWJsZSBpcyBsaXZlLAotICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4g
YW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCi0gICAgLy8gY29kZSBi
bG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZl
cmVuY2VzIGJlaW5nCi0gICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3
ZSdyZSBzdGlsbCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAotICAgIC8vIHBlcmZvcm0g
b25lIHJvdW5kIG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJt
aW5lLCBiYXNlZCBvbgotICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0
cywgb3IgYnkgb3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCi0gICAgLy8gb3RoZXIgcmVh
c29ucywgdGhhdCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlm
eSB1cyBvZiB0aGlzCi0gICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVy
ZW5jZXMoKS4KLQotICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwot
ICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotCi0gICAgbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7Ci0gICAgZGV0ZXJtaW5lTGl2
ZW5lc3ModmlzaXRvcik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXNpemVfdCBD
b2RlQmxvY2s6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIENvZGVCbG9jayog
dGhpc09iamVjdCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKLSAgICBzaXplX3QgZXh0cmFN
ZW1vcnlBbGxvY2F0ZWQgPSB0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX2ppdENvZGUpCi0gICAgICAg
IGV4dHJhTWVtb3J5QWxsb2NhdGVkICs9IHRoaXNPYmplY3QtPm1faml0Q29kZS0+c2l6ZSgpOwot
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFNZW1vcnlBbGxvY2F0
ZWQ7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0
PENvZGVCbG9jayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKLSAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7Ci0gICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
Ly8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxp
emVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCi0gICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUg
cHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhp
bmdzCi0gICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBu
byBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAotICAgIC8vIGZpZ3VyZXMgb3V0IHdo
ZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKLQotICAgIGlmIChDb2RlQmxv
Y2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQotICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG90aGVyQmxvY2spOwotCi0g
ICAgaWYgKG1faml0Q29kZSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQobV9qaXRDb2RlLT5zaXplKCkpOwotICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCi0g
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNp
emUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsK
LQotICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwotICAgIHN0cm9u
Z2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKLQotICAgIG1fYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OwotfQotCi1ib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCi17Ci0gICAgaWYg
KE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3Mg
ZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KLSAgICAvLyB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKLSAgICAv
LyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4K
LSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuICFIZWFwOjppc01hcmtlZCh0aGlzKTsKLX0KLQotc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdGltZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCi17Ci0gICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnVzZUVhZ2VyQ29kZUJsb2NrSmV0dGlzb25UaW1pbmcoKSkpIHsK
LSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuazoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
KDEwKTsKLSAgICAgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwICsgMjApOwotICAgICAgICBjYXNlIEpJ
VENvZGU6OkRGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDQwKTsKLSAgICAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMjApOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rOgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOwot
ICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEw
IGFkZGl0aW9uYWwgc2Vjb25kcywgc2luY2UgQmFzZWxpbmVKSVQgYW5kCi0gICAgICAgIC8vIElu
dGVycHJldGVyVGh1bmsgc2hhcmUgYSBDb2RlQmxvY2suCi0gICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9u
bzo6c2Vjb25kcyg1ICsgMTApKTsKLSAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKLSAgICAgICAg
cmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6
Ci0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKLSAgICB9Ci19
Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKLXsKLSAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25E
dWVUb09sZEFnZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKHRpbWVT
aW5jZUNyZWF0aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQot
c3RhdGljIGJvb2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiYgdHJhbnNpdGlvbikKLXsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYg
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0KLSAgICBpZiAobV9hbGxUcmFu
c2l0aW9uc0hhdmVCZWVuTWFya2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGFsbEFy
ZU1hcmtlZFNvRmFyID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gbV92bS0+aW50ZXJwcmV0ZXI7Ci0gICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSB7Ci0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tp
XV07Ci0gICAgICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVj
dGlvblswXS51Lm9wY29kZSkpIHsKLSAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0
XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdTdHJ1Y3R1cmVJRCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQotICAgICAg
ICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0
dXJlSUQpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAg
ICAgICAgICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKTsKLSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
b2xkU3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7Ci0gICAg
ICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1Yklu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAgICAgYWxsQXJlTWFya2VkU29G
YXIgJj0gKCppdGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZm9yIChh
dXRvJiB3ZWFrUmVmZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykK
LSAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyICY9IHdlYWtSZWZlcmVuY2UtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRNYXJrVHJhbnNpdGlvbihkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldKSkgewotICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVu
IHRoZSB0YXJnZXQgb2YgdGhlCi0gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNv
IGxpdmU6Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29k
ZSBibG9jay4gV2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQotICAg
ICAgICAgICAgICAgIC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2Yg
dGhlIHRyYW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCi0gICAgICAgICAgICAg
ICAgLy8gICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0
aGUgdXNlcidzCi0gICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBm
b3IgdGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgotICAgICAgICAgICAgICAgIC8vICAg
bGl2ZS4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJj
ZSBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKLSAgICAg
ICAgICAgICAgICAvLyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNv
LCBzdG9yZXMgdGhlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3Vy
Y2UgbXVzdCBiZSBsaXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgotICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzaG9ydC1jaXJjdWl0IHRoZSBs
aXZlbmVzcyBpZiB0aGUgc3RydWN0dXJlIGlzIGhhcm1sZXNzCi0gICAgICAgICAgICAgICAgLy8g
dG8gbWFyayAoaS5lLiBpdHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFs
cmVhZHkKLSAgICAgICAgICAgICAgICAvLyBsaXZlKS4KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3Rv
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFy
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0g
ICAgCi0gICAgaWYgKGFsbEFyZU1hcmtlZFNvRmFyKQotICAgICAgICBtX2FsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQgPSB0cnVlOwotfQotCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2
ZW5lc3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3Ip
OwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55
IHJlbWFpbmluZyB3b3JrIHRvIGRvLgotICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0g
bV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICBpZiAoZGZnQ29tbW9uLT5saXZlbmVzc0hhc0Jl
ZW5Qcm92ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBOb3cgY2hlY2sgYWxsIG9m
IG91ciB3ZWFrIHJlZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdlCi0g
ICAgLy8gaGF2ZSBwcm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyByZWZl
cmVuY2VzLiBJZiBhdCBlbmQgb2YKLSAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92ZWQg
bGl2ZW5lc3MsIHRoZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgotICAgIGJvb2wgYWxsQXJl
TGl2ZVNvRmFyID0gdHJ1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Ci0g
ICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJZiBzb21l
IHdlYWsgcmVmZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3
YXMKLSAgICAvLyB1bnN1Y2Nlc3NmdWwuCi0gICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBS
ZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAotICAgIC8vIGNvbWUgYmFjayBoZXJl
IGFnYWluLCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCi0gICAgZGZnQ29tbW9uLT5s
aXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSB0cnVlOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVBvaW50ZXIodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0K
LSAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcikpOwotCi0gICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2
aXNpdG9yKTsKLSAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwotfQot
Ci12b2lkIENvZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCi17Ci0gICAgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bj
b2RlKG9wX2dldF9ieV9pZCk7Ci0gICAgaW5zdHJ1Y3Rpb25bNF0udS5wb2ludGVyID0gbnVsbHB0
cjsKLSAgICBpbnN0cnVjdGlvbls1XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgIGluc3RydWN0
aW9uWzZdLnUucG9pbnRlciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKCkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYg
KG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLQotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmlu
dGVycHJldGVyOwotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7
Ci0gICAgZm9yIChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3Ry
dWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsK
LSAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUpKSB7Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9wcm90b19sb2FkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNl
dDogewotICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVj
dGlvbls0XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8
fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3Ry
dWN0dXJlSUQpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExM
SW50IHByb3BlcnR5IGFjY2Vzcy5cbiIpOwotICAgICAgICAgICAgY2xlYXJMTEludEdldEJ5SWRD
YWNoZShjdXJJbnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewotICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3Ry
dWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAg
U3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVy
ZUlEOwotICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25b
N10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVy
ZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCkpKSAmJgotICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwg
SGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVj
dHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChj
aGFpbikpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQg
cHV0IHRyYW5zaXRpb24uXG4iKTsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3Ry
dWN0dXJlSUQgPSAwOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0g
MDsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQgPSAwOwotICAg
ICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVu
Z3RoOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICAg
ICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJr
ZWQoY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAl
cC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAg
IGN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBjdXJJ
bnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAotICAgICAgICAgICAgICAgIGN1
ckluc3RydWN0aW9uWzNdLnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewotICAgICAgICAg
ICAgYXV0byYgY2FjaGVXcml0ZUJhcnJpZXIgPSBjdXJJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsK
LSAgICAgICAgICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIgfHwgY2FjaGVXcml0ZUJhcnJpZXIu
dW52YWxpZGF0ZWRHZXQoKSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rp
b24gPSBjYWNoZVdyaXRlQmFycmllci5nZXQoKTsKLSAgICAgICAgICAgIGlmIChIZWFwOjppc01h
cmtlZChjYWNoZWRGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBMTEludCBjcmVhdGVfdGhpcyB3aXRoIGNhY2hlZCBjYWxsZWUgJXAuXG4iLCBjYWNo
ZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5jbGVhcigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
OiB7Ci0gICAgICAgICAgICAvLyBSaWdodCBub3cgdGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkuIEFueSBzeW1ib2wgdGFibGVzIHRoYXQgdGhpcyB3aWxsIHJlZmVyIHRvCi0gICAgICAgICAg
ICAvLyBhcmUgZm9yIG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0
aW9ucyBzdHJvbmdseSwgYW5kIHRoZXkgcmVmZXIKLSAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1i
b2wgdGFibGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4K
LSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSA9
IGN1ckluc3RydWN0aW9uWzZdLnUuc3ltYm9sVGFibGU7Ci0gICAgICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlIHx8IEhlYXA6OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBz
eW1ib2xUYWJsZS5nZXQoKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZToKLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8
IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIAotICAgICAgICAgICAgICAgIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1
XS51LnN0cnVjdHVyZTsKLSAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFy
a2VkKHN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICAgICAgc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUp
OwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQob3Bjb2RlSUQsIGZhbHNl
LCAiVW5oYW5kbGVkIG9wY29kZSBpbiBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
LCAlcyglZCkgYXQgYmMgJXUiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sIG9wY29kZUlELCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBX
ZSBjYW4ndCBqdXN0IHJlbW92ZSBhbGwgdGhlIHNldHMgd2hlbiB3ZSBjbGVhciB0aGUgY2FjaGVz
IHNpbmNlIHdlIG1pZ2h0IGhhdmUgY3JlYXRlZCBhIHdhdGNocG9pbnQgc2V0Ci0gICAgLy8gdGhl
biBjbGVhcmVkIHRoZSBjYWNoZSB3aXRob3V0IEdDaW5nIGluIGJldHdlZW4uCi0gICAgbV9sbGlu
dEdldEJ5SWRXYXRjaHBvaW50TWFwLnJlbW92ZUlmKFtdKGNvbnN0IFN0cnVjdHVyZVdhdGNocG9p
bnRNYXA6OktleVZhbHVlUGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4g
IUhlYXA6OmlzTWFya2VkKHBhaXIua2V5KTsKLSAgICB9KTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV9sbGludENhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQo
bV9sbGludENhbGxMaW5rSW5mb3NbaV0uY2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmlu
ZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOwotICAgICAgICAgICAgbV9sbGludENh
bGxMaW5rSW5mb3NbaV0udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEhbV9sbGlu
dENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxp
bnRDYWxsTGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKLSAgICAgICAgICAgIG1f
bGxpbnRDYWxsTGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCi17Ci0j
aWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKGF1dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp2bSgpKTsKLQot
ICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1Yklu
Zm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbyA9ICoqaXRlcjsKLSAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNl
cyh0aGlzKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9u
YWxGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRp
b25hbEZpbmFsaXplcikpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNvZGVCbG9j
ay0+c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgewotICAgICAgICBjb2RlQmxv
Y2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKLSAgICAgICAgY29kZUJs
b2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVC
bG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29k
ZSgpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMo
KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpCi17Ci0jaWYgRU5BQkxFKEpJ
VCkKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdG9IYXNoTWFw
KG1fc3R1YkluZm9zLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpnZXRTdHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCBy
ZXN1bHQpOwotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKLXsKLSNpZiBFTkFC
TEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQotICAgICAgICB0b0hh
c2hNYXAobV9jYWxsTGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSNlbmRpZgotfQotCi12b2lkIENv
ZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQotewot
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZ2V0Q2FsbExpbmtJ
bmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5m
b01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpCi17
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewot
ICAgICAgICBmb3IgKGF1dG8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKLSAgICAgICAgICAg
IHJlc3VsdC5hZGQoQ29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBieVZhbElu
Zm8pOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkK
LXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGdldEJ5VmFs
SW5mb01hcChsb2NrZXIsIHJlc3VsdCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJl
U3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQot
ewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIG1f
c3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlKTsKLX0KLQotSklUQWRkSUMqIENvZGVCbG9jazo6YWRk
SklUQWRkSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fYWRk
SUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRN
dWxJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1cm4gbV9tdWxJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklD
KEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIHJldHVybiBtX3N1YklDcy5hZGQo
YXJpdGhQcm9maWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0
aFByb2ZpbGUpOwotfQotCi1TdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1Yklu
Zm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvIDogbV9zdHViSW5mb3MpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3Jp
Z2luID09IGNvZGVPcmlnaW4pCi0gICAgICAgICAgICByZXR1cm4gc3R1YkluZm87Ci0gICAgfQot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1CeVZhbEluZm8qIENvZGVCbG9jazo6YWRkQnlWYWxJ
bmZvKCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJl
dHVybiBtX2J5VmFsSW5mb3MuYWRkKCk7Ci19Ci0KLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjph
ZGRDYWxsTGlua0luZm8oKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5hZGQoKTsKLX0KLQotQ2FsbExpbmtJbmZv
KiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4oKSA9PSBDb2Rl
T3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiAqaXRlcjsKLSAgICB9Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQotewotICAg
IFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKTsKLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0
aGVzZSBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkg
c3R1YiBpbmZvcywgY2FsbAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3
ZSBkb24ndCBoYXZlIEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAg
Ly8gc3RydWN0dXJlcyB1c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldFN0dWJJbmZvTWFwIGFu
ZCBmcmllbmRzKSB3aWxsIHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBK
SVQgY29kZS4KLSAgICBtX3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5j
bGVhcigpOwotICAgIG1fYnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBj
bGVhciB0aGlzIGJlY2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1
cmVzIGFyZSBndWFyZGVkIGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAg
ICBtX3JhcmVDYXNlUHJvZmlsZXMuY2xlYXIoKTsKLX0KLSNlbmRpZgotCi12b2lkIENvZGVCbG9j
azo6dmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICAvLyBX
ZSBzdHJvbmdseSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gZGVhbCB3aXRoCi0gICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0
IHRhcmdldCBDb2RlQmxvY2sgb24gZGVtYW5kIGFuZAotICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0
IGl0IG1hdGNoZXMgdGhlIGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAotICAg
IC8vIHRoZSBPU1IgZXhpdCBhZ2FpbnN0LgotCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJu
YXRpdmUpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgIGlmIChkZmdDb21tb24tPmlubGlu
ZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZn
Q29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
aW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9i
amVjdCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKLSAgICB2aXNp
dG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOwotICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAg
ICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVu
Y3Rpb25FeHBycy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rp
b25FeHByc1tpXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0p
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoQnlWYWxJ
bmZvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZi
eVZhbEluZm8tPmNhY2hlZFN5bWJvbCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdmlz
aXRPU1JFeGl0VGFyZ2V0cyh2aXNpdG9yKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlQWxsUHJlZGlj
dGlvbnMoKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0K
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKCEhZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCi0gICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4p
OyAvLyBBbG1vc3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdp
biBzaG91bGQgYWxzbyBiZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhv
dWdoLgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5t
X2Zyb20pOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tp
XS5tX3RvKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNl
c1tpXSk7Ci0KLSAgICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0j
ZW5kaWYgICAgCi19Ci0KLUNvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZl
KCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsKLSAg
ICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQt
PmFsdGVybmF0aXZlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmppdFR5cGUoKSkgfHwgcmVz
dWx0LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNl
bHNlCi0gICAgcmV0dXJuIHRoaXM7Ci0jZW5kaWYKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6
OmJhc2VsaW5lVmVyc2lvbigpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgQ29k
ZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAg
ICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgb3JpZ2luYWwgQ29k
ZUJsb2NrIGZvciBhbiBleGVjdXRhYmxlLgotICAgICAgICAvLyBBc3N1bWUgdGhhdCB3ZSdyZSB0
aGUgYmFzZWxpbmUgQ29kZUJsb2NrLgotICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICByZXN1
bHQgPSByZXN1bHQtPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
I2Vsc2UKLSAgICByZXR1cm4gdGhpczsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEpJVCkKLWJv
b2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5
cGVUb1JlcGxhY2UpCi17Ci0gICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNl
bWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwotfQotCi1ib29sIENvZGVCbG9jazo6
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudChqaXRUeXBlKCkpOwotfQotI2VuZGlmCi0KLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6
OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWly
ZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29k
ZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJ
bmRleChieXRlY29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKLX0KLQotSGFuZGxlckluZm8q
IENvZGVCbG9jazo6aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRs
ZXIgcmVxdWlyZWRIYW5kbGVyKQotewotICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Ci19Ci0KLUNh
bGxTaXRlSW5kZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKQotewotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsK
LSAgICBBU1NFUlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsK
LSAgICBDb2RlT3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxT
aXRlKTsKLSAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChvcmlnaW5hbE9yaWdpbik7Ci0jZWxzZQotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBu
ZXcgb24tdGhlLWZseSBleGNlcHRpb24gaGFuZGxpbmcKLSAgICAvLyBjYWxsIHNpdGVzIG91dHNp
ZGUgdGhlIERGRy9GVEwgaW5saW5lIGNhY2hlcy4KLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luYWxD
YWxsU2l0ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleCgwdSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnJlbW92ZUV4
Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgVmVjdG9yPEhhbmRsZXJJbmZv
PiYgZXhjZXB0aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwot
ICAgIHVuc2lnbmVkIGluZGV4ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBleGNlcHRpb25IYW5kbGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBI
YW5kbGVySW5mbyYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICBpZiAo
aGFuZGxlci5zdGFydCA8PSBpbmRleCAmJiBoYW5kbGVyLmVuZCA+IGluZGV4KSB7Ci0gICAgICAg
ICAgICBleGNlcHRpb25IYW5kbGVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci11bnNpZ25lZCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5maXJzdExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIGlu
dCBkaXZvdDsKLSAgICBpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNldDsKLSAgICB1
bnNpZ25lZCBsaW5lOwotICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5z
aWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Ci17Ci0gICAgbV91bmxpbmtlZENv
ZGUtPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZv
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKLSAgICBkaXZvdCArPSBt
X3NvdXJjZU9mZnNldDsKLSAgICBjb2x1bW4gKz0gbGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQoKTsKLSAgICBsaW5lICs9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUo
KTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2ln
bmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKLXsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIgPSB2bSgpLT5pbnRlcnByZXRlcjsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0
cnVjdGlvbnMoKS5lbmQoKTsKLSAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2lu
OyBpdCAhPSBlbmQ7KSB7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSk7Ci0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9k
ZWJ1ZykgewotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBpdCAtIGJlZ2lu
OwotICAgICAgICAgICAgaW50IHVudXNlZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdM
aW5lOwotICAgICAgICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAgICAgICAgICAgIGV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWQsIHVu
dXNlZCwgdW51c2VkLCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7Ci0gICAgICAgICAgICBp
ZiAobGluZSA9PSBvcERlYnVnTGluZSAmJiAoY29sdW1uID09IEJyZWFrcG9pbnQ6OnVuc3BlY2lm
aWVkQ29sdW1uIHx8IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpdCArPSBvcGNvZGVMZW5ndGhzW29wY29k
ZUlEXTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvZGVCbG9jazo6c2hy
aW5rVG9GaXQoU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQotewotICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0KLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQo
KTsKLSAgICAKLSAgICBpZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNocmluaykgewotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9yYXJlRGF0YSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgfQotICAgIH0gLy8gZWxzZSBkb24n
dCBzaHJpbmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9p
bnRlcnMgaW50byB0aGVzZSB0YWJsZXMuCi19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2Rl
QmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJ
bmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwot
ICAgIG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5
bW9ycGhpY0NhbGxOb2RlKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2Fs
bGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcp
OwotfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNv
bWluZ0NhbGxzKCkKLXsKLSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAh
PSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2Fs
bHMuYmVnaW4oKS0+dW5saW5rKCk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB3aGlsZSAobV9pbmNv
bWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICBtX2lu
Y29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3aGlsZSAobV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5l
bmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5r
KCp2bSgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENvZGVCbG9jazo6bGlu
a0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyog
aW5jb21pbmcpCi17Ci0gICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBt
X2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotQ29kZUJsb2NrKiBDb2Rl
QmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKLXsKLSAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsK
LX0KLQotI2lmIEVOQUJMRShKSVQpCi1Db2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQo
KQotewotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7
Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCi0gICAg
ICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVG
b3JDYWxsKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQot
ICAgICAgICByZXR1cm4ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6
aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5Q29k
ZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1E
Rkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQot
ewotICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7Ci0K
LSAgICBpZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKLSAgICAg
ICAgaWYgKG1faXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9u
Rm9yQ29uc3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwotICAgICAgICByZXR1cm4gREZHOjpm
dW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKGNs
YXNzSW5mbyA9PSBFdmFsQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OmV2
YWxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1D
b2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlM
ZXZlbCh0aGlzKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRo
aXMpOwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8gPT0gV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29t
cGlsZTsKLSNlbmRpZgotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQot
dm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24s
IFJlb3B0aW1pemF0aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCi17Ci0j
aWYgIUVOQUJMRShERkdfSklUKQotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURf
UEFSQU0oZGV0YWlsKTsKLSNlbmRpZgotICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQodGhp
cywgImpldHRpc29uIiwgKCJkdWUgdG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUg
PT0gQ291bnRSZW9wdGltaXphdGlvbiwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWls
KSkpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQocmVhc29uICE9IFByb2ZpbGVyOjpOb3RKZXR0aXNv
bmVkKTsKLSAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSkgewotICAgICAgICBkYXRhTG9nKCJKZXR0aXNvbmluZyAiLCAqdGhpcyk7
Ci0gICAgICAgIGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pCi0gICAgICAgICAgICBk
YXRhTG9nKCIgYW5kIGNvdW50aW5nIHJlb3B0aW1pemF0aW9uIik7Ci0gICAgICAgIGRhdGFMb2co
IiBkdWUgdG8gIiwgcmVhc29uKTsKLSAgICAgICAgaWYgKGRldGFpbCkKLSAgICAgICAgICAgIGRh
dGFMb2coIiwgIiwgKmRldGFpbCk7Ci0gICAgICAgIGRhdGFMb2coIi5cbiIpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAocmVhc29uID09IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5j
ZSkgewotICAgICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZygqdGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0aGUg
Zm9sbG93aW5nIGRlYWQgcmVmZXJlbmNlczpcbiIpOwotICAgICAgICAgICAgREZHOjpDb21tb25E
YXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0
aW9uID0gZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXTsKLSAgICAgICAgICAgICAgICBKU0NlbGwq
IG9yaWdpbiA9IHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpOwotICAgICAgICAgICAgICAg
IEpTQ2VsbCogZnJvbSA9IHRyYW5zaXRpb24ubV9mcm9tLmdldCgpOwotICAgICAgICAgICAgICAg
IEpTQ2VsbCogdG8gPSB0cmFuc2l0aW9uLm1fdG8uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCghb3JpZ2luIHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpICYmIEhlYXA6OmlzTWFya2VkKGZy
b20pKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgVHJhbnNpdGlvbiB1bmRlciAiLCBSYXdQb2ludGVyKG9yaWdpbiksICIsICIsIFJh
d1BvaW50ZXIoZnJvbSksICIgLT4gIiwgUmF3UG9pbnRlcih0byksICIuXG4iKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndl
YWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFr
ID0gZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQod2VhaykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBSYXdQb2ludGVy
KHdlYWspLCAiLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAo
KSk7Ci0gICAgCi0gICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToK
LSAgICAvLyAxKSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3Rh
Y2sgcmlnaHQgbm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAotICAgIC8vICAgIHdlIHNob3Vs
ZCBPU1IgZXhpdCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFm
dGVyIHRoZSByZXR1cm4uCi0gICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUg
b3duZXIgZXhlY3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4K
LQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRp
c29uRHVlVG9PbGRBZ2UpIHsKLSAgICAgICAgaWYgKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29t
cGlsYXRpb24gPSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKSkKLSAg
ICAgICAgICAgIGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0
cyBvd24gYm9vay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQu
Ci0gICAgICAgIGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0g
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXND
dXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAg
IERpZCBpbnZhbGlkYXRlICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAgICAvLyBDb3VudCB0aGUg
cmVvcHRpbWl6YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgotICAgIGlmICht
b2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRo
aXMgc2hvdWxkIGNhbGwgYWx0ZXJuYXRpdmUoKS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwotICAgICAgICBiYXNlbGluZUFsdGVybmF0
aXZlKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0
aW1pemF0aW9uIGZvciAiLCAqdGhpcywgIlxuIik7Ci0gICAgfQotICAgIAotICAgIGlmICh0aGlz
ICE9IHJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUg
bmV2ZXIgdGhlIGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUK
LSAgICAgICAgLy8gYmxvY2tzLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFs
dGVybmF0aXZlKCkpCi0gICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLQotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpCi0g
ICAgICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKLQotICAgIC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50
IHRvIGluc3RhbGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQotICAgIC8vIGJlY2F1c2UgdGhh
dCB3b3VsZCBhZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYg
KG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25l
clNjcmlwdEV4ZWN1dGFibGUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgYWNj
b21wbGlzaGVzICgyKS4KLSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
Ci0gICAgICAgIG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgp
LCBzcGVjaWFsaXphdGlvbktpbmQoKSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
REZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIERpZCBp
bnN0YWxsIGJhc2VsaW5lIHZlcnNpb24gb2YgIiwgKnRoaXMsICJcbiIpOwotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQotfQotCi1KU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmpl
Y3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKLX0KLQotY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBS
ZWN1cnNpb25DaGVja0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGRlcHRoVG9DaGVjaykKLSAgICAgICAgOiBtX3N0YXJ0Q2Fs
bEZyYW1lKHN0YXJ0Q2FsbEZyYW1lKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
LSAgICAgICAgLCBtX2RlcHRoVG9DaGVjayhkZXB0aFRvQ2hlY2spCi0gICAgICAgICwgbV9mb3Vu
ZFN0YXJ0Q2FsbEZyYW1lKGZhbHNlKQotICAgICAgICAsIG1fZGlkUmVjdXJzZShmYWxzZSkKLSAg
ICB7IH0KLQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9y
JiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgQ2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZy
YW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRDYWxsRnJh
bWUgPT0gbV9zdGFydENhbGxGcmFtZSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFt
ZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgewotICAgICAg
ICAgICAgaWYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSA9PSBtX2NvZGVCbG9j
aykgewotICAgICAgICAgICAgICAgIG1fZGlkUmVjdXJzZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFtX2RlcHRoVG9DaGVjay0tKQotICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkRvbmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKLSAgICB9Ci0KLSAgICBib29sIGRpZFJlY3Vyc2UoKSBjb25zdCB7IHJldHVybiBt
X2RpZFJlY3Vyc2U7IH0KLQotcHJpdmF0ZToKLSAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJh
bWU7Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
ZGVwdGhUb0NoZWNrOwotICAgIG11dGFibGUgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7Ci0g
ICAgbXV0YWJsZSBib29sIG1fZGlkUmVjdXJzZTsKLX07Ci0KLXZvaWQgQ29kZUJsb2NrOjpub3Rp
Y2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSkKLXsKLSAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAKLSAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgIGRhdGFMb2coIk5vdGljaW5n
IGNhbGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwg
KnRoaXMsICJcbiIpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghbV9zaG91
bGRBbHdheXNCZUlubGluZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIWNhbGxl
ckNvZGVCbG9jaykgewotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFERkc6OmlzU21h
bGxFbm91Z2hUb0lubGluZUNvZGVJbnRvKGNhbGxlckNvZGVCbG9jaykpIHsKLSAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVj
YXVzZSBjYWxsZXIgaXMgdG9vIGxhcmdlLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykgewotICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0aWxsIGluIHRoZSBpbnRl
cnByZXRlciwgdGhlbiB3ZSBjYW4ndCBleHBlY3QgaW5saW5pbmcgdG8KLSAgICAgICAgLy8gaGFw
cGVuIGFueXRpbWUgc29vbi4gQXNzdW1lIGl0J3MgcHJvZml0YWJsZSB0byBvcHRpbWl6ZSBpdCBz
ZXBhcmF0ZWx5LiBUaGlzCi0gICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIFNB
Qkkgb25seSBpZiBpdCBpcyBjYWxsZWQgbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4KLSAgICAgICAg
Ly8gYW55IG9mIGl0cyBjYWxsZXJzLgotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAg
ICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBpbiBMTElu
dC5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ2FsbExpbmsoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJj
YXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5j
dGlvbkNvZGUpIHsKLSAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBn
bG9iYWwgY29kZSwgYXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQotICAgICAgICAvLyBvcHRpbWl6
ZWQgYW55dGltZSBzb29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUg
c2luY2Ugd2UKLSAgICAgICAgLy8gZGVsYXkgZXZhbCBvcHRpbWl6YXRpb24gYnkgYSAqbG90Ki4K
LSAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFy
aW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJlY3Vyc2l2ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVk
LgotICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciBmdW5jdG9yKGNhbGxlckZyYW1lLCB0aGlzLCBP
cHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0aCgpKTsKLSAgICB2bSgpLT50b3BDYWxsRnJhbWUt
Pml0ZXJhdGUoZnVuY3Rvcik7Ci0KLSAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNlKCkpIHsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxv
ZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSByZWN1cnNpb24gd2FzIGRldGVjdGVkLlxuIik7
Ci0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
U3RhdGUoKSA9PSBERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgewotICAgICAgICBkYXRhTG9n
KCJJbiBjYWxsIGZyb20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFtZS0+Y29k
ZU9yaWdpbigpLCAiIHRvICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0eSBsZXZl
bCBpcyBub3Qgc2V0LlxuIik7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIGlm
IChjYW5Db21waWxlKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkp
Ci0gICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgdGhlIGNhbGxlciBp
cyBub3QgYSBERkcgY2FuZGlkYXRlLlxuIik7Ci0gICAgCi0gICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKLSNlbmRpZgotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIEFTU0VS
VChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyTWF4KCkpOwotICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi0j
aWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMpCi17Ci0gICAgbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0
ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVnaXN0ZXJBdE9mZnNldExpc3Qp
Ci17Ci0gICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0
TGlzdCk7Ci19Ci0gICAgCi1zdGF0aWMgc2l6ZV90IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKHNpemVfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotewotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjcHVSZWdpc3RlclNpemUgPSBzaXplb2Yodm9pZCopOwotICAgIHJldHVy
biAoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIGNhbGxlZVNhdmVS
ZWdpc3RlcnMgKiBjcHVSZWdpc3RlclNpemUpIC8gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0KLX0KLQot
c2l6ZV90IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpCi17Ci0gICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci19Ci0K
LXNpemVfdCBDb2RlQmxvY2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCi17
Ci0gICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVycy0+c2l6ZSgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmNvdW50UmVv
cHRpbWl6YXRpb24oKQotewotICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAg
ICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyTWF4KCkpCi0gICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIgPSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOwotfQotCi11bnNp
Z25lZCBDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoKQotewotICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBpZiAoT3B0aW9uczo6dGVzdFRo
ZUZUTCgpKSB7Ci0gICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiAxMDAwMDAwOwotICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTCA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Ci0gICAgfQotICAg
IHJldHVybiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUo
KSkgPyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotfQotCi1pbnQzMl90
IENvZGVCbG9jazo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKLXsKLSAgICBp
ZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV2YWxU
aHJlc2hvbGRNdWx0aXBsaWVyKCk7Ci0gICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWRvdWJsZSBD
b2RlQmxvY2s6Om9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKQotewotICAgIC8v
IFRoaXMgZXhwcmVzc2lvbiBhcmlzZXMgZnJvbSBkb2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9m
Ci0gICAgLy8KLSAgICAvLyBGW3hfXSA9OiBhICogU3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsg
ZAotICAgIC8vCi0gICAgLy8gYWdhaW5zdCB0aGUgZGF0YSBwb2ludHM6Ci0gICAgLy8KLSAgICAv
LyAgICB4ICAgICAgIEZbeF9dCi0gICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFs
bGVzdCByZWFzb25hYmxlIGNvZGUgYmxvY2spCi0gICAgLy8gICAyMDAgICAgICAgMS4wICAgICAg
ICAgICh0eXBpY2FsIHNtYWxsLWlzaCBjb2RlIGJsb2NrKQotICAgIC8vICAgMzIwICAgICAgIDEu
MiAgICAgICAgICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBv
cHRpbWl6ZSkKLSAgICAvLyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNh
dyBpbiAzZC1jdWJlIHRoYXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKLSAgICAvLyAgNDAw
MCAgICAgICA1LjUgICAgICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRo
ZSBmdW5jdGlvbiB0byBjb252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQot
ICAgIC8vIDEwMDAwICAgICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKLSAgICAv
LwotICAgIC8vIEkgYWNoaWV2ZSB0aGUgbWluaW1pemF0aW9uIHVzaW5nIHRoZSBmb2xsb3dpbmcg
TWF0aGVtYXRpY2EgY29kZToKLSAgICAvLwotICAgIC8vIE15RnVuY3Rpb25UZW1wbGF0ZVt4Xywg
YV8sIGJfLCBjXywgZF9dIDo9IGEqU3FydFt4ICsgYl0gKyBBYnNbYyp4XSArIGQKLSAgICAvLwot
ICAgIC8vIHNhbXBsZXMgPSB7ezEwLCAwLjl9LCB7MjAwLCAxfSwgezMyMCwgMS4yfSwgezEyNjgs
IDV9LCB7NDAwMCwgNS41fSwgezEwMDAwLCA2fX0KLSAgICAvLwotICAgIC8vIHNvbHV0aW9uID0g
Ci0gICAgLy8gICAgIE1pbmltaXplW1BsdXMgQEAgKChNeUZ1bmN0aW9uVGVtcGxhdGVbI1tbMV1d
LCBhLCBiLCBjLCBkXSAtICNbWzJdXSleMiAmIC9AIHNhbXBsZXMpLAotICAgIC8vICAgICAgICAg
e2EsIGIsIGMsIGR9XVtbMl1dCi0gICAgLy8KLSAgICAvLyBBbmQgdGhlIGNvZGUgYmVsb3cgKHRv
IGluaXRpYWxpemUgYSwgYiwgYywgZCkgaXMgZ2VuZXJhdGVkIGJ5OgotICAgIC8vCi0gICAgLy8g
UHJpbnRbImNvbnN0IGRvdWJsZSAiIDw+IFRvU3RyaW5nWyNbWzFdXV0gPD4gIiA9ICIgPD4KLSAg
ICAvLyAgICAgSWZbI1tbMl1dIDwgMC4wMDAwMSwgIjAuMCIsIFRvU3RyaW5nWyNbWzJdXV1dIDw+
ICI7Il0gJiAvQCBzb2x1dGlvbgotICAgIC8vCi0gICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUg
Zm9sbG93aW5nIHRvIGJlIHRydWU6Ci0gICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hl
YXAgdG8gb3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCi0gICAg
Ly8gICB0aGFuIGxhdGVyLgotICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2
ZSB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAotICAgIC8v
ICAgYW5kIHNvbWV0aW1lcyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5l
dmVyIG9wdGltaXplIHRoZW0uCi0gICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5v
dCB0b3RhbGx5IGxpbmVhciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQotICAgIC8vICAg
REZHIGluY3VycyBzb21lIGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0
aGVyZSBpcyBlbm91Z2ggc2xvcAotICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4g
aW5zdHJ1Y3Rpb24gY291bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAotICAgIC8v
ICAgdGhhdCBmb3IgdGhvc2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hv
dWxkIG5vdCBoYXZlIGEgc3Ryb25nCi0gICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9s
ZC4KLSAgICAvLwotICAgIC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93
IHRvIGFjaGlldmUgdGhlbTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKLSAgICAvLyBleGFt
cGxlIHdoZXJlIHRoZSBoZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3Vi
ZSB3aXRoIGluc3RydWN0aW9uCi0gICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQg
ZWFybHkgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKLSAg
ICAvLyB0b3RhbGx5IHdyb25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlv
biBjb3VudCAxMjY4LCB3aGljaCB3YXMgZXhwZW5zaXZlCi0gICAgLy8gdG8gY29tcGlsZSBhbmQg
ZGlkbid0IHJ1biBvZnRlbiBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGlu
aW9uKSwgYW5kCi0gICAgLy8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRo
YXQgcmVwcmVzZW50ZWQgbXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCi0gICAgLy8gaGV1cmlzdGlj
cyBzaG91bGQgZG8gZm9yIHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCi0gICAgLy8KLSAg
ICAvLyBUaGUgZXhwcmVzc2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFy
b3NlIGJlY2F1c2UgSSBzdGFydGVkIHdpdGggYW4KLSAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFu
ZCB0aGVuIGRpZCB0d28gdGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBl
bnN1cmUKLSAgICAvLyB0aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0
aXZlIHZhbHVlIG9mIGMgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbgotICAgIC8vIHRoZSBmdW5jdGlv
biB0dXJuaW5nIG92ZXIgYW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJl
dyBpbiBhIFNxcnQKLSAgICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0
aW9uIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQotICAgIC8vIHRv
IHNtYWxsIGNoYW5nZXMgaW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3
aGVuIHggZ2V0cyBsYXJnZS4KLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0
IGVzc2VudGlhbGx5IGVsaW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQotICAgIC8v
IGV4cHJlc3Npb24gKGMgPT0gMC4wKS4KLSAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0Owot
ICAgIGNvbnN0IGRvdWJsZSBiID0gMS4wMjQwNjsKLSAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsK
LSAgICBjb25zdCBkb3VibGUgZCA9IDAuODI1OTE0OwotICAgIAotICAgIGRvdWJsZSBpbnN0cnVj
dGlvbkNvdW50ID0gdGhpcy0+aW5zdHJ1Y3Rpb25Db3VudCgpOwotICAgIAotICAgIEFTU0VSVChp
bnN0cnVjdGlvbkNvdW50KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIg
d2UgaGF2ZSBhbiBpbnN0cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBqdXN0IHJldHVy
biB0aGUgdmFsdWUgb2YgZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCi0gICAgCi0gICAgZG91Ymxl
IHJlc3VsdCA9IGQgKyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1
Y3Rpb25Db3VudDsKLSAgICAKLSAgICByZXN1bHQgKj0gY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBs
aWVyKCk7Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBk
YXRhTG9nKAotICAgICAgICAgICAgKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGlu
c3RydWN0aW9uQ291bnQsCi0gICAgICAgICAgICAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVy
IGJ5ICIsIHJlc3VsdCwgIiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLAotICAg
ICAgICAgICAgIlxuIik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBp
bnQzMl90IGNsaXBUaHJlc2hvbGQoZG91YmxlIHRocmVzaG9sZCkKLXsKLSAgICBpZiAodGhyZXNo
b2xkIDwgMS4wKQotICAgICAgICByZXR1cm4gMTsKLSAgICAKLSAgICBpZiAodGhyZXNob2xkID4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKLSAg
ICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhyZXNob2xkKTsKLX0KLQotaW50
MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVz
aG9sZCkKLXsKLSAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihkZXNpcmVkVGhyZXNob2xkKSAqCi0gICAgICAgIG9wdGltaXphdGlvblRocmVzaG9s
ZFNjYWxpbmdGYWN0b3IoKSAqCi0gICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCkpKTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSkgewot
ICAgICAgICBpZiAod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktl
eSh0aGlzLCBERkc6OkRGR01vZGUpKQotICAgICAgICAgICAgPT0gREZHOjpXb3JrbGlzdDo6Q29t
cGlsZWQpIHsKLSAgICAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgcmV0
dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhp
cyk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKLXsKLSAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBP
cHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOwotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZG9udE9wdGlt
aXplQW55dGltZVNvb24oKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgIGRhdGFMb2coKnRoaXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwot
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXAoKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC5cbiIpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKAotICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12
b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQotewotICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcg
YWZ0ZXIgbG9uZyB3YXJtLXVwLlxuIik7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9qaXRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVkQ291bnRlclZh
bHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCB0aGlz
KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6b3B0aW1pemVTb29uKCkKLXsKLSAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRp
bWl6aW5nIHNvb24uXG4iKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2ppdEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCgKLSAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0
aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12
b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpCi17
Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywg
IjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5LlxuIik7Ci0gICAgbV9qaXRFeGVjdXRl
Q291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLXZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQotewotICAgIEpJVENvZGU6
OkpJVFR5cGUgdHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRDb2RlOjpCYXNl
bGluZUpJVCkgewotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJh
c2VsaW5lIGNvZGUgYnV0IGhhdmUgIiwgdHlwZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogdGhlUmVwbGFj
ZW1lbnQgPSByZXBsYWNlbWVudCgpOwotICAgIGlmICgocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkgIT0gKHRoZVJlcGxhY2VtZW50ICE9IHRoaXMpKSB7Ci0gICAgICAgIGRhdGFMb2co
KnRoaXMsICI6IHdlIGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKLSAgICAgICAg
aWYgKHRoZVJlcGxhY2VtZW50ID09IHRoaXMpCi0gICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUg
b3VyIG93biByZXBsYWNlbWVudC5cbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRh
TG9nKCJvdXIgcmVwbGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAodGhlUmVwbGFjZW1lbnQpLCAi
XG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwotICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICBkb250
T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21waWxh
dGlvbkRlZmVycmVkOgotICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGltaXplQW55
dGltZVNvb24oKSBidXQgd2UgY2Fubm90IGJlY2F1c2UKLSAgICAgICAgLy8gZm9yY2VPcHRpbWl6
YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQgd29uJ3QK
LSAgICAgICAgLy8gbmVjZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywgd2UgbWFrZSBz
dXJlIHRoYXQgZXZlbiBpZiB0aGF0Ci0gICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcg
YSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQotICAgICAgICAv
LyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCi0gICAgICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDoKLSAgICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgotICAgICAg
ICBjb3VudFJlb3B0aW1pemF0aW9uKCk7Ci0gICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQg
cmVzdWx0OiAiLCBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCksICJcbiIpOwotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLSNlbmRpZgotICAgIAotdWludDMyX3QgQ29kZUJs
b2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xk
KQotewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0g
ICAgLy8gQ29tcHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhp
cyBpcyBjYWxsZWQgaW5mcmVxdWVudGx5Ci0gICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdv
bid0IGh1cnQgdXMuCi0gICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKLSAg
ICBmb3IgKHVuc2lnbmVkIG4gPSBiYXNlbGluZVZlcnNpb24oKS0+cmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKTsgbi0tOykgewotICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQg
PDwgMTsKLSAgICAgICAgaWYgKG5ld1Jlc3VsdCA8IHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIHJlc3VsdCA9
IG5ld1Jlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdWludDMyX3QgQ29k
ZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCi17Ci0gICAgcmV0
dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJl
b3B0aW1pemF0aW9uKCkgKiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSk7Ci19Ci0KLXVp
bnQzMl90IENvZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9t
TG9vcCgpCi17Ci0gICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6
Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSAqIGNvZGVUeXBlVGhyZXNo
b2xkTXVsdGlwbGllcigpKTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVO
b3coKQotewotICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9s
ZEZvclJlb3B0aW1pemF0aW9uKCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGlt
aXplRnJvbUxvb3BOb3coKQotewotICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRD
b3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKLX0KLSNlbmRpZgotCi1B
cnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICht
X2FycmF5UHJvZmlsZXNbaV0uYnl0ZWNvZGVPZmZzZXQoKSA9PSBieXRlY29kZU9mZnNldCkKLSAg
ICAgICAgICAgIHJldHVybiAmbV9hcnJheVByb2ZpbGVzW2ldOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgIHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7
Ci19Ci0KLUFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIG1fYXJy
YXlQcm9maWxlcy5hcHBlbmQoQXJyYXlQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuICZtX2FycmF5UHJvZmlsZXMubGFzdCgpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9j
azo6YWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGFkZEFycmF5UHJvZmls
ZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6
OmdldE9yQWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQXJyYXlQcm9maWxlKiByZXN1bHQgPSBn
ZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tl
ciwgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JB
ZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZ2V0T3JBZGRBcnJheVByb2Zp
bGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLVZl
Y3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIENvZGVCbG9jazo6Y29k
ZU9yaWdpbnMoKQotewotICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5jb2RlT3Jp
Z2luczsKLX0KLQotc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNv
bnN0Ci17Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCkt
PmRmZ0lkZW50aWZpZXJzLnNpemUoKTsKLX0KLQotY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2Nr
OjppZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QKLXsKLSAgICBzaXplX3QgdW5saW5rZWRJZGVu
dGlmaWVycyA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7Ci0gICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQotICAg
ICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VS
VChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgcmV0dXJuIG1faml0
Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlm
aWVyc107Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAK
LSAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4g
dmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKLSAgICAgICAgdW5zaWduZWQg
bnVtU2FtcGxlcyA9IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7Ci0gICAgICAgIGlm
IChudW1TYW1wbGVzID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCi0gICAgICAgICAg
ICBudW1TYW1wbGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0
IHdhbnQgcHJvZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdl
aWdodC4KLSAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOwot
ICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKLSAgICAgICAgICAg
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxl
cygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKLSAgICAgICAgICAgIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9ucyhsb2NrZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVB
bGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpCi17Ci0gICAgdW5zaWduZWQgaWdub3JlZFZhbHVl
MSwgaWdub3JlZFZhbHVlMjsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MoaWdub3JlZFZhbHVlMSwgaWdub3JlZFZhbHVlMik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxl
cy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCB0aGlzKTsKLSAgICAKLSAgICAvLyBEb24ndCBjb3VudCB0aGVz
ZSBlaXRoZXIsIGZvciBzaW1pbGFyIHJlYXNvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZXNbaV0udXBkYXRlSW5kZXhpbmdUeXBlKCk7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucygpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
ICAgIGlmIChtX293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnMoKTsKLSAgICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Ci19Ci0KLWJvb2wgQ29kZUJs
b2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCi17Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4u
LlxuIik7Ci0KLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6
bWF4aW11bU9wdGltaXphdGlvbkRlbGF5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAot
ICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZT
YW1wbGVzSW5Qcm9maWxlczsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MobnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKTsKLQotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKLSAgICAgICAg
ZGF0YUxvZ0YoCi0gICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAl
bGYgKCV1IC8gJXUpXG4iLAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAg
IG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCksCi0gICAgICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAot
ICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgfQotCi0gICAgaWYg
KCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpk
ZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQotICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFs
dWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygp
ID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCi0gICAgICAgICYmIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9w
dGlvbnM6Om1pbmltdW1PcHRpbWl6YXRpb25EZWxheSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAKLSAgICBBU1NFUlQobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSk7Ci0gICAgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIrKzsKLSAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi12b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRT
aXRlcygpCi17Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KTsKLSAgICBBU1NFUlQoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2
ZSgpOwotICAgIAotICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpE
RkdKSVQ6IHsKLSAgICAgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmco
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIERGRzo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9z
ckV4aXRbaV07Ci0gICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlKHByb2ZpbGVkQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
I2lmIEVOQUJMRShGVExfSklUKQotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiB7Ci0gICAgICAg
IC8vIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBz
aW5jZSB0aGUgRlRMOjpKSVRDb2RlOjpvc3JFeGl0Ci0gICAgICAgIC8vIHZlY3RvciBjb250YWlu
cyBhIHRvdGFsbHkgZGlmZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5zIHRvIGJlaGF2
ZSBsaWtlCi0gICAgICAgIC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KLSAgICAgICAgRlRMOjpK
SVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5mdGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IEZUTDo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICBl
eGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpZiBFTkFCTEUoVkVS
Qk9TRV9WQUxVRV9QUk9GSUxFKQotdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkK
LXsKLSAgICBkYXRhTG9nKCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsr
aSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9m
aWxlcyhpKTsKLSAgICAgICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgYXJnID0gJXU6ICIsIGkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0KTsKLSAgICAgICAgaWYgKCFwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSAmJiBwcm9maWxl
LT5tX3ByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCI8ZW1w
dHk+XG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHByb2Zp
bGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAg
fQotICAgIGRhdGFMb2coIlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCk7ICsr
aSkgewotICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGUo
aSk7Ci0gICAgICAgIGRhdGFMb2dGKCIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKLSAgICB9Ci19Ci0jZW5kaWYgLy8gRU5B
QkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKLQotdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJl
Z2lzdGVyQ291bnQoKQotewotICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICByZXR1cm4gTExJbnQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcih0aGlzKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgY2FzZSBKSVRDb2RlOjpC
YXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRo
aXMpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBj
YXNlIEpJVENvZGU6OkRGR0pJVDoKLSAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAg
cmV0dXJuIGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmZyYW1lUmVnaXN0ZXJDb3VudDsKLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci1pbnQgQ29kZUJsb2NrOjpzdGFja1BvaW50ZXJPZmZzZXQoKQotewotICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQoKSAtIDEpLm9mZnNldCgpOwot
fQotCi1zaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQotewotICAg
IC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUg
ZWl0aGVyIG1fdm0gb3IgdGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0aWFs
aXplZC4gSXQncyBPSyB0byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKLSAgICAv
LyBtYXR0ZXIgaXMgdGhlIHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBzbG93
IHBhdGggaXMgdHJpZ2dlcmVkLgotICAgIGlmICghbV92bSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgaWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJh
c2VsaW5lSklUKQotICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGlj
dGlvbiBhcyB3ZSdsbCBnZXQuCi0gICAgCi0gICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4g
YSBzaXplIHRoYXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCi0g
ICAgZG91YmxlIG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQtPm1lYW4oKSArCi0gICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKLSAg
ICAKLSAgICAvLyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMu
IFNpbGVudGx5IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCi0gICAgLy8gaGVyZSBpcyBPSywgc2lu
Y2UgdGhpcyB3aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KLSAgICBpZiAobXVsdGlw
bGllciA8IDAgfHwgbXVsdGlwbGllciA+IDEwMDApCi0gICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIGRvdWJsZSBkb3VibGVSZXN1bHQgPSBtdWx0aXBsaWVyICogbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpOwotICAgIAotICAgIC8vIEJlIGV2ZW4gbW9yZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0
IHZhbHVlcyB0aGF0IHdvbid0IGZpdCBpbnRvIGEgc2l6ZV90LiBJZgotICAgIC8vIHRoZSBmdW5j
dGlvbiBpcyBzbyBodWdlIHRoYXQgd2UgY2FuJ3QgZXZlbiBmaXQgaXQgaW50byB2aXJ0dWFsIG1l
bW9yeSB0aGVuIHdlCi0gICAgLy8gc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBvdGhlciBndWFy
ZHMgaW4gcGxhY2UgdG8gcHJldmVudCB1cyBmcm9tIGV2ZW4gZ2V0dGluZwotICAgIC8vIHRvIHRo
aXMgcG9pbnQuCi0gICAgaWYgKGRvdWJsZVJlc3VsdCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGRvdWJsZVJlc3VsdCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bj
b2RlKE9wY29kZUlEIG9wY29kZUlEKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IHZtKCktPmludGVycHJldGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IGluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAg
ICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0
ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewotI2RlZmluZSBERUZJTkVfT1AoY3VyT3Bjb2RlLCBs
ZW5ndGgpICAgICAgICBcCi0gICAgICAgIGNhc2UgY3VyT3Bjb2RlOiAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmIChjdXJPcGNvZGUgPT0gb3Bjb2RlSUQpICAgICAgXAotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBi
eXRlY29kZU9mZnNldCArPSBsZW5ndGg7ICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKLSN1bmRlZiBERUZJTkVfT1AK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2NvbnN0
YW50UmVnaXN0ZXJzW2ldLmdldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1i
b2xUYWJsZSo+KG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAg
ICAgIGF1dG8gZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwotICAgICAgICAgICAgZm9y
IChhdXRvIHB0ciA9IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0
cikgewotICAgICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9m
ZnNldCh2aXJ0dWFsUmVnaXN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHdvbid0IHdvcmsgZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgotICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAw
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdHItPmtleS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHZpcnR1YWxS
ZWdpc3RlciA9PSB0aGlzUmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
dGhpcyIpOwotICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRv
QXJndW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLVZhbHVlUHJvZmlsZSogQ29kZUJs
b2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17
Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQo
aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBvcGNvZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIHJldHVybiBpbnN0cnVjdGlvbnMo
KVtieXRlY29kZU9mZnNldCArIGxlbmd0aCAtIDFdLnUucHJvZmlsZTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OnZhbGlkYXRlKCkKLXsKLSAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5l
c3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3Qg
ZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCi0gICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZl
QXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKLSAg
ICAKLSAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X251bUNhbGxlZUxvY2FscykpIHsKLSAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwot
ICAgICAgICBkYXRhTG9nKCIgICAgV3JvbmcgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0IVxuIik7
Ci0gICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAg
ICAgICBkYXRhTG9nKCIgICAgQml0IGNvdW50OiAiLCBsaXZlQXRIZWFkLm51bUJpdHMoKSwgIlxu
Iik7Ci0gICAgICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgfQotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fbnVtQ2FsbGVlTG9jYWxzOyBpLS07KSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChsaXZlQXRIZWFkW2ldKSB7Ci0gICAgICAgICAgICBiZWdpblZhbGlkYXRpb25E
aWRGYWlsKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgIiwgcmVnLCAiIGlz
IGV4cGVjdGVkIHRvIGJlIGRlYWQuXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1
bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZh
aWwoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRh
dGlvbkRpZEZhaWwoKQotewotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZSBpbiAiLCAq
dGhpcywgIjpcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpl
bmRWYWxpZGF0aW9uRGlkRmFpbCgpCi17Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkdW1wQnl0
ZWNvZGUoKTsKLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFp
bHVyZS5cbiIpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
Q29kZUJsb2NrOjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQotewotICAg
IG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7Ci0gICAgQVNTRVJUKG1fbnVtQnJl
YWtwb2ludHMpOwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
LSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9p
bnQpOwotfQotCi12b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3Rl
cHBpbmdNb2RlIG1vZGUpCi17Ci0gICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmICht
b2RlID09IFN0ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCi0gICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdn
ZXJTdGVwcGluZyk7Ci19Ci0KLVJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2Fz
ZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5h
cHBlbmQoUmFyZUNhc2VQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0dXJuICZtX3Jh
cmVDYXNlUHJvZmlsZXMubGFzdCgpOwotfQotCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewot
ICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAg
ICBtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2Rl
T2Zmc2V0LAotICAgICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7Ci19Ci0K
LXVuc2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNl
dChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0g
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgIGlm
IChwcm9maWxlKQotICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOwotICAgIHJldHVy
biAwOwotfQotCi1Bcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVybiBhcml0aFByb2ZpbGVG
b3JQQyhpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1Bcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qIHBjKQot
ewotICAgIGF1dG8gb3Bjb2RlSUQgPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNb
MF0udS5vcGNvZGUpOwotICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICBjYXNlIG9wX25lZ2F0
ZToKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmcGNbM10udS5v
cGVyYW5kKTsKLSAgICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNh
c2Ugb3BfYml0eG9yOgotICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNh
c2Ugb3Bfc3ViOgotICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEFyaXRoUHJvZmlsZSo+KCZwY1s0XS51Lm9wZXJhbmQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIENvZGVCbG9j
azo6Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBp
ZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBBcml0aFByb2ZpbGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKCFwcm9maWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIHByb2ZpbGUtPnRvb2tTcGVjaWFsRmFzdFBhdGgoKTsKLX0KLQotI2lmIEVO
QUJMRShKSVQpCi1ERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZl
bCgpCi17Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxp
dHlMZXZlbCgpOwotICAgIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi12b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9j
a0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucykKLXsKLSAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKCktPmhh
c09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb25zdCBWZWN0b3I8c2l6ZV90PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2Rl
QmxvY2soKS0+b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7IGkg
PCBvZmZzZXRzTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyBpcyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMgYmxv
Y2ssIGZpbmRpbmcgCi0gICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
IHdpbGwgZ2l2ZSB1cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4KLSAg
ICAgICAgc2l6ZV90IHN0YXJ0SWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2ldOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW3N0
YXJ0SWR4XS51Lm9wY29kZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwotICAgICAgICBp
bnQgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5v
cGVyYW5kOwotICAgICAgICBpbnQgYmFzaWNCbG9ja0VuZE9mZnNldDsKLSAgICAgICAgaWYgKGkg
KyAxIDwgb2Zmc2V0c0xlbmd0aCkgewotICAgICAgICAgICAgc2l6ZV90IGVuZElkeCA9IGJ5dGVj
b2RlT2Zmc2V0c1tpICsgMV07Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9w
X3Byb2ZpbGVfY29udHJvbF9mbG93KTsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQg
PSBpbnN0cnVjdGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBi
ZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UuCi0gICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZz
ZXQgPSBzdGQ6Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQp
OyAvLyBTb21lIHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1
cmUgaXQgaXMgdGhlIG9mZnNldCBiZWZvcmUuCi0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUg
Zm9sbG93aW5nIGNoZWNrIGFsbG93cyBmb3IgdGhlIHNhbWUgdGV4dHVhbCBKYXZhU2NyaXB0IGJh
c2ljIGJsb2NrIHRvIGhhdmUgaXRzIGJ5dGVjb2RlIGVtaXR0ZWQgbW9yZQotICAgICAgICAvLyB0
aGFuIG9uY2UgYW5kIHN0aWxsIHBsYXkgbmljZSB3aXRoIHRoZSBjb250cm9sIGZsb3cgcHJvZmls
ZXIuIFdoZW4gYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0IGlzIGxhcmdlciB0aGFuIAotICAgICAgICAv
LyBiYXNpY0Jsb2NrRW5kT2Zmc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZWNvZGUgZ2Vu
ZXJhdG9yIGhhcyBlbWl0dGVkIGNvZGUgZm9yIHRoZSBzYW1lIEFTVCBub2RlIAotICAgICAgICAv
LyBtb3JlIHRoYW4gb25jZSAoZm9yIGV4YW1wbGU6IEZvckluTm9kZSwgRmluYWxseSBibG9ja3Mg
aW4gVHJ5Tm9kZSwgZXRjKS4gVGhvdWdoIHRoZXNlIGFyZSBkaWZmZXJlbnQgCi0gICAgICAgIC8v
IGJhc2ljIGJsb2NrcyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoZXkgYXJlIGdlbmVyYXRlZCBm
cm9tIHRoZSBzYW1lIHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIEphdmFTY3JpcHQgCi0gICAg
ICAgIC8vIHByb2dyYW0uIFRoZSBjb25kaXRpb246IAotICAgICAgICAvLyAoYmFzaWNCbG9ja0Vu
ZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgCi0gICAgICAgIC8vIGlzIGVuY291bnRl
cmVkIHdoZW4gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgbGllcyBhY3Jvc3MgdGhlIGJvdW5kYXJ5
IG9mIHRoZXNlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgCi0gICAgICAgIC8vIGJsb2NrcyBh
bmQgdGhlIHRleHR1YWwgb2Zmc2V0IGdvZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBkdXBsaWNhdGVk
IGJsb2NrIGJhY2sgdG8gdGhlIGJlZ2lubmluZy4gVGhlc2UgCi0gICAgICAgIC8vIHJhbmdlcyBh
cmUgZHVtbXkgcmFuZ2VzIGFuZCBhcmUgaWdub3JlZC4gVGhlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUg
YmFzaWMgYmxvY2tzIHBvaW50IHRvIHRoZSBzYW1lIAotICAgICAgICAvLyBpbnRlcm5hbCBkYXRh
IHN0cnVjdHVyZSwgc28gaWYgYW55IG9mIHRoZW0gZXhlY3V0ZSwgaXQgd2lsbCByZWNvcmQgdGhl
IHNhbWUgdGV4dHVhbCBiYXNpYyBibG9jayBpbiB0aGUgCi0gICAgICAgIC8vIEphdmFTY3JpcHQg
cHJvZ3JhbSBhcyBleGVjdXRpbmcuCi0gICAgICAgIC8vIEF0IHRoZSBieXRlY29kZSBsZXZlbCwg
dGhpcyBzaXR1YXRpb24gbG9va3MgbGlrZToKLSAgICAgICAgLy8gajogb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3cgKGZyb20gai0+aywgd2UgaGF2ZSBiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0KQotICAgICAgICAvLyAuLi4KLSAgICAgICAgLy8gazogb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3cgKHdlIHdhbnQgdG8gc2tpcCBvdmVyIHRoZSBqLT5rIGJsb2NrIGFuZCBz
dGFydCBmcmVzaCBhdCBvZmZzZXQgayBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmFzaWMgYmxvY2sg
ay0+bSkuCi0gICAgICAgIC8vIC4uLgotICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xf
ZmxvdwotICAgICAgICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9m
ZnNldCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3Ro
KTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBv
ZiBhIENvZGVCbG9jay4KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUu
YmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJh
c2ljQmxvY2soKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxv
d1Byb2ZpbGVyKCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+c291cmNlSUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
KTsKLQotICAgICAgICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0
aGluIHRoZSByYW5nZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNl
dF0KLSAgICAgICAgLy8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZz
ZXRzIGFzIGdhcHMgaW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgotICAgICAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dCBv
ZiBhIEphdmFTY3JpcHQgcHJvZ3JhbSwgCi0gICAgICAgIC8vIGZ1bmN0aW9uIGxpdGVyYWxzIGZv
cm0gbmV3IGJhc2ljIGJsb2NrcyBib3VuZGFyaWVzLCBidXQgdGhleSBhcmVuJ3QgcmVwcmVzZW50
ZWQgCi0gICAgICAgIC8vIGluc2lkZSB0aGUgQ29kZUJsb2NrJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFt
LgotICAgICAgICBhdXRvIGluc2VydEZ1bmN0aW9uR2FwcyA9IFtiYXNpY0Jsb2NrTG9jYXRpb24s
IGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0gKGNvbnN0IFdyaXRl
QmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBmdW5jdGlvbkV4ZWN1dGFibGUpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIGludCBm
dW5jdGlvblN0YXJ0ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBpbnQgZnVuY3Rpb25FbmQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5k
T2Zmc2V0KCk7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25TdGFydCA+PSBiYXNpY0Jsb2NrU3Rh
cnRPZmZzZXQgJiYgZnVuY3Rpb25FbmQgPD0gYmFzaWNCbG9ja0VuZE9mZnNldCkKLSAgICAgICAg
ICAgICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmluc2VydEdhcChmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkVuZCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8
RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25EZWNscykKLSAgICAg
ICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLSAgICAgICAgZm9yIChjb25z
dCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rp
b25FeHBycykKLSAgICAgICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLQot
ICAgICAgICBpbnN0cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2ljQmxvY2tMb2NhdGlvbiA9
IGJhc2ljQmxvY2tMb2NhdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZSht
YXApOwotfQotCi1PcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBw
YykKLXsKLSAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICBpZiAoT3B0aW9u
YWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhw
YykpCi0gICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICB9Ci0KLSAgICBmb3IgKEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICpp
dGVyOwotICAgICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCi0gICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7Ci0gICAgfQotCi0gICAg
aWYgKE9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0
aGlzLCBwYykpCi0gICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwotCi0gICAgcmV0dXJuIE51bGxv
cHQ7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotT3B0aW9uYWw8dW5zaWduZWQ+IENvZGVC
bG9jazo6Ynl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpCi17Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0OwotICAg
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0
VHlwZSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBieXRlY29kZU9mZnNl
dCA9IGNhbGxTaXRlSW5kZXguYml0cygpOwotI2Vsc2UKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRz
KCkpOwotICAgICAgICBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKLSNlbmRpZgotICAgIH0gZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpE
RkdKSVQgfHwgaml0VHlwZSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KSk7Ci0gICAgICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4
KTsKLSAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSNlbHNl
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICByZXR1cm4gYnl0ZWNvZGVPZmZzZXQ7Ci19Ci0KLWludDMyX3QgQ29kZUJsb2NrOjp0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENv
ZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBNaXhlZFRyaVN0YXRlOgotICAg
ICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKLSAgICAgICAg
cmV0dXJuIHRocmVzaG9sZCAqIDQ7Ci0gICAgY2FzZSBUcnVlVHJpU3RhdGU6Ci0gICAgICAgIHJl
dHVybiB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gdGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAo
KQotewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQotewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VFNvb24oKSksIHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkK
LXsKLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBkb3VibGUgbnVtQWRkcyA9IDAuMDsK
LSAgICBkb3VibGUgdG90YWxBZGRTaXplID0gMC4wOwotICAgIGRvdWJsZSBudW1NdWxzID0gMC4w
OwotICAgIGRvdWJsZSB0b3RhbE11bFNpemUgPSAwLjA7Ci0gICAgZG91YmxlIG51bU5lZ3MgPSAw
LjA7Ci0gICAgZG91YmxlIHRvdGFsTmVnU2l6ZSA9IDAuMDsKLSAgICBkb3VibGUgbnVtU3VicyA9
IDAuMDsKLSAgICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4wOwotCi0gICAgYXV0byBjb3VudElD
cyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgZm9yIChKSVRBZGRJQyog
YWRkSUMgOiBjb2RlQmxvY2stPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICBudW1BZGRzKys7Ci0g
ICAgICAgICAgICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGNvZGVCbG9jay0+bV9tdWxJQ3MpIHsK
LSAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJ
Qy0+Y29kZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lD
IDogY29kZUJsb2NrLT5tX25lZ0lDcykgewotICAgICAgICAgICAgbnVtTmVncysrOwotICAgICAg
ICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNzKSB7Ci0gICAg
ICAgICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAg
ICBoZWFwKCktPmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOwotCi0gICAgZGF0YUxvZygiTnVt
IEFkZHM6ICIsIG51bUFkZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIEFkZCBzaXplIGlu
IGJ5dGVzOiAiLCB0b3RhbEFkZFNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgQWRk
IHNpemU6ICIsIHRvdGFsQWRkU2l6ZSAvIG51bUFkZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlxu
Iik7Ci0gICAgZGF0YUxvZygiTnVtIE11bHM6ICIsIG51bU11bHMsICJcbiIpOwotICAgIGRhdGFM
b2coIlRvdGFsIE11bCBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE11bFNpemUsICJcbiIpOwotICAg
IGRhdGFMb2coIkF2ZXJhZ2UgTXVsIHNpemU6ICIsIHRvdGFsTXVsU2l6ZSAvIG51bU11bHMsICJc
biIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiTnVtIE5lZ3M6ICIsIG51bU5l
Z3MsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIE5lZyBzaXplIGluIGJ5dGVzOiAiLCB0b3Rh
bE5lZ1NpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgTmVnIHNpemU6ICIsIHRvdGFs
TmVnU2l6ZSAvIG51bU5lZ3MsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxv
ZygiTnVtIFN1YnM6ICIsIG51bVN1YnMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIFN1YiBz
aXplIGluIGJ5dGVzOiAiLCB0b3RhbFN1YlNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJh
Z2UgU3ViIHNpemU6ICIsIHRvdGFsU3ViU2l6ZSAvIG51bVN1YnMsICJcbiIpOwotCi0gICAgZGF0
YUxvZygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotI2VuZGlmCi19Ci0KLUJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyYgQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCi17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBz
dGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7Ci0gICAgewot
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBpZiAo
IW1fbGl2ZW5lc3NBbmFseXNpcykKLSAgICAgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcyA9IFdU
Rk1vdmUoYW5hbHlzaXMpOwotICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKLSAg
ICB9Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAkocmV2aXNpb24gMjA4MjI0
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmg6MjA4MjI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCisjaW5jbHVkZSAi
Qnl0ZWNvZGVDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1
ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiCisjaW5jbHVkZSAiQ29kZUJs
b2NrSGFzaC5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5o
IgorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUg
IkV2YWxDb2RlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCisjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5o
IgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNp
bmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUTWF0aElDRm9yd2FyZHMuaCIKKyNpbmNs
dWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkp1
bXBUYWJsZS5oIgorI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAi
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5oIgorI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgIlByb2ZpbGVySmV0dGlzb25SZWFzb24uaCIKKyNpbmNsdWRl
ICJQcm9ncmFtRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgorI2lu
Y2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM7CitjbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgUENUb0Nv
ZGVPcmlnaW5NYXA7CitjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKK2NsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CisKK3N0cnVjdCBB
cml0aFByb2ZpbGU7CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitlbnVtIFJl
b3B0aW1pemF0aW9uTW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1p
emF0aW9uIH07CisKK2NsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CisKKyAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpT
Qzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7IAorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICAgICAg
dm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgfTsK
KworcHVibGljOgorICAgIGVudW0gQ29weVBhcnNlZEJsb2NrVGFnIHsgQ29weVBhcnNlZEJsb2Nr
IH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBERUNMQVJFX0lORk87
CisKK3Byb3RlY3RlZDoKKyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVy
ZSosIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
LCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3Ro
ZXIpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSopOworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAg
IFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisKK3B1YmxpYzoK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29kZUJsb2NrKCk7CisKKyAgICBVbmxpbmtlZENvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5n
ZXQoKTsgfQorCisgICAgQ1N0cmluZyBpbmZlcnJlZE5hbWUoKSBjb25zdDsKKyAgICBDb2RlQmxv
Y2tIYXNoIGhhc2goKSBjb25zdDsKKyAgICBib29sIGhhc0hhc2goKSBjb25zdDsKKyAgICBib29s
IGlzU2FmZVRvQ29tcHV0ZUhhc2goKSBjb25zdDsKKyAgICBDU3RyaW5nIGhhc2hBc1N0cmluZ0lm
UG9zc2libGUoKSBjb25zdDsKKyAgICBDU3RyaW5nIHNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0
OyAvLyBOb3QgcXVpdGUgdGhlIGFjdHVhbCBzb3VyY2Ugd2UgcGFyc2VkOyB0aGlzIHdpbGwgZG8g
dGhpbmdzIGxpa2UgcHJlZml4IHRoZSBzb3VyY2UgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHJlaWZp
ZWQgc2lnbmF0dXJlLgorICAgIENTdHJpbmcgc291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAv
LyBBcyBzb3VyY2VDb2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1
bnMgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAgICB2b2lkIGR1bXBBc3N1bWluZ0pJVFR5cGUoUHJp
bnRTdHJlYW0mLCBKSVRDb2RlOjpKSVRUeXBlKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIGludCBudW1QYXJhbWV0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisgICAgdm9pZCBzZXROdW1QYXJh
bWV0ZXJzKGludCBuZXdWYWx1ZSk7CisKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KKworICAgIGludCogYWRkcmVzc09mTnVtUGFy
YW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdl
dCgpKTsgfQorICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hSZWxhdGVkQ29kZUJsb2Nr
KEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIFZlY3RvcjxDb2RlQmxvY2sqLCA0PiBjb2Rl
QmxvY2tzOworICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZCh0aGlzKTsKKworICAgICAgICB3aGls
ZSAoIWNvZGVCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGN1cnJl
bnRDb2RlQmxvY2sgPSBjb2RlQmxvY2tzLnRha2VMYXN0KCk7CisgICAgICAgICAgICBmKGN1cnJl
bnRDb2RlQmxvY2spOworCisgICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9
IGN1cnJlbnRDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgY29kZUJs
b2Nrcy5hcHBlbmQoYWx0ZXJuYXRpdmUpOworICAgICAgICAgICAgaWYgKENvZGVCbG9jayogb3Ny
RW50cnlCbG9jayA9IGN1cnJlbnRDb2RlQmxvY2stPnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxs
KCkpCisgICAgICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQob3NyRW50cnlCbG9jayk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFs
aXphdGlvbktpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemF0aW9u
RnJvbUlzQ29uc3RydWN0KG1faXNDb25zdHJ1Y3Rvcik7CisgICAgfQorCisgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIENv
ZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiBHZXQg
cmlkIG9mIHRoaXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzY3NworICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CisKKyAgICBzdGF0
aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB2
b2lkIGNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCk7CisKKyAgICB2b2lkIGR1bXBTb3Vy
Y2UoKTsKKyAgICB2b2lkIGR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mKTsKKworICAgIHZvaWQgZHVt
cEJ5dGVjb2RlKCk7CisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mKTsKKyAgICB2
b2lkIGR1bXBCeXRlY29kZSgKKyAgICAgICAgUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCwKKyAgICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29u
c3QgQ2FsbExpbmtJbmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1bXBF
eGNlcHRpb25IYW5kbGVycyhQcmludFN0cmVhbSYpOworICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmVz
KFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICB2b2lkIHByaW50U3RydWN0
dXJlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBp
bnQgb3BlcmFuZCk7CisKKyAgICB2b2lkIGR1bXBNYXRoSUNTdGF0cygpOworCisgICAgYm9vbCBp
c1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIEVDTUFN
b2RlIGVjbWFNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2Rl
IDogTm90U3RyaWN0TW9kZTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0
ZShpbnQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIu
b2Zmc2V0KCkgJiYgIW1faXNTdHJpY3RNb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgICAg
IHJldHVybiBnZXRDb25zdGFudChpbmRleCkuaXNDZWxsKCk7CisKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFy
czsKKyAgICB9CisKKyAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6
OkFueUhhbmRsZXIpOworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQs
IFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgdm9p
ZCByZW1vdmVFeGNlcHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoQ2FsbFNpdGVJbmRleCk7CisgICAg
dW5zaWduZWQgbGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCk7CisgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwKKyAgICAgICAgaW50JiBz
dGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKSBjb25zdDsKKworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldEZyb21D
YWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgpOworCisgICAgdm9pZCBnZXRTdHViSW5mb01hcChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCk7CisgICAgdm9p
ZCBnZXRTdHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KTsKKyAgICAKKyAgICB2b2lkIGdl
dENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZv
TWFwJiByZXN1bHQpOworICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01h
cCYgcmVzdWx0KTsKKworICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBCeVZhbEluZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRCeVZhbEluZm9N
YXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpOworICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOworICAgIEpJVEFkZElDKiBh
ZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJp
dGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSopOwor
ICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqKTsKKyAgICBCYWc8U3RydWN0
dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5m
b3MuYmVnaW4oKTsgfQorICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJ
bmZvRW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KKyAgICAKKyAgICAvLyBPKG4p
IG9wZXJhdGlvbi4gVXNlIGdldFN0dWJJbmZvTWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25seSBp
bnRlbmQgdG8gZ2V0IG9uZQorICAgIC8vIHN0dWIgaW5mby4KKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byogZmluZFN0dWJJbmZvKENvZGVPcmlnaW4pOworCisgICAgQnlWYWxJbmZvKiBhZGRCeVZhbElu
Zm8oKTsKKworICAgIENhbGxMaW5rSW5mbyogYWRkQ2FsbExpbmtJbmZvKCk7CisgICAgQmFnPENh
bGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2Fs
bExpbmtJbmZvcy5iZWdpbigpOyB9CisgICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNh
bGxMaW5rSW5mb3NFbmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KKworICAg
IC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBp
bGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UKKyAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlu
bGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxs
eQorICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBj
b3N0IG9mIGNhbGxpbmcgdGhpcy4KKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0Zv
ckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgLy8gV2Ug
Y2FsbCB0aGlzIHdoZW4gd2Ugd2FudCB0byByZWF0dGVtcHQgY29tcGlsaW5nIHNvbWV0aGluZyB3
aXRoIHRoZSBiYXNlbGluZSBKSVQuIElkZWFsbHkKKyAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdv
dWxkIG5vdCBhZGQgZGF0YSB0byBDb2RlQmxvY2ssIGJ1dCBpbnN0ZWFkIGl0IHdvdWxkIHB1dCBp
dHMgZGF0YSBpbnRvCisgICAgLy8gYSBuZXdseSBjcmVhdGVkIEpJVENvZGUsIHdoaWNoIGNvdWxk
IGJlIHRocm93biBhd2F5IGlmIHdlIGJhaWwgb24gSklUIGNvbXBpbGF0aW9uLiBUaGVuIHdlCisg
ICAgLy8gd291bGQgYmUgYWJsZSB0byBnZXQgcmlkIG9mIHRoaXMgc2lsbHkgZnVuY3Rpb24uCisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkw
NjEKKyAgICB2b2lkIHJlc2V0SklURGF0YSgpOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAg
ICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdm9p
ZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyop
OworICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVy
RnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisg
ICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2Fs
bExpbmtJbmZvKik7CisKKyAgICB2b2lkIHNldEpJVENvZGVNYXAoc3RkOjp1bmlxdWVfcHRyPENv
bXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgIHsKKyAgICAgICAgbV9qaXRDb2RlTWFw
ID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKKyAgICB9CisgICAgQ29tcGFjdEpJVENvZGVNYXAqIGpp
dENvZGVNYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVj
dGlvbiopOworCisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVy
bkFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49
IGluc3RydWN0aW9ucygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygp
LmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0dXJu
QWRkcmVzcykgLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIH0KKworICAgIHR5cGVkZWYg
SlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVjdGlvbjsKKyAgICB0eXBlZGVmIFJlZkNvdW50ZWRBcnJh
eTxJbnN0cnVjdGlvbj4mIFVucGFja2VkSW5zdHJ1Y3Rpb25zOworCisgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7
IH0KKyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJl
dHVybiBtX2luc3RydWN0aW9uczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisK
KyAgICBzaXplX3QgcHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCk7CisKKyAgICBib29sIHVzZXNP
cGNvZGUoT3Bjb2RlSUQpOworCisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorCisgICAgLy8gRXhhY3RseSBlcXVp
dmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29k
ZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCisgICAgQ29kZUJsb2Nr
KiBuZXdSZXBsYWNlbWVudCgpOworICAgIAorICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRy
PEpJVENvZGU+IGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVk
KCkpOworICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNvZGUtPnNp
emUoKSk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRl
ZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0
J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKyAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICB9
CisgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBqaXRDb2RlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXRDb2RlKTsgfQorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2Rl
LmdldCgpOworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgSklUQ29kZTo6
SklUVHlwZSByZXN1bHQgPSBKSVRDb2RlOjpqaXRUeXBlRm9yKGppdENvZGUpOworICAgICAgICBX
VEY6OmxvYWRMb2FkRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWVkZWQuIE9oIHdl
bGwsIHBhcmFub2lhIGlzIGdvb2QuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgYm9vbCBoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUOworICAgIH0KKyAgICAKKyNp
ZiBFTkFCTEUoSklUKQorICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKworICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6Q2FwYWJpbGl0
eUxldmVsPihtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKTsgfQorCisgICAgYm9vbCBoYXNPcHRpbWl6
ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpOworICAgIGJvb2wg
aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklU
VHlwZQorI2VuZGlmCisKKyAgICB2b2lkIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNv
biwgUmVvcHRpbWl6YXRpb25Nb2RlID0gRG9udENvdW50UmVvcHRpbWl6YXRpb24sIGNvbnN0IEZp
cmVEZXRhaWwqID0gbnVsbHB0cik7CisgICAgCisgICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhl
Y3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CisgICAg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJTY3JpcHRFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
anNDYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihtX293bmVyRXhlY3V0YWJsZS5nZXQoKSk7IH0KKwor
ICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KKworICAgIHZvaWQgc2V0VGhpc1Jl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0
aGlzUmVnaXN0ZXI7IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV90aGlzUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQorCisgICAgdm9pZCBzZXRTY29w
ZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHNjb3BlUmVnaXN0ZXIuaXNMb2NhbCgpIHx8ICFzY29wZVJlZ2lzdGVyLmlzVmFsaWQo
KSk7CisgICAgICAgIG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7CisgICAgfQorCisg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsKKyAgICB9CisgICAgCisgICAgQ29kZVR5cGUgY29kZVR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVUeXBlPiht
X2NvZGVUeXBlKTsKKyAgICB9CisKKyAgICBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgcHV0QnlJ
ZENvbnRleHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRXZhbENv
ZGUpCisgICAgICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkRXZhbDsKKyAg
ICAgICAgcmV0dXJuIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZDsKKyAgICB9CisKKyAgICBTb3Vy
Y2VQcm92aWRlciogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KKyAg
ICB1bnNpZ25lZCBzb3VyY2VPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU9mZnNldDsg
fQorICAgIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0OyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7
IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmp1bXBUYXJnZXQoaW5kZXgpOyB9CisKKyAgICBTdHJpbmcgbmFtZUZvclJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzID49
IDApOworICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2
YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQorICAgIHsKKyAg
ICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSAmbV9hcmd1bWVudFZhbHVlUHJvZmlsZXNbYXJn
dW1lbnRJbmRleF07CisgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0g
LTEpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJl
ck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXplKCk7IH0KKyAg
ICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVl
UHJvZmlsZXNbaW5kZXhdOyB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVl
UHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7CisgICAgfQorICAgIFZh
bHVlUHJvZmlsZSogZ2V0RnJvbUFsbFZhbHVlUHJvZmlsZXModW5zaWduZWQgaW5kZXgpCisgICAg
eworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlUHJvZmlsZShpbmRleCAtIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKCkpOworICAgIH0KKworICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxl
KGludCBieXRlY29kZU9mZnNldCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSYXJlQ2FzZVByb2Zp
bGVzKCkgeyByZXR1cm4gbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKTsgfQorICAgIFJhcmVDYXNl
UHJvZmlsZSogcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICB1bnNpZ25lZCByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0
KGludCBieXRlY29kZU9mZnNldCk7CisKKyAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGlu
dCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9m
aWxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNl
TWluaW11bUNvdW50KCk7CisgICAgfQorCisgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQg
Ynl0ZWNvZGVPZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmls
aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHZhbHVl
ID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7
CisgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmlt
dW1Db3VudCgpOworICAgIH0KKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZUZvclBDKEluc3RydWN0aW9uKik7CisKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxG
YXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgfQorICAg
IGNvbnN0IEFycmF5UHJvZmlsZVZlY3RvciYgYXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJy
YXlQcm9maWxlczsgfQorICAgIEFycmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQ
cm9maWxlKiBhZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFy
cmF5UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2Zp
bGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRB
cnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldE9yQWRkQXJyYXlQcm9maWxlKHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisK
KyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0K
KyAgICBIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgUkVMRUFTRV9B
U1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJz
W2luZGV4XTsgfQorCisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5mbygpOyB9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3Jp
Z2lucygpOworICAgIAorICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRo
ZXJlIGhhcyBiZWVuIHNvbWUgaW5saW5pbmcuCisgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCisg
ICAgeworICAgICAgICByZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7
CisgICAgfQorICAgICAgICAKKyAgICBib29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRl
eCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmICghaGFzQ29kZU9yaWdpbnMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGluZGV4LmJpdHMoKSA8IGNvZGVPcmln
aW5zKCkuc2l6ZSgpOworICAgIH0KKworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbihDYWxsU2l0
ZUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXgu
Yml0cygpXTsKKyAgICB9CisKKyAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZH
OjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQobG9ja2Vy
LCB0aGlzLCBzaXRlKTsKKyAgICB9CisKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bG9ja2VyLCBzaXRlKTsKKyAgICB9CisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZy
ZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUobG9ja2Vy
LCBzaXRlKTsKKyAgICB9CisKKyAgICBERkc6OkV4aXRQcm9maWxlJiBleGl0UHJvZmlsZSgpIHsg
cmV0dXJuIG1fZXhpdFByb2ZpbGU7IH0KKworICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUhvbGRlciYgbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlczsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyAgICAvLyBDb25zdGFudCBQb29sCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpICsgbnVtYmVyT2ZERkdJZGVudGlmaWVycygp
OyB9CisgICAgc2l6ZV90IG51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdDsKKyAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3Q7CisjZWxzZQorICAgIHNp
emVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mSWRlbnRpZmllcnMoKTsgfQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihp
bmRleCk7IH0KKyNlbmRpZgorCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50cygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAgICBWZWN0b3I8U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KKyAgICB1
bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYpCisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHYpOwor
ICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRMYXppbHkoKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAg
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6T3RoZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eF07IH0KKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdLmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdl
dCgpOyB9CisgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7IH0KKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAK
KyAgICBSZWdFeHAqIHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5yZWdleHAoaW5kZXgpOyB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50QnVm
ZmVycygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJz
LnNpemUoKTsKKyAgICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIoY29uc3QgVmVj
dG9yPEpTVmFsdWU+JiBidWZmZXIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50
QnVmZmVycy5zaXplKCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFw
cGVuZChidWZmZXIpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICBWZWN0b3I8
SlNWYWx1ZT4mIGNvbnN0YW50QnVmZmVyQXNWZWN0b3IodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5t
X2NvbnN0YW50QnVmZmVyc1tpbmRleF07CisgICAgfQorICAgIEpTVmFsdWUqIGNvbnN0YW50QnVm
ZmVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50QnVmZmVy
QXNWZWN0b3IoaW5kZXgpLmRhdGEoKTsKKyAgICB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3Qg
eyByZXR1cm4gJm1fdm0tPmhlYXA7IH0KKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KKworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbik7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoKQorICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghIW1f
bGl2ZW5lc3NBbmFseXNpcykKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFs
eXNpczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpOworCisgICAgLy8gSnVtcCBUYWJsZXMK
KworICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0K
KyAgICBTaW1wbGVKdW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFNp
bXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5s
YXN0KCk7IH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorICAgIHZvaWQgY2xlYXJTd2l0Y2hKdW1w
VGFibGVzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmNsZWFyKCk7Cisg
ICAgfQorCisgICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuc2l6ZSgpIDogMDsgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFN0cmluZ0p1
bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0Vf
QVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hl
KCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2
YWxDb2RlQ2FjaGU7IH0KKworICAgIGVudW0gU2hyaW5rTW9kZSB7CisgICAgICAgIC8vIFNocmlu
ayBwcmlvciB0byBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSB0aGF0IG1heSBwb2ludCBkaXJlY3Rs
eSBpbnRvIHZlY3RvcnMuCisgICAgICAgIEVhcmx5U2hyaW5rLAorCisgICAgICAgIC8vIFNocmlu
ayBhZnRlciBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSwgYW5kIGFmdGVyIHBvc3NpYmx5IGNyZWF0
aW5nIG5ldyB2ZWN0b3JzCisgICAgICAgIC8vIGFuZCBhcHBlbmRpbmcgdG8gb3RoZXJzLiBBdCB0
aGlzIHRpbWUgaXQgaXMgbm90IHNhZmUgdG8gc2hyaW5rIGNlcnRhaW4gdmVjdG9ycworICAgICAg
ICAvLyBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSB0aGF0IHJl
ZmVyZW5jZXMgdGhlbSBkaXJlY3RseS4KKyAgICAgICAgTGF0ZVNocmluaworICAgIH07CisgICAg
dm9pZCBzaHJpbmtUb0ZpdChTaHJpbmtNb2RlKTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29u
dHJvbGxpbmcgd2hlbiBKSVR0aW5nIGtpY2tzIGluLCBpbiBhIG1peGVkIG1vZGUKKyAgICAvLyBl
eGVjdXRpb24gd29ybGQuCisKKyAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBkb250SklUQW55dGlt
ZVNvb24oKQorICAgIHsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CisgICAgfQorCisgICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0
aHJlc2hvbGQpOworICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICB2b2lkIGppdFNvb24o
KTsKKworICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291
bnRlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
OworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJ1Y3R1cmUqLCBCYWc8TExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2lu
dE1hcDsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwJiBsbGludEdldEJ5SWRXYXRjaHBvaW50
TWFwKCkgeyByZXR1cm4gbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOyB9CisKKyAgICAvLyBG
dW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGlu
LiBUaGlzCisgICAgLy8gY29udHJvbHMgYm90aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVy
IGlzIGludm9rZWQgYW5kIHdoZW4gT1NSCisgICAgLy8gZW50cnkgaGFwcGVucy4gVHdvIHRyaWdn
ZXJzIGV4aXN0OiB0aGUgbG9vcCB0cmlnZ2VyIGFuZCB0aGUgcmV0dXJuCisgICAgLy8gdHJpZ2dl
ci4gSW4gZWl0aGVyIGNhc2UsIHdoZW4gYW4gYWRkaXRpb24gdG8gbV9qaXRFeGVjdXRlQ291bnRl
cgorICAgIC8vIGNhdXNlcyBpdCB0byBiZWNvbWUgbm9uLW5lZ2F0aXZlLCB0aGUgb3B0aW1pemlu
ZyBjb21waWxlciBpcworICAgIC8vIGludm9rZWQuIFRoaXMgaW5jbHVkZXMgYSBmYXN0IGNoZWNr
IHRvIHNlZSBpZiB0aGlzIENvZGVCbG9jayBoYXMKKyAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1p
emVkIChpLmUuIHJlcGxhY2VtZW50KCkgcmV0dXJucyBhIENvZGVCbG9jaworICAgIC8vIHRoYXQg
d2FzIG9wdGltaXplZCB3aXRoIGEgaGlnaGVyIHRpZXIgSklUIHRoYW4gdGhpcyBvbmUpLiBJbiB0
aGUKKyAgICAvLyBjYXNlIG9mIHRoZSBsb29wIHRyaWdnZXIsIGlmIHRoZSBvcHRpbWl6ZWQgY29t
cGlsYXRpb24gc3VjY2VlZHMKKyAgICAvLyAob3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRo
ZSBwYXN0KSB0aGVuIE9TUiBpcyBhdHRlbXB0ZWQgdG8KKyAgICAvLyByZWRpcmVjdCBwcm9ncmFt
IGZsb3cgaW50byB0aGUgb3B0aW1pemVkIGNvZGUuCisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMg
YXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXJzLAorICAgIC8v
IGFuZCBhcmUgdXNlZCBhcyBhIHNpbmdsZSBwb2ludCBhdCB3aGljaCB3ZSBkZWZpbmUgdGhlIGhl
dXJpc3RpY3MKKyAgICAvLyBmb3IgaG93IG11Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBiZWZvcmUg
dGhlIG5leHQgb3B0aW1pemF0aW9uCisgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9j
a3Mgc3RhcnQgb3V0IHdpdGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAorICAgIC8vIGFzIHRoaXMg
aXMgY2FsbGVkIGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KKworICAgIC8vIFdoZW4g
d2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBhCisg
ICAgLy8gcmVvcHRpbWl6YXRpb24uIEJ1dCBlYWNoIHRpbWUsIHdlIGluY3JlYXNlIHRoZSBvcHRp
bWl6YXRpb24gdHJpZ2dlcgorICAgIC8vIHRvIGF2b2lkIHRocmFzaGluZy4KKyAgICBKU19FWFBP
UlRfUFJJVkFURSB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0Owor
ICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlvbigpOworI2lmIEVOQUJMRShKSVQpCisgICAgc3Rh
dGljIHVuc2lnbmVkIG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7
IHJldHVybiBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5u
dW1iZXJPZlNldFJlZ2lzdGVycygpOyB9CisgICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgc2l6ZV90IGNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdD
b21waWxlcygpOworCisgICAgaW50MzJfdCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBj
b25zdDsKKworICAgIGludDMyX3QgYWRqdXN0ZWRDb3VudGVyVmFsdWUoaW50MzJfdCBkZXNpcmVk
VGhyZXNob2xkKTsKKworICAgIGludDMyX3QqIGFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAmbV9qaXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikg
KyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV9hY3RpdmVU
aHJlc2hvbGQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRv
dGFsQ291bnQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1f
dG90YWxDb3VudCk7IH0KKworICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgaml0
RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVDb3VudGVyOyB9CisK
KyAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBt
X29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQorCisgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGlt
aXphdGlvbiB0aHJlc2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlmIG5vdCwKKyAgICAvLyBh
ZGp1c3QgdGhlIGhldXJpc3RpY3MgYWNjb3JkaW5nbHkuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGhy
ZXNob2xkIGhhcworICAgIC8vIGJlZW4gcmVhY2hlZC4KKyAgICBib29sIGNoZWNrSWZPcHRpbWl6
YXRpb25UaHJlc2hvbGRSZWFjaGVkKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhl
IG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcworICAgIC8vIHJhcmVs
eSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCisg
ICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUuCisgICAgdm9pZCBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBv
cHRpbWl6YXRpb24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdAorICAgIC8vIG9wdGlt
aXphdGlvbiB3aWxsIHN0aWxsIGhhcHBlbiBhZnRlciByb3VnaGx5IDJeMjkgaW52b2NhdGlvbnMs
CisgICAgLy8gc28gdGhpcyBpcyByZWFsbHkgbWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFz
IHBvc3NpYmxlLiBUaGlzCisgICAgLy8gaXMgY2FsbGVkIGlmIG9wdGltaXphdGlvbiBmYWlsZWQs
IGFuZCB3ZSBleHBlY3QgaXQgdG8gZmFpbCBpbgorICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4K
KyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisKKyAgICAvLyBDYWxsIHRoaXMg
dG8gcmVpbml0aWFsaXplIHRoZSBjb3VudGVyIHRvIGl0cyBzdGFydGluZyBzdGF0ZSwKKyAgICAv
LyBmb3JjaW5nIGEgd2FybS11cCB0byBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlv
biB0cmlnZ2VyCisgICAgLy8gZmlyZXMuIFRoaXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sg
Y29uc3RydWN0b3IuIEl0IGFsc28KKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMgaWYg
YW4gT1NSIGV4aXQgb2NjdXJyZWQuIE5vdGUgdGhhdAorICAgIC8vIE9TUiBleGl0IGNvZGUgaXMg
Y29kZSBnZW5lcmF0ZWQsIHNvIHRoZSB2YWx1ZSBvZiB0aGUgZXhlY3V0ZQorICAgIC8vIGNvdW50
ZXIgdGhhdCB0aGlzIGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5Lgor
ICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpOworCisgICAgLy8gQ2FsbCB0aGlzIHRvIGZv
cmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgb25seSBhZnRlcgorICAgIC8vIGEg
bG90IG9mIHdhcm0tdXAuCisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworCisg
ICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUg
c29vbiwgYnV0CisgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtl
cyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KKyAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0
aW1pemF0aW9uIG1lYW5zIHRoYXQgYWxsIGNhbGxzIGFyZQorICAgIC8vIHJlbGlua2VkIHRvIHRo
ZSBvcHRpbWl6ZWQgY29kZSwgc28gdGhpcyBvbmx5IGFmZmVjdHMgY2FsbAorICAgIC8vIGZyYW1l
cyB0aGF0IGFyZSBzdGlsbCBleGVjdXRpbmcgdGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJl
CisgICAgLy8gaXMgdHVuZWQgdG8gc3RyaWtlIGEgYmFsYW5jZSBiZXR3ZWVuIHRoZSBjb3N0IG9m
IE9TUiBlbnRyeQorICAgIC8vICh3aGljaCBpcyB0b28gaGlnaCB0byB3YXJyYW50IG1ha2luZyBl
dmVyeSBsb29wIGJhY2sgZWRnZSB0bworICAgIC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBh
bmQgdGhlIGNvc3Qgb2YgZXhlY3V0aW5nIGJhc2VsaW5lCisgICAgLy8gY29kZSAod2hpY2ggaXMg
aGlnaCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YW50IHRvCisgICAgLy8gaGF2
ZSBhIGZ1bGwgd2FybS11cCkuIFRoZSBpbnR1aXRpb24gZm9yIGNhbGxpbmcgdGhpcyBpbnN0ZWFk
IG9mCisgICAgLy8gb3B0aW1pemVOZXh0SW52b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiBy
ZWN1cnNpdmUgZnVuY3Rpb25zCisgICAgLy8gd2l0aCBsb29wcy4gQ29uc2lkZXIgdGhhdCB0aGVy
ZSBtYXkgYmUgTiBjYWxsIGZyYW1lcyBvZiBzb21lCisgICAgLy8gcmVjdXJzaXZlIGZ1bmN0aW9u
LCBmb3IgYSByZWFzb25hYmx5IGxhcmdlIHZhbHVlIG9mIE4uIFRoZSB0b3AKKyAgICAvLyBvbmUg
dHJpZ2dlcnMgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiByZXR1cm5zLCBhbmQgdGhlbiBhbGwgb2YK
KyAgICAvLyB0aGUgb3RoZXJzIHJldHVybi4gV2UgZG9uJ3Qgd2FudCBvcHRpbWl6YXRpb24gdG8g
YmUgdHJpZ2dlcmVkIG9uCisgICAgLy8gZWFjaCByZXR1cm4sIGFzIHRoYXQgd291bGQgYmUgc3Vw
ZXJmbHVvdXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UKKyAgICAvLyB0byB0cmlnZ2VyIG9wdGltaXph
dGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zIGJlY29tZXMgaG90CisgICAgLy8gaW4gdGhl
IGJhc2VsaW5lIGNvZGUuCisgICAgdm9pZCBvcHRpbWl6ZVNvb24oKTsKKworICAgIHZvaWQgZm9y
Y2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpOworCisgICAgdm9pZCBzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1
bHQpOworICAgIAorICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9vc3JFeGl0Q291bnRlcjsgfQorCisgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhp
dENvdW50ZXIrKzsgfQorCisgICAgdWludDMyX3QqIGFkZHJlc3NPZk9TUkV4aXRDb3VudGVyKCkg
eyByZXR1cm4gJm1fb3NyRXhpdENvdW50ZXI7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZPU1JFeGl0Q291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fb3NyRXhpdENvdW50ZXIpOyB9CisKKyAgICB1aW50MzJfdCBhZGp1c3RlZEV4aXRDb3VudFRo
cmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKTsKKyAgICB1aW50MzJfdCBleGl0Q291
bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpOworICAgIHVpbnQzMl90IGV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKKyAgICBib29sIHNob3VsZFJlb3B0
aW1pemVOb3coKTsKKyAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpOworCisg
ICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKKyAgICB2b2lkIHNl
dENhbGxlZVNhdmVSZWdpc3RlcnMoc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0
Pik7CisgICAgCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KCk7IH0KKyNlbHNlIC8v
IE5vIEpJVAorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBzaXplX3QgbGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH07Cisg
ICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkgeyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZE
RkdDb21waWxlcygpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisgICAgYm9vbCBzaG91bGRPcHRp
bWl6ZU5vdygpOworICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsK
KyAgICB2b2lkIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZUFs
bFByZWRpY3Rpb25zKCk7CisKKyAgICB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAg
ICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKKyAgICBib29sIGhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7CisKKyAgICBib29sIGhh
c0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0K
KyAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2Vy
UmVxdWVzdHM7IH0KKworICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3Bv
aW50cyk7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRz
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0gbnVtQnJlYWtwb2lu
dHMpOworICAgICAgICBtX251bUJyZWFrcG9pbnRzIC09IG51bUJyZWFrcG9pbnRzOworICAgIH0K
KworICAgIGVudW0gU3RlcHBpbmdNb2RlIHsKKyAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQs
CisgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJsZWQKKyAgICB9OworICAgIHZvaWQgc2V0U3RlcHBp
bmdNb2RlKFN0ZXBwaW5nTW9kZSk7CisKKyAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygp
CisgICAgeworICAgICAgICBtX3N0ZXBwaW5nTW9kZSA9IFN0ZXBwaW5nTW9kZURpc2FibGVkOwor
ICAgICAgICBtX251bUJyZWFrcG9pbnRzID0gMDsKKyAgICB9CisKKyAgICBib29sIHdhc0NvbXBp
bGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CisgICAgCisgICAgLy8gRklYTUU6
IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJlcnMgcHJpdmF0ZS4KKworICAgIGludCBtX251bUNh
bGxlZUxvY2FsczsKKyAgICBpbnQgbV9udW1WYXJzOworICAgIAorICAgIC8vIFRoaXMgaXMgaW50
ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2lu
ZyBhbnkKKyAgICAvLyBvZiB0aGUgZm9sbG93aW5nIHRvIGhvbGQgdGhlIGxvY2s6CisgICAgLy8K
KyAgICAvLyAtIE1vZGlmeWluZyBhbnkgaW5saW5lIGNhY2hlIGluIHRoaXMgY29kZSBibG9jay4K
KyAgICAvLworICAgIC8vIC0gUXVlcmluZyBhbnkgaW5saW5lIGNhY2hlIGluIHRoaXMgY29kZSBi
bG9jaywgZnJvbSBhIHRocmVhZCBvdGhlciB0aGFuCisgICAgLy8gICB0aGUgbWFpbiB0aHJlYWQu
CisgICAgLy8KKyAgICAvLyBBZGRpdGlvbmFsbHksIGl0J3Mgb25seSBsZWdhbCB0byBtb2RpZnkg
dGhlIGlubGluZSBjYWNoZSBvbiB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gVGhpcyBtZWFucyB0
aGF0IHRoZSBtYWluIHRocmVhZCBjYW4gcXVlcnkgdGhlIGlubGluZSBjYWNoZSB3aXRob3V0Cisg
ICAgLy8gbG9ja2luZy4gVGhpcyBpcyBjcnVjaWFsIHNpbmNlIGV4ZWN1dGluZyB0aGUgaW5saW5l
IGNhY2hlIGlzIGVmZmVjdGl2ZWx5CisgICAgLy8gInF1ZXJ5aW5nIiBpdC4KKyAgICAvLworICAg
IC8vIEFub3RoZXIgZXhjZXB0aW9uIHRvIHRoZSBydWxlcyBpcyB0aGF0IHRoZSBHQyBjYW4gZG8g
d2hhdGV2ZXIgaXQgd2FudHMKKyAgICAvLyB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBiZWNh
dXNlIHRoZSBHQyBpcyBndWFyYW50ZWVkIHRvIHdhaXQgdW50aWwgYW55CisgICAgLy8gY29uY3Vy
cmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZpbmlzaCB3aGF0IHRoZXkncmUgZG9pbmcuCisgICAg
bXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CisKKyAgICBBdG9taWM8Ym9vbD4gbV92
aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CisKKyAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8g
aXQuCisKKyNpZiBFTkFCTEUoSklUKQorICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3Rh
dGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbAorI2VuZGlmCisKKyAgICBib29sIG1fYWxs
VHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA6IDE7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9u
IGV2ZXJ5IEdDLgorCisgICAgYm9vbCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbiA6IDE7CisgICAg
Ym9vbCBtX2RpZEZhaWxGVExDb21waWxhdGlvbiA6IDE7CisgICAgYm9vbCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwgOiAxOworICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICBib29s
IG1faXNTdHJpY3RNb2RlIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvZGVUeXBlIDogMjsgLy8gQ29k
ZVR5cGUKKworICAgIC8vIEludGVybmFsIG1ldGhvZHMgZm9yIHVzZSBieSB2YWxpZGF0aW9uIGNv
ZGUuIEl0IHdvdWxkIGJlIHByaXZhdGUgaWYgaXQgd2Fzbid0CisgICAgLy8gZm9yIHRoZSBmYWN0
IHRoYXQgd2UgdXNlIGl0IGZyb20gYW5vbnltb3VzIG5hbWVzcGFjZXMuCisgICAgdm9pZCBiZWdp
blZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7CisKKyAgICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxIYW5k
bGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQg
Zm9yIGxhcmdlIGFycmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxWZWN0b3I8SlNWYWx1ZT4+
IG1fY29uc3RhbnRCdWZmZXJzOworCisgICAgICAgIC8vIEp1bXAgVGFibGVzCisgICAgICAgIFZl
Y3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgVmVjdG9y
PFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIEV2
YWxDb2RlQ2FjaGUgbV9ldmFsQ29kZUNhY2hlOworICAgIH07CisKKyAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uSGFuZGxlcnMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpCisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmNsZWFyKCk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBlbmRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVy
KQorICAgIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyAvLyBXZSBtYXkg
YmUgaGFuZGxpbmcgdGhlIGV4Y2VwdGlvbiBvZiBhbiBpbmxpbmVkIGNhbGwgZnJhbWUuCisgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOworICAg
IH0KKworICAgIENhbGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4
KENhbGxTaXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSk7CisKKyNpZiBFTkFCTEUoSklUKQorICAg
IHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2lu
TWFwPiYmKTsKKyAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOworI2Vu
ZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsK
KyAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKworI2lmIEVOQUJM
RShERkdfSklUKQorICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOworI2Vsc2UKKyAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2tTZXQ7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMmIGxpdmVuZXNzQW5hbHlzaXNTbG93KCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBzcGVj
aWFsT1NSRW50cnlCbG9ja09yTnVsbCgpOworICAgIAorICAgIHZvaWQgbm90aWNlSW5jb21pbmdD
YWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUpOworICAgIAorICAgIGRvdWJsZSBvcHRpbWl6YXRp
b25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CisKKyAgICB2
b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBj
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOworCisgICAgdm9pZCByZXBsYWNlQ29u
c3RhbnQoaW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4
IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXpl
KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdmFsdWUpOworICAg
IH0KKworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwKKyAg
ICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKKworICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1l
KGludCByKSBjb25zdDsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0
OworICAgIHZvaWQgcHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxv
Y2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBw
cmludEJpbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludENvbmRpdGlv
bmFsSnVtcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9p
ZCBwcmludEdldEJ5SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJik7CisgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQ
cmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAm
KTsKKyAgICBlbnVtIENhY2hlRHVtcE1vZGUgeyBEdW1wQ2FjaGVzLCBEb250RHVtcENhY2hlcyB9
OworICAgIHZvaWQgcHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2Rl
LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKKyAg
ICB2b2lkIHByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0
aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1
YkluZm9NYXAmKTsKKyAgICB2b2lkIHByaW50TG9jYXRpb25BbmRPcChQcmludFN0cmVhbSYsIEV4
ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciog
b3ApOworICAgIHZvaWQgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKFByaW50U3Ry
ZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBj
b25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpOworCisgICAgdm9pZCBiZWdpbkR1bXBQcm9maWxp
bmcoUHJpbnRTdHJlYW0mLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1
bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50
U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7
CisgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
bmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAg
dm9pZCBkdW1wQXJpdGhQcm9maWxlKFByaW50U3RyZWFtJiwgQXJpdGhQcm9maWxlKiwgYm9vbCYg
aGFzUHJpbnRlZFByb2ZpbGluZyk7CisKKyAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoKTsK
KyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCk7CisgICAgYm9vbCBz
aG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCk7CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVUcmFu
c2l0aW9ucyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZp
c2l0b3ImKTsKKyAgICAgICAgCisgICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJik7
CisKKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTaW5jZUNyZWF0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzPigKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6
Om5vdygpIC0gbV9jcmVhdGlvblRpbWUpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlUmFyZURh
dGFJZk5lY2Vzc2FyeSgpCisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAg
ICAgICBtX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisK
KyAgICB2b2lkIGluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxl
cihSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+Jik7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5s
aW5rZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOworICAgIGludCBtX251bVBhcmFtZXRlcnM7
CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25lZCBtX2RlYnVnZ2VyUmVxdWVzdHM7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50
IDogMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fc3RlcHBpbmdNb2RlIDogMTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1fbnVtQnJlYWtwb2ludHMgOiAzMDsKKyAgICAgICAgfTsKKyAgICB9Owor
ICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFibGU7CisgICAg
Vk0qIG1fdm07CisKKyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rp
b25zOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9zY29wZVJlZ2lzdGVyOworICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7
CisKKyAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlOworICAgIHVuc2lnbmVkIG1f
c291cmNlT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0OworCisg
ICAgUmVmQ291bnRlZEFycmF5PExMSW50Q2FsbExpbmtJbmZvPiBtX2xsaW50Q2FsbExpbmtJbmZv
czsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAg
U3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CisgICAg
UmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAg
IEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CisgICAgQmFnPEpJVEFkZElDPiBt
X2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4g
bV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKKyAgICBCYWc8QnlWYWxJbmZv
PiBtX2J5VmFsSW5mb3M7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwor
ICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8
UG9seW1vcnBoaWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxs
Tm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
Q1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0
aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCisgICAgLy8gZm9yIERGRyBjb2Rl
IGJsb2Nrcy4KKyAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CisgICAgQ29tcHJl
c3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVzOworI2VuZGlmCisgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4gbV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXM7CisgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4gbV92YWx1
ZVByb2ZpbGVzOworICAgIFNlZ21lbnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFy
ZUNhc2VQcm9maWxlczsKKyAgICBSZWZDb3VudGVkQXJyYXk8QXJyYXlBbGxvY2F0aW9uUHJvZmls
ZT4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlczsKKyAgICBBcnJheVByb2ZpbGVWZWN0b3IgbV9h
cnJheVByb2ZpbGVzOworICAgIFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZT4gbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXM7CisKKyAgICAvLyBDb25zdGFudCBQb29sCisg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSwgUmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vu
a25vd24pOworICAgIC8vIFRPRE86IFRoaXMgY291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91
bmxpbmtlZENvZGVCbG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11dGF0ZXMKKyAgICAvLyBpdCwg
c28gd2UncmUgc3R1Y2sgd2l0aCBpdCBmb3Igbm93LgorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAgUmVm
Q291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9u
RGVjbHM7CisgICAgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFi
bGU+PiBtX2Z1bmN0aW9uRXhwcnM7CisKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOworICAgIAorICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXI7CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRl
Q291bnRlcjsKKyAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOworICAgIHVpbnQxNl90IG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOworICAgIHVpbnQxNl90IG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CisKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50
IG1fY3JlYXRpb25UaW1lOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcz4gbV9saXZlbmVzc0FuYWx5c2lzOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVE
YXRhPiBtX3JhcmVEYXRhOworCisgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXI7CisgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXI7Cit9OworCisvLyBQcm9ncmFtIGNvZGUgaXMgbm90IG1hcmtlZCBieSBhbnkg
ZnVuY3Rpb24sIHNvIHdlIG1ha2UgdGhlIGdsb2JhbCBvYmplY3QKKy8vIHJlc3BvbnNpYmxlIGZv
ciBtYXJraW5nIGl0LgorCitjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2Nr
IHsKKyAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworcHJv
dGVjdGVkOgorICAgIEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDog
Q29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgewor
ICAgIH0KKworICAgIEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0
TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBz
b3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKwor
Y2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgeworcHVibGlj
OgorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRC
bG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgeworICAgICAgICBQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1D
b2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZt
LT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywK
KyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxv
Y2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFi
bGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNv
bHVtbk9mZnNldCk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVy
RXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVy
KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpT
U2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwg
dW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307CisKK2NsYXNzIE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAg
IHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAg
IEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICAgICAgTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQo
KSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3Zp
ZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisg
ICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZp
cnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVj
dHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVBy
b3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Cit9OworCitjbGFzcyBFdmFsQ29kZUJsb2NrIDog
cHVibGljIEdsb2JhbENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2Rl
QmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRXZhbENvZGVCbG9j
ayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhl
cikKKyAgICB7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgRXZh
bENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJz
ZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBD
b3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0K
KworICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAg
ICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0KKyAgICB1bnNp
Z25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+bnVt
VmFyaWFibGVzKCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgRXZhbENvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2sm
IG90aGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFy
c2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisgICAgICAgIAorICAgIEV2YWxDb2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAg
ICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCitw
cml2YXRlOgorICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2Vk
Q29kZUJsb2NrKCkpOyB9Cit9OworCitjbGFzcyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBD
b2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlv
bkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0
aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsCisgICAgICAgIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29k
ZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0t
PmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2Nr
JiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVu
bGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBX
ZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5
cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFdl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdl
YkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5
Q29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2
bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIHsKKyAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAg
ICAgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxP
YmplY3QpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJBc3Nl
bWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisg
ICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0
YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworfTsKKyNlbmRpZgorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6
cihpbnQgaW5kZXgpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxv
Y2soKTsKKyAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKKyAgICByZXR1cm4gdGhpc1tpbmRleF07Cit9CisK
K2lubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCit7Cisg
ICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKK30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3Rh
dGU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgIHJldHVybiB0aGlzW2luZGV4XTsKK30K
KworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
IHJlZykKK3sKKyAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOworfQorCitpbmxp
bmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCkKK3sKKyAg
ICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9p
ZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQor
eworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6
IHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2Nr
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgRXZhbEV4ZWN1dGFibGVUeXBlOiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJs
ZSo+KHRoaXMpLT5tX2V2YWxDb2RlQmxvY2suZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2Nr
LT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5
cGU6IHsKKyAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7
CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7CisgICAg
ICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpz
Q2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2Rl
QmxvY2suZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVC
bG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgorSlNPYmpl
Y3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24oVk0mIHZtLCBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJsb2NrKQoreworICAgIGlmIChoYXNKSVRDb2RlRm9y
KGtpbmQpKSB7CisgICAgICAgIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEV2YWxF
eGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8
Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsK
KyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBQcm9ncmFtRXhl
Y3V0YWJsZT46OnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENv
ZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7
CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpz
Q2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+
Y29kZUJsb2NrKCkpOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5
cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJs
b2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlz
KS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCh2bSwgZnVuY3Rpb24sIHNjb3BlLCBr
aW5kLCByZXN1bHRDb2RlQmxvY2spOworfQorCisjZGVmaW5lIENPREVCTE9DS19MT0dfRVZFTlQo
Y29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCisgICAgKGNvZGVCbG9jay0+dm0oKS0+bG9n
RXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9DU3RyaW5nIGRldGFp
bHM7IH0pKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5oCShyZXZpc2lvbiAyMDgyMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTE3OCArMjksMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJBcnJheVByb2ZpbGUuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKLSNpbmNsdWRl
ICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCi0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0jaW5j
bHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKLSNpbmNsdWRlICJDb2Rl
QmxvY2tIYXNoLmgiCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIkNvZGVUeXBl
LmgiCi0jaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50
SklUTG9jay5oIgotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCi0jaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKLSNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
LmgiCi0jaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKLSNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgot
I2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJKSVRNYXRoSUNGb3J3YXJkcy5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKLSNpbmNsdWRlICJM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLSNpbmNsdWRl
ICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgotI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgiCi0jaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKLSNpbmNsdWRl
ICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIgotI2luY2x1
ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCi0j
aW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKLSNpbmNsdWRlIDx3dGYvQmFnLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKLWNsYXNzIENvZGVCbG9ja1NldDsKLWNsYXNz
IEV4ZWNTdGF0ZTsKLWNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7Ci1jbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7Ci1jbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKLWNsYXNzIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0KLWVudW0gY2xhc3MgQWNjZXNz
VHlwZSA6IGludDhfdDsKLQotc3RydWN0IEFyaXRoUHJvZmlsZTsKLQotdHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7Ci0KLWVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVv
cHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKLQotY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIEpTQ2VsbCB7Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBmcmllbmQgY2xh
c3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwotICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIGNsYXNzIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCi0g
ICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9Owot
Ci0gICAgY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIgewotICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSBDb3B5UGFyc2Vk
QmxvY2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayhW
TSosIFN0cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0g
ICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpOwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1
Y3R1cmUqLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxP
YmplY3QqKTsKLSNlbmRpZgotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJz
ZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
LCBKU1Njb3BlKik7Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9i
YWxPYmplY3QqKTsKLSNlbmRpZgotCi0gICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBt
X2dsb2JhbE9iamVjdDsKLQotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxv
Y2soKTsKLQotICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLmdldCgpOyB9Ci0KLSAgICBDU3RyaW5nIGluZmVycmVk
TmFtZSgpIGNvbnN0OwotICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0OwotICAgIGJvb2wg
aGFzSGFzaCgpIGNvbnN0OwotICAgIGJvb2wgaXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0Owot
ICAgIENTdHJpbmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0OwotICAgIENTdHJpbmcg
c291cmNlQ29kZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5vdCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJj
ZSB3ZSBwYXJzZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3MgbGlrZSBwcmVmaXggdGhlIHNvdXJjZSBm
b3IgYSBmdW5jdGlvbiB3aXRoIGEgcmVpZmllZCBzaWduYXR1cmUuCi0gICAgQ1N0cmluZyBzb3Vy
Y2VDb2RlT25PbmVMaW5lKCkgY29uc3Q7IC8vIEFzIHNvdXJjZUNvZGVGb3JUb29scygpLCBidXQg
cmVwbGFjZXMgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgIHZv
aWQgZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYsIEpJVENvZGU6OkpJVFR5cGUpIGNv
bnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwotCi0gICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRl
cnM7IH0KLSAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKLQotICAgIGlu
dCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQot
Ci0gICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1l
dGVyczsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQotCi0g
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
ZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGl2
ZShWTSYsIENvZGVCbG9jayopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCi0gICAgewotICAg
ICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAg
VmVjdG9yPENvZGVCbG9jayosIDQ+IGNvZGVCbG9ja3M7Ci0gICAgICAgIGNvZGVCbG9ja3MuYXBw
ZW5kKHRoaXMpOwotCi0gICAgICAgIHdoaWxlICghY29kZUJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY3VycmVudENvZGVCbG9jayA9IGNvZGVCbG9ja3MudGFrZUxh
c3QoKTsKLSAgICAgICAgICAgIGYoY3VycmVudENvZGVCbG9jayk7Ci0KLSAgICAgICAgICAgIGlm
IChDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChhbHRlcm5hdGl2ZSk7Ci0gICAg
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrID0gY3VycmVudENvZGVCbG9jay0+
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2tz
LmFwcGVuZChvc3JFbnRyeUJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9y
KTsKLSAgICB9Ci0KLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAg
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3Ci0gICAgQ29kZUJsb2NrKiBiYXNl
bGluZVZlcnNpb24oKTsKLQotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFdl
YWtseShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxs
ZWQoKTsKLQotICAgIHZvaWQgZHVtcFNvdXJjZSgpOwotICAgIHZvaWQgZHVtcFNvdXJjZShQcmlu
dFN0cmVhbSYpOwotCi0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoKTsKLSAgICB2b2lkIGR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYpOwotICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAotICAgICAgICBQcmlu
dFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICBjb25zdCBTdHViSW5m
b01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJ
bmZvTWFwKCkpOwotICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50U3RyZWFtJik7
Ci0gICAgdm9pZCBwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlv
biopOwotICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKLQotICAgIHZvaWQgZHVtcE1h
dGhJQ1N0YXRzKCk7Ci0KLSAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTdHJpY3RNb2RlOyB9Ci0gICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBp
c1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9pc1N0cmljdE1vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0Nl
bGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCi0gICAgewotICAgICAg
ICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOwotICAgIH0KLQotICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVk
SGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgSGFuZGxlckluZm8q
IGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKLSAgICB2b2lkIHJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxs
U2l0ZShDYWxsU2l0ZUluZGV4KTsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2b2lkIGV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBp
bnQmIGRpdm90LAotICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5z
aWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwotCi0gICAgT3B0aW9uYWw8dW5z
aWduZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7Ci0K
LSAgICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHVi
SW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiBy
ZXN1bHQpOwotICAgIAotICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRDYWxs
TGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOwotCi0gICAgdm9pZCBnZXRCeVZh
bEluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0
KTsKLSAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCk7Ci0gICAg
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNj
ZXNzVHlwZSk7Ci0gICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSopOwotICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEFyaXRo
UHJvZmlsZSopOwotICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZv
QmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9Ci0gICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5l
bmQoKTsgfQotICAgIAotICAgIC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAo
KSB1bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0byBnZXQgb25lCi0gICAgLy8gc3R1YiBp
bmZvLgotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7Ci0K
LSAgICBCeVZhbEluZm8qIGFkZEJ5VmFsSW5mbygpOwotCi0gICAgQ2FsbExpbmtJbmZvKiBhZGRD
YWxsTGlua0luZm8oKTsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJ
bmZvc0JlZ2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8
Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2Fs
bExpbmtJbmZvcy5lbmQoKTsgfQotCi0gICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2Fs
bCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQotICAg
IC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50
IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5Ci0gICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlu
a0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxM
aW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KTsKLSAgICAKLSAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0
ZW1wdCBjb21waWxpbmcgc29tZXRoaW5nIHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQot
ICAgIC8vIHRoZSBiYXNlbGluZSBKSVQgd291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywg
YnV0IGluc3RlYWQgaXQgd291bGQgcHV0IGl0cyBkYXRhIGludG8KLSAgICAvLyBhIG5ld2x5IGNy
ZWF0ZWQgSklUQ29kZSwgd2hpY2ggY291bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBK
SVQgY29tcGlsYXRpb24uIFRoZW4gd2UKLSAgICAvLyB3b3VsZCBiZSBhYmxlIHRvIGdldCByaWQg
b2YgdGhpcyBzaWxseSBmdW5jdGlvbi4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTA2MQotICAgIHZvaWQgcmVzZXRKSVREYXRhKCk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwot
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBj
YWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9y
cGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwot
I2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0
YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQotICAgIHZvaWQgc2V0SklU
Q29kZU1hcChzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCi0g
ICAgewotICAgICAgICBtX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBDb21wYWN0SklUQ29kZU1hcCogaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9qaXRDb2RlTWFwLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjbGVh
ckxMSW50R2V0QnlJZENhY2hlKEluc3RydWN0aW9uKik7Ci0KLSAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1
cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW5zdHJ1Y3Rpb24qPihyZXR1cm5BZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2lu
KCk7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOwot
ICAgIHR5cGVkZWYgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVj
dGlvbnM7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9Ci0gICAgY29u
c3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLQotICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29k
ZVNpemUoKTsKLQotICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7Ci0KLSAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgp
OyB9Ci0KLSAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSkKLSAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7Ci0gICAgCi0gICAg
dm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci0gICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoY29kZS0+c2l6ZSgpKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8g
VGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRv
IHNvbWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgotICAgICAg
ICBtX2ppdENvZGUgPSBjb2RlOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENv
ZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IGppdENvZGVP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdENvZGUpOyB9
Ci0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEpJ
VENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOwotICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIHJlc3VsdCA9IEpJVENvZGU6OmppdFR5
cGVGb3Ioaml0Q29kZSk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOyAvLyBUaGlzIHBy
b2JhYmx5IGlzbid0IG5lZWRlZC4gT2ggd2VsbCwgcGFyYW5vaWEgaXMgZ29vZC4KLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5n
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQ7Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgQ29kZUJsb2NrKiBy
ZXBsYWNlbWVudCgpOwotCi0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxp
dHlMZXZlbCgpOwotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOwot
ICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUp
OyB9Ci0KLSAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUg
dHlwZVRvUmVwbGFjZSk7Ci0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0
aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCi0jZW5kaWYKLQotICAgIHZvaWQgamV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291
bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsKLSAgICAKLSAg
ICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCk7IH0KLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lclNjcmlwdEV4
ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKTsgfQotCi0gICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQotCi0gICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQotICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQotCi0g
ICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZh
bCgpOyB9Ci0KLSAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkg
fHwgIXNjb3BlUmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgbV9zY29wZVJlZ2lzdGVyID0g
c2NvcGVSZWdpc3RlcjsKLSAgICB9Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
cigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOwotICAgIH0K
LSAgICAKLSAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5cGUpOwotICAgIH0KLQotICAgIFB1dFBy
b3BlcnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dEJ5SWRFdmFsOwotICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQ
dXRCeUlkOwotICAgIH0KLQotICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9Ci0gICAgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7IH0KLQotICAg
IHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQotICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+anVtcFRhcmdldChpbmRleCk7
IH0KLQotICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQotICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX251bVBhcmFtZXRlcnMgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50
VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1l
dGVycykpOwotICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwot
ICAgIH0KLSAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgpCi0gICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZt
X2FyZ3VtZW50VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdC0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92
YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGlu
dCBpbmRleCkgeyByZXR1cm4gJm1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KLSAgICBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7
Ci0gICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zm
c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKTsKLSAgICB9Ci0gICAgVmFsdWVQcm9maWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9m
aWxlcyh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IG51bWJlck9m
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoaW5kZXgpOwotICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlKGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgfQotCi0gICAgUmFyZUNhc2VQ
cm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmls
ZXMuc2l6ZSgpOyB9Ci0gICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJv
ZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIGJv
b2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0
aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBi
b29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKLSAgICB7Ci0gICAgICAg
IGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlv
bnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7Ci0gICAgfQotCi0gICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKLQot
ICAgIGJvb2wgY291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCk7Ci0K
LSAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5UHJvZmlsZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgQXJyYXlQcm9maWxlVmVjdG9yJiBhcnJh
eVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzOyB9Ci0gICAgQXJyYXlQcm9maWxl
KiBhZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZSh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBB
cnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogZ2V0
T3JBZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgLy8gRXhj
ZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKLQotICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQotICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5k
bGVyKGludCBpbmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Ci0KLSAgICBib29sIGhhc0V4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7
IH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4mIGNvZGVPcmlnaW5zKCk7Ci0gICAgCi0gICAgLy8gSGF2aW5nIGNv
ZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KLSAg
ICBib29sIGhhc0NvZGVPcmlnaW5zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGJvb2wgY2Fu
R2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCFo
YXNDb2RlT3JpZ2lucygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gaW5kZXguYml0cygpIDwgY29kZU9yaWdpbnMoKS5zaXplKCk7Ci0gICAgfQotCi0gICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCldOwotICAgIH0KLQotICAgIGJvb2wgYWRk
RnJlcXVlbnRFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7Ci0g
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVy
biBtX2V4aXRQcm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOwotICAgIH0KLQotICAgIGJv
b2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwotICAgIH0KLSAgICBib29s
IGhhc0V4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwotICAgIH0KLQotICAgIERGRzo6RXhp
dFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQotCi0gICAg
Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVzOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIC8vIENvbnN0YW50
IFBvb2wKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCkg
KyBudW1iZXJPZkRGR0lkZW50aWZpZXJzKCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZERkdJZGVu
dGlmaWVycygpIGNvbnN0OwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGlu
ZGV4KSBjb25zdDsKLSNlbHNlCi0gICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyB9Ci0gICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsgfQotI2VuZGlmCi0KLSAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzKCkgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyczsgfQotICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5r
bm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgdGhpcywgdik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudExh
emlseSgpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJy
aWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0K
LSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBpbnQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4
cHJzW2luZGV4XS5nZXQoKTsgfQotICAgIAotICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KLQotICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9y
YXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgIH0KLSAgICB1bnNpZ25lZCBh
ZGRDb25zdGFudEJ1ZmZlcihjb25zdCBWZWN0b3I8SlNWYWx1ZT4mIGJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKLSAgICAgICAgbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBz
aXplOwotICAgIH0KLQotICAgIFZlY3RvcjxKU1ZhbHVlPiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rv
cih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKLSAg
ICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKLSAgICB9
Ci0gICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29uc3RhbnRCdWZmZXJBc1ZlY3RvcihpbmRleCkuZGF0YSgpOwotICAgIH0K
LQotICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiAmbV92bS0+aGVhcDsgfQotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQo
KTsgfQotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsK
LQotICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpCi0gICAg
ewotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgICAgICAgICAgaWYgKCEhbV9saXZlbmVzc0FuYWx5c2lzKQotICAgICAgICAgICAg
ICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHZhbGlkYXRl
KCk7Ci0KLSAgICAvLyBKdW1wIFRhYmxlcwotCi0gICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNo
SnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJl
RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQotICAgIFNpbXBsZUp1bXBUYWJsZSYg
c3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9
Ci0gICAgdm9pZCBjbGVhclN3aXRjaEp1bXBUYWJsZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9Ci0gICAgU3RyaW5nSnVt
cFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJp
bmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMubGFzdCgpOyB9Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLQotICAgIEV2
YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQotCi0gICAgZW51bSBTaHJp
bmtNb2RlIHsKLSAgICAgICAgLy8gU2hyaW5rIHByaW9yIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBj
b2RlIHRoYXQgbWF5IHBvaW50IGRpcmVjdGx5IGludG8gdmVjdG9ycy4KLSAgICAgICAgRWFybHlT
aHJpbmssCi0KLSAgICAgICAgLy8gU2hyaW5rIGFmdGVyIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LCBhbmQgYWZ0ZXIgcG9zc2libHkgY3JlYXRpbmcgbmV3IHZlY3RvcnMKLSAgICAgICAgLy8gYW5k
IGFwcGVuZGluZyB0byBvdGhlcnMuIEF0IHRoaXMgdGltZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJp
bmsgY2VydGFpbiB2ZWN0b3JzCi0gICAgICAgIC8vIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5l
cmF0ZWQgbWFjaGluZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGVtIGRpcmVjdGx5LgotICAgICAg
ICBMYXRlU2hyaW5rCi0gICAgfTsKLSAgICB2b2lkIHNocmlua1RvRml0KFNocmlua01vZGUpOwot
Ci0gICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIEpJVHRpbmcga2lja3MgaW4s
IGluIGEgbWl4ZWQgbW9kZQotICAgIC8vIGV4ZWN1dGlvbiB3b3JsZC4KLQotICAgIGJvb2wgY2hl
Y2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCi0gICAgewotICAgICAgICBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKLSAgICB9Ci0KLSAgICBpbnQzMl90
IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldh
cm1VcCgpOwotICAgIHZvaWQgaml0U29vbigpOwotCi0gICAgY29uc3QgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cnVjdHVyZSosIEJhZzxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwotICAgIFN0cnVjdHVyZVdhdGNocG9pbnRN
YXAmIGxsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAoKSB7IHJldHVybiBtX2xsaW50R2V0QnlJZFdh
dGNocG9pbnRNYXA7IH0KLQotICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0
aWVyZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMKLSAgICAvLyBjb250cm9scyBib3RoIHdo
ZW4gdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKLSAgICAv
LyBlbnRyeSBoYXBwZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5k
IHRoZSByZXR1cm4KLSAgICAvLyB0cmlnZ2VyLiBJbiBlaXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRp
dGlvbiB0byBtX2ppdEV4ZWN1dGVDb3VudGVyCi0gICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBu
b24tbmVnYXRpdmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzCi0gICAgLy8gaW52b2tlZC4g
VGhpcyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcwot
ICAgIC8vIGFscmVhZHkgYmVlbiBvcHRpbWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5z
IGEgQ29kZUJsb2NrCi0gICAgLy8gdGhhdCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdoZXIgdGll
ciBKSVQgdGhhbiB0aGlzIG9uZSkuIEluIHRoZQotICAgIC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJp
Z2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcwotICAgIC8vIChvciBo
YXMgYWxyZWFkeSBzdWNjZWVkZWQgaW4gdGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0
bwotICAgIC8vIHJlZGlyZWN0IHByb2dyYW0gZmxvdyBpbnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4K
LQotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRp
bWl6YXRpb24gdHJpZ2dlcnMsCi0gICAgLy8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50
IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUgaGV1cmlzdGljcwotICAgIC8vIGZvciBob3cgbXVjaCB3
YXJtLXVwIGlzIG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24KLSAgICAvLyB0
cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVy
V2FybVVwKCksCi0gICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNv
bnN0cnVjdG9yLgotCi0gICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9u
IGZhaWx1cmVzLCB3ZSB0cmlnZ2VyIGEKLSAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2gg
dGltZSwgd2UgaW5jcmVhc2UgdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VyCi0gICAgLy8gdG8gYXZv
aWQgdGhyYXNoaW5nLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIFJlZ2lzdGVyU2V0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7IH0KLSAgICBz
dGF0aWMgc2l6ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsKLSAgICBzaXplX3QgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0K
LSAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCk7Ci0KLSAgICBpbnQzMl90IGNvZGVU
eXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0OwotCi0gICAgaW50MzJfdCBhZGp1c3RlZENv
dW50ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOwotCi0gICAgaW50MzJfdCogYWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2ppdEV4
ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIsIG1fY291bnRlcik7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0KLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV90b3RhbENvdW50KTsgfQotCi0gICAgY29uc3QgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyJiBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KLQotICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9Ci0K
LSAgICAvLyBDaGVjayBpZiB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBoYXMgYmVlbiByZWFj
aGVkLCBhbmQgaWYgbm90LAotICAgIC8vIGFkanVzdCB0aGUgaGV1cmlzdGljcyBhY2NvcmRpbmds
eS4gUmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgaGFzCi0gICAgLy8gYmVlbiByZWFjaGVk
LgotICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKTsKLQotICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBm
aXJlLiBUaGlzIGlzCi0gICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmln
Z2VycyBhcmUgdHlwaWNhbGx5IG1vcmUKLSAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcg
YmFzZWxpbmUgY29kZS4KLSAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKLQotICAg
IC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fp
bi4gTm90ZSB0aGF0Ci0gICAgLy8gb3B0aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVy
IHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKLSAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFu
dCB0byBkZWxheSB0aGF0IGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMKLSAgICAvLyBpcyBjYWxs
ZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCi0g
ICAgLy8gdGhlIGZ1dHVyZSBhcyB3ZWxsLgotICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8g
aXRzIHN0YXJ0aW5nIHN0YXRlLAotICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKLSAgICAvLyBmaXJlcy4gVGhpcyBp
cyBjYWxsZWQgaW4gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4gSXQgYWxzbwotICAgIC8vIG1h
a2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBpZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0
Ci0gICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28gdGhlIHZhbHVlIG9m
IHRoZSBleGVjdXRlCi0gICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMg
YWxzbyBhdmFpbGFibGUgZGlyZWN0bHkuCi0gICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0KLSAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8g
ZmlyZSBvbmx5IGFmdGVyCi0gICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KLSAgICB2b2lkIG9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCk7Ci0KLSAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0
aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKLSAgICAvLyBub3QgbmVjZXNzYXJp
bHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgotICAgIC8v
IHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMg
YXJlCi0gICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkg
YWZmZWN0cyBjYWxsCi0gICAgLy8gZnJhbWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlz
IENvZGVCbG9jay4gVGhlIHZhbHVlIGhlcmUKLSAgICAvLyBpcyB0dW5lZCB0byBzdHJpa2UgYSBi
YWxhbmNlIGJldHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVudHJ5Ci0gICAgLy8gKHdoaWNoIGlzIHRv
byBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdlIHRvCi0gICAgLy8g
dHJpZ2dlciBPU1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxp
bmUKLSAgICAvLyBjb2RlICh3aGljaCBpcyBoaWdoIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vz
c2FyaWx5IHdhbnQgdG8KLSAgICAvLyBoYXZlIGEgZnVsbCB3YXJtLXVwKS4gVGhlIGludHVpdGlv
biBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKLSAgICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCkgaXMgZm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMKLSAgICAvLyB3aXRo
IGxvb3BzLiBDb25zaWRlciB0aGF0IHRoZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUK
LSAgICAvLyByZWN1cnNpdmUgZnVuY3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUg
b2YgTi4gVGhlIHRvcAotICAgIC8vIG9uZSB0cmlnZ2VycyBvcHRpbWl6YXRpb24sIGFuZCB0aGVu
IHJldHVybnMsIGFuZCB0aGVuIGFsbCBvZgotICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBk
b24ndCB3YW50IG9wdGltaXphdGlvbiB0byBiZSB0cmlnZ2VyZWQgb24KLSAgICAvLyBlYWNoIHJl
dHVybiwgYXMgdGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQot
ICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMg
YmVjb21lcyBob3QKLSAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KLSAgICB2b2lkIG9wdGlt
aXplU29vbigpOwotCi0gICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVu
dGx5KCk7Ci0KLSAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7Ci0gICAgCi0gICAgdWludDMyX3Qgb3NyRXhp
dENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9Ci0KLSAgICB2b2lk
IGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9Ci0KLSAgICB1aW50MzJfdCog
YWRkcmVzc09mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiAmbV9vc3JFeGl0Q291bnRlcjsgfQot
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9vc3JFeGl0Q291bnRlcik7IH0KLQotICAgIHVp
bnQzMl90IGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hv
bGQpOwotICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7
Ci0gICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9v
cCgpOwotICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpOwotICAgIGJvb2wgc2hvdWxkUmVv
cHRpbWl6ZUZyb21Mb29wTm93KCk7Ci0KLSAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQpOwotICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1
ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKLSAgICAKLSAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJl
Z2lzdGVycy5nZXQoKTsgfQotI2Vsc2UgLy8gTm8gSklUCi0gICAgc3RhdGljIHVuc2lnbmVkIG51
bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9Ci0g
ICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCkgeyByZXR1cm4gMDsgfTsKLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7
IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQotI2Vu
ZGlmCi0KLSAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxW
YWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0
aW9ucygpOwotICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLQotICAgIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudCgpOwotICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQoKTsKLQot
ICAgIGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWdu
ZWQgY29sdW1uKTsKLQotICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQotICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQotCi0gICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCi0gICAgewotICAgICAgICBBU1NFUlQobV9udW1C
cmVha3BvaW50cyA+PSBudW1CcmVha3BvaW50cyk7Ci0gICAgICAgIG1fbnVtQnJlYWtwb2ludHMg
LT0gbnVtQnJlYWtwb2ludHM7Ci0gICAgfQotCi0gICAgZW51bSBTdGVwcGluZ01vZGUgewotICAg
ICAgICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKLSAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAot
ICAgIH07Ci0gICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKLQotICAgIHZv
aWQgY2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCkKLSAgICB7Ci0gICAgICAgIG1fc3RlcHBpbmdNb2Rl
ID0gU3RlcHBpbmdNb2RlRGlzYWJsZWQ7Ci0gICAgICAgIG1fbnVtQnJlYWtwb2ludHMgPSAwOwot
ICAgIH0KLQotICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
KCk7IH0KLSAgICAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBw
cml2YXRlLgotCi0gICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOwotICAgIGludCBtX251bVZhcnM7
Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVz
cG9uc2liaWxpdHkgb2YgYW55b25lIGRvaW5nIGFueQotICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcg
dG8gaG9sZCB0aGUgbG9jazoKLSAgICAvLwotICAgIC8vIC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUg
Y2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLgotICAgIC8vCi0gICAgLy8gLSBRdWVyaW5nIGFueSBp
bmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4K
LSAgICAvLyAgIHRoZSBtYWluIHRocmVhZC4KLSAgICAvLwotICAgIC8vIEFkZGl0aW9uYWxseSwg
aXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hlIG9uIHRoZSBtYWluCi0g
ICAgLy8gdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0
aGUgaW5saW5lIGNhY2hlIHdpdGhvdXQKLSAgICAvLyBsb2NraW5nLiBUaGlzIGlzIGNydWNpYWwg
c2luY2UgZXhlY3V0aW5nIHRoZSBpbmxpbmUgY2FjaGUgaXMgZWZmZWN0aXZlbHkKLSAgICAvLyAi
cXVlcnlpbmciIGl0LgotICAgIC8vCi0gICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1
bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cwotICAgIC8vIHdpdGhv
dXQgaG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2Fp
dCB1bnRpbCBhbnkKLSAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNo
IHdoYXQgdGhleSdyZSBkb2luZy4KLSAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9j
azsKLQotICAgIEF0b21pYzxib29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKLQotICAg
IGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2Ug
dGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgdW5z
aWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVs
Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkIDogMTsg
Ly8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCi0KLSAgICBib29sIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uIDogMTsKLSAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDog
MTsKLSAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7Ci0gICAgYm9vbCBtX2lz
Q29uc3RydWN0b3IgOiAxOwotICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVuc2ln
bmVkIG1fY29kZVR5cGUgOiAyOyAvLyBDb2RlVHlwZQotCi0gICAgLy8gSW50ZXJuYWwgbWV0aG9k
cyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3
YXNuJ3QKLSAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMg
bmFtZXNwYWNlcy4KLSAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLQotICAgIHN0
cnVjdCBSYXJlRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKLSAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwot
Ci0gICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKLSAgICAg
ICAgVmVjdG9yPFZlY3RvcjxKU1ZhbHVlPj4gbV9jb25zdGFudEJ1ZmZlcnM7Ci0KLSAgICAgICAg
Ly8gSnVtcCBUYWJsZXMKLSAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXM7Ci0KLSAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7Ci0g
ICAgfTsKLQotICAgIHZvaWQgY2xlYXJFeGNlcHRpb25IYW5kbGVycygpCi0gICAgewotICAgICAg
ICBpZiAobV9yYXJlRGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIo
Y29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7IC8vIFdlIG1heSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFu
IGlubGluZWQgY2FsbCBmcmFtZS4KLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5hcHBlbmQoaGFuZGxlcik7Ci0gICAgfQotCi0gICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRl
KTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwotICAgIE9wdGlvbmFsPENvZGVPcmln
aW4+IGZpbmRQQyh2b2lkKiBwYyk7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgZmlu
YWxpemVMTEludElubGluZUNhY2hlcygpOwotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElu
bGluZUNhY2hlcygpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgdm9pZCB0YWxseUZyZXF1
ZW50RXhpdFNpdGVzKCk7Ci0jZWxzZQotICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygp
IHsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsK
LQotICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
LSAgICAKLSAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7Ci0gICAg
Ci0gICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSk7Ci0g
ICAgCi0gICAgZG91YmxlIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKLQot
ICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzKTsKLQotICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bik7Ci0KLSAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYm
IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0g
ICAgICAgIFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2lu
LCBjb25zdCBJbnN0cnVjdGlvbiomLAotICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHVi
SW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwot
Ci0gICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0OwotICAgIENTdHJpbmcgY29u
c3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7Ci0gICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNv
bnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9w
KTsKLSAgICB2b2lkIHByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRl
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomKTsKLSAgICB2b2lk
IHByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxv
Y2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOwotICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1
bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07Ci0gICAgdm9pZCBwcmludENhbGxPcChQcmludFN0
cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29u
c3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYpOwotICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJl
YW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0
IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFt
JiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOwotICAgIHZvaWQgcHJpbnRMb2Nh
dGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJ
bnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7Ci0gICAgdm9pZCBwcmludExvY2F0aW9uT3BB
bmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7Ci0K
LSAgICB2b2lkIGJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwotICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgdm9p
ZCBkdW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBi
b29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUo
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBo
YXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJl
YW0mLCBBcml0aFByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLQotICAgIGJv
b2wgc2hvdWxkVmlzaXRTdHJvbmdseSgpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dl
YWtSZWZlcmVuY2UoKTsKLSAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKTsKLSAg
ICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCBkZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYpOwotICAgICAgICAKLSAgICB2b2lkIHN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0T1NS
RXhpdFRhcmdldHMoU2xvdFZpc2l0b3ImKTsKLQotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgdGltZVNpbmNlQ3JlYXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25v
OjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAotICAgICAgICAgICAg
c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2NyZWF0aW9uVGltZSk7Ci0gICAg
fQotCi0gICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJhcmVEYXRhPigpOwotICAgIH0KLQotICAgIHZvaWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5k
YXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4m
KTsKLQotICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7
Ci0gICAgaW50IG1fbnVtUGFyYW1ldGVyczsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVk
IG1fZGVidWdnZXJSZXF1ZXN0czsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgOiAxOwotICAgICAgICAgICAgdW5zaWduZWQgbV9z
dGVwcGluZ01vZGUgOiAxOwotICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6
IDMwOwotICAgICAgICB9OwotICAgIH07Ci0gICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNl
PiBtX293bmVyRXhlY3V0YWJsZTsKLSAgICBWTSogbV92bTsKLQotICAgIFJlZkNvdW50ZWRBcnJh
eTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhp
c1JlZ2lzdGVyOwotICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAgbXV0
YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKLQotICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4g
bV9zb3VyY2U7Ci0gICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9m
aXJzdExpbmVDb2x1bW5PZmZzZXQ7Ci0KLSAgICBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlu
a0luZm8+IG1fbGxpbnRDYWxsTGlua0luZm9zOwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTElu
dENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBt
X2luY29taW5nTExJbnRDYWxsczsKLSAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRH
ZXRCeUlkV2F0Y2hwb2ludE1hcDsKLSAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwotI2lm
IEVOQUJMRShKSVQpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBt
X2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJ
bmZvczsKLSAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAgIEJhZzxKSVRNdWxJQz4gbV9t
dWxJQ3M7Ci0gICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICBCYWc8SklUU3ViSUM+IG1f
c3ViSUNzOwotICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKLSAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5r
SW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxz
OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bHM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3Jp
Z2luTWFwOwotI2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBt
X2ppdENvZGVNYXA7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gVGhpcyBpcyByZWxldmFu
dCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUg
YmxvY2sKLSAgICAvLyBmb3IgREZHIGNvZGUgYmxvY2tzLgotICAgIERGRzo6RXhpdFByb2ZpbGUg
bV9leGl0UHJvZmlsZTsKLSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xk
ZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7Ci0jZW5kaWYKLSAgICBSZWZDb3VudGVkQXJy
YXk8VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlczsKLSAgICBSZWZDb3VudGVk
QXJyYXk8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7Ci0gICAgU2VnbWVudGVkVmVjdG9y
PFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVzOwotICAgIFJlZkNvdW50ZWRB
cnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzOwot
ICAgIEFycmF5UHJvZmlsZVZlY3RvciBtX2FycmF5UHJvZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFy
cmF5PE9iamVjdEFsbG9jYXRpb25Qcm9maWxlPiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlczsK
LQotICAgIC8vIENvbnN0YW50IFBvb2wKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0
ZXIpID09IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3Nh
bWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXJfVW5rbm93bik7Ci0gICAgLy8gVE9ETzogVGhpcyBjb3Vs
ZCBqdXN0IGJlIGEgcG9pbnRlciB0byBtX3VubGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRo
ZSBERkcgbXV0YXRlcwotICAgIC8vIGl0LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cu
Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsK
LSAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsKLSAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0
aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKLSAgICBSZWZDb3VudGVkQXJyYXk8V3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKLQotICAgIFdy
aXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7Ci0gICAgCi0gICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKLQotICAgIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwotICAgIHVpbnQzMl90IG1fb3NyRXhp
dENvdW50ZXI7Ci0gICAgdWludDE2X3QgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7Ci0gICAg
dWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKLQotICAgIHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVhdGlvblRpbWU7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzQW5hbHlzaXM7Ci0K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0KLSAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKLSAgICBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKLX07Ci0KLS8vIFByb2dyYW0g
Y29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFs
IG9iamVjdAotLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCi0KLWNsYXNzIEdsb2JhbENv
ZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7
Ci0gICAgREVDTEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29k
ZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENv
ZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQotICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGlj
IEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sg
QmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhl
cikKLSAgICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAg
ICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCkKLSAgICB7Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQot
ICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBz
b3VyY2VQcm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQcm9ncmFt
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAg
IFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
Ci0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwotfTsKLQotY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9i
YWxDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7
Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayYgb3RoZXIpCi0gICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZt
LT5oZWFwKSkKLSAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1
bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpCi0gICAgewotICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFw
KSkKLSAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0g
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0K
LQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQot
ICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ss
IG90aGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLX07
Ci0KLWNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsK
LQotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2
bS0+aGVhcCkpCi0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZh
bENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICB7Ci0gICAgICAg
IEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZh
bENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0t
PmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJp
YWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZh
cmlhYmxlKGluZGV4KTsgfQotICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVu
bGlua2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQotICAgIAotcHJpdmF0ZToK
LSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJz
ZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0K
LSAgICAgICAgCi0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
LCBzb3VyY2VQcm92aWRlciwgMCwgMSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5r
ZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KLX07Ci0KIGNsYXNzIEZ1
bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBDb2RlQmxvY2sgQmFzZTsKQEAgLTEyNDMsMTMzICs3NSw0IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci1jbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotcHVibGlj
OgotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAg
c3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIFdlYkFz
c2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdl
YkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBXZWJBc3NlbWJseUNv
ZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5o
ZWFwKSkKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1i
bHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxl
LCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5
UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBD
b2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0g
ICAgfQotCi0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93
bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLSNlbmRpZgotCi1pbmxpbmUgUmVnaXN0ZXImIEV4
ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlz
LT5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZj
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICByZXR1cm4gdGhpc1tpbmRl
eF07Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCi17Ci0gICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5saW5lIFJlZ2lzdGVy
JiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIHJldHVybiB0aGlzW2lu
ZGV4XTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKLXsKLSAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOwot
fQotCi1pbmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
KCkKLXsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBm
dW5jdG9yKQotewotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBQcm9ncmFtRXhlY3V0
YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nh
c3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3Jh
bUNvZGVCbG9jay5nZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVk
Q29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGNhc2UgRXZhbEV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFs
RXhlY3V0YWJsZSo+KHRoaXMpLT5tX2V2YWxDb2RlQmxvY2suZ2V0KCkpKQotICAgICAgICAgICAg
Y29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4o
ZnVuY3RvcikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZ1bmN0aW9uRXhl
Y3V0YWJsZVR5cGU6IHsKLSAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29k
ZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2Rl
QmxvY2soZik7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0
PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkK
LSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBl
OiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVC
bG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVBy
b2dyYW1Db2RlQmxvY2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVs
YXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEV4ZWN1dGFibGVUeXBl
PgotSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24oVk0mIHZt
LCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJsb2NrKQotewotICAgIGlmIChoYXNK
SVRDb2RlRm9yKGtpbmQpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5
cGUsIEV2YWxFeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sg
PSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPmNvZGVC
bG9jaygpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBQ
cm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0g
anNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2Rl
QmxvY2soKSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdENvZGVC
bG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKS0+Y29kZUJsb2NrKCkpOwotICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhl
Y3V0YWJsZVR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAgICAgcmVz
dWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPih0aGlzKS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCh2bSwgZnVuY3Rpb24s
IHNjb3BlLCBraW5kLCByZXN1bHRDb2RlQmxvY2spOwotfQotCi0jZGVmaW5lIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCi0gICAgKGNvZGVCbG9jay0+
dm0oKS0+bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9DU3Ry
aW5nIGRldGFpbHM7IH0pKQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIw
ODIyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oOjIw
ODIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJCeVZhbEluZm8uaCIKKyNpbmNsdWRl
ICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5j
bHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tIYXNoLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvZGVUeXBl
LmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKKyNpbmNsdWRlICJDb25jdXJyZW50
SklUTG9jay5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKKyNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
LmgiCisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgor
I2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUNGb3J3YXJkcy5oIgorI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAi
SnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRl
ICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIgorI2luY2x1
ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCisj
aW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJy
YXkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczsKK2NsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTTW9k
dWxlRW52aXJvbm1lbnQ7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcDsKK2NsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OworY2xhc3MgU3RydWN0
dXJlU3R1YkluZm87CisKK2VudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKKworc3RydWN0
IEFyaXRoUHJvZmlsZTsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1YkluZm9NYXA7CisKK2VudW0g
UmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRp
bWl6YXRpb24gfTsKKworY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKKworICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMg
SlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisgICAgICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworICAgICAg
ICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB9
OworCitwdWJsaWM6CisgICAgZW51bSBDb3B5UGFyc2VkQmxvY2tUYWcgeyBDb3B5UGFyc2VkQmxv
Y2sgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvcHlQYXJz
ZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CisgICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0
dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNl
T2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKKyNlbmRpZgorCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBv
dGhlcik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKik7CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKKyNlbmRpZgorCisg
ICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKKworcHVibGlj
OgorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKKworICAgIFVubGlua2VkQ29k
ZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LmdldCgpOyB9CisKKyAgICBDU3RyaW5nIGluZmVycmVkTmFtZSgpIGNvbnN0OworICAgIENvZGVC
bG9ja0hhc2ggaGFzaCgpIGNvbnN0OworICAgIGJvb2wgaGFzSGFzaCgpIGNvbnN0OworICAgIGJv
b2wgaXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0OworICAgIENTdHJpbmcgaGFzaEFzU3RyaW5n
SWZQb3NzaWJsZSgpIGNvbnN0OworICAgIENTdHJpbmcgc291cmNlQ29kZUZvclRvb2xzKCkgY29u
c3Q7IC8vIE5vdCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJjZSB3ZSBwYXJzZWQ7IHRoaXMgd2lsbCBk
byB0aGluZ3MgbGlrZSBwcmVmaXggdGhlIHNvdXJjZSBmb3IgYSBmdW5jdGlvbiB3aXRoIGEgcmVp
ZmllZCBzaWduYXR1cmUuCisgICAgQ1N0cmluZyBzb3VyY2VDb2RlT25PbmVMaW5lKCkgY29uc3Q7
IC8vIEFzIHNvdXJjZUNvZGVGb3JUb29scygpLCBidXQgcmVwbGFjZXMgYWxsIHdoaXRlc3BhY2Ug
cnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgIHZvaWQgZHVtcEFzc3VtaW5nSklUVHlwZShQ
cmludFN0cmVhbSYsIEpJVENvZGU6OkpJVFR5cGUpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgaW50IG51bVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KKyAgICB2b2lkIHNldE51bVBh
cmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKKworICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25z
dCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQorCisgICAgaW50KiBhZGRyZXNzT2ZOdW1Q
YXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQorCisgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUu
Z2V0KCkpOyB9CisgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShWTSYsIENvZGVCbG9jayopOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxv
Y2soRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgVmVjdG9yPENvZGVCbG9jayosIDQ+IGNv
ZGVCbG9ja3M7CisgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKHRoaXMpOworCisgICAgICAgIHdo
aWxlICghY29kZUJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY3Vy
cmVudENvZGVCbG9jayA9IGNvZGVCbG9ja3MudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGYoY3Vy
cmVudENvZGVCbG9jayk7CisKKyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIGFsdGVybmF0aXZl
ID0gY3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICBjb2Rl
QmxvY2tzLmFwcGVuZChhbHRlcm5hdGl2ZSk7CisgICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBv
c3JFbnRyeUJsb2NrID0gY3VycmVudENvZGVCbG9jay0+c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51
bGwoKSkKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChvc3JFbnRyeUJsb2NrKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNp
YWxpemF0aW9uS2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3BlY2lhbGl6YXRp
b25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsKKyAgICB9CisKKyAgICBDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgCisgICAgLy8gRklYTUU6IEdl
dCByaWQgb2YgdGhpcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzNjc3CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKTsKKworICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtseShTbG90VmlzaXRvciYpOworICAg
IHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKTsKKworICAgIHZvaWQgZHVtcFNv
dXJjZSgpOworICAgIHZvaWQgZHVtcFNvdXJjZShQcmludFN0cmVhbSYpOworCisgICAgdm9pZCBk
dW1wQnl0ZWNvZGUoKTsKKyAgICB2b2lkIGR1bXBCeXRlY29kZShQcmludFN0cmVhbSYpOworICAg
IHZvaWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmludFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LAorICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBj
b25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOworICAgIHZvaWQgZHVt
cEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50U3RyZWFtJik7CisgICAgdm9pZCBwcmludFN0cnVjdHVy
ZXMoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiopOworICAgIHZvaWQgcHJpbnRTdHJ1
Y3R1cmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBJbnN0cnVjdGlvbios
IGludCBvcGVyYW5kKTsKKworICAgIHZvaWQgZHVtcE1hdGhJQ1N0YXRzKCk7CisKKyAgICBib29s
IGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RNb2RlOyB9CisgICAgRUNN
QU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0cmljdE1vZGUoKSA/IFN0cmljdE1v
ZGUgOiBOb3RTdHJpY3RNb2RlOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRp
YXRlKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA9PSBtX3RoaXNSZWdpc3Rl
ci5vZmZzZXQoKSAmJiAhbV9pc1N0cmljdE1vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQorICAgICAgICAg
ICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0
ZXJJbmRleChpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggPj0gbV9udW1W
YXJzOworICAgIH0KKworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxl
cjo6QW55SGFuZGxlcik7CisgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNpZ25l
ZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAgICB2
b2lkIHJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4KTsKKyAg
ICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpOworICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2Rl
T2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAorICAgICAgICBpbnQm
IHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBj
b2x1bW4pIGNvbnN0OworCisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJv
bUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7CisKKyAgICB2b2lkIGdldFN0dWJJbmZvTWFw
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KTsKKyAgICB2
b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpOworICAgIAorICAgIHZvaWQg
Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0lu
Zm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZv
TWFwJiByZXN1bHQpOworCisgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldEJ5VmFsSW5m
b01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCk7CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7CisgICAgSklUQWRkSUMq
IGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhB
cml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKik7
CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSopOworICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7IHJldHVybiBtX3N0dWJJ
bmZvcy5iZWdpbigpOyB9CisgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1
YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQorICAgIAorICAgIC8vIE8o
bikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1bmxlc3MgeW91IHJlYWxseSBvbmx5
IGludGVuZCB0byBnZXQgb25lCisgICAgLy8gc3R1YiBpbmZvLgorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7CisKKyAgICBCeVZhbEluZm8qIGFkZEJ5VmFs
SW5mbygpOworCisgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0luZm8oKTsKKyAgICBCYWc8
Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0JlZ2luKCkgeyByZXR1cm4gbV9j
YWxsTGlua0luZm9zLmJlZ2luKCk7IH0KKyAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3Ig
Y2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5lbmQoKTsgfQorCisg
ICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29t
cGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQorICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4g
aW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVh
bGx5CisgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhl
IGNvc3Qgb2YgY2FsbGluZyB0aGlzLgorICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZv
Rm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICAvLyBX
ZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0ZW1wdCBjb21waWxpbmcgc29tZXRoaW5n
IHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQorICAgIC8vIHRoZSBiYXNlbGluZSBKSVQg
d291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywgYnV0IGluc3RlYWQgaXQgd291bGQgcHV0
IGl0cyBkYXRhIGludG8KKyAgICAvLyBhIG5ld2x5IGNyZWF0ZWQgSklUQ29kZSwgd2hpY2ggY291
bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBKSVQgY29tcGlsYXRpb24uIFRoZW4gd2UK
KyAgICAvLyB3b3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBzaWxseSBmdW5jdGlvbi4K
KyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
OTA2MQorICAgIHZvaWQgcmVzZXRKSVREYXRhKCk7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwor
ICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICB2
b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZv
Kik7CisgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisK
KyAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRD
YWxsTGlua0luZm8qKTsKKworICAgIHZvaWQgc2V0SklUQ29kZU1hcChzdGQ6OnVuaXF1ZV9wdHI8
Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisgICAgeworICAgICAgICBtX2ppdENvZGVN
YXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOworICAgIH0KKyAgICBDb21wYWN0SklUQ29kZU1hcCog
aml0Q29kZU1hcCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0QnlJZENhY2hlKEluc3Ry
dWN0aW9uKik7CisKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0cnVjdGlvbiogcmV0
dXJuQWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFkZHJlc3Mg
Pj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25z
KCkuZW5kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihyZXR1
cm5BZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgfQorCisgICAgdHlwZWRl
ZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOworICAgIHR5cGVkZWYgUmVmQ291bnRlZEFy
cmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7CisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUo
KTsgfQorICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsg
cmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEluc3Ry
dWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0K
KworICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKTsKKworICAgIGJvb2wgdXNl
c09wY29kZShPcGNvZGVJRCk7CisKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CisKKyAgICAvLyBFeGFjdGx5IGVx
dWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRD
b2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkKKyAgICBDb2RlQmxv
Y2sqIG5ld1JlcGxhY2VtZW50KCk7CisgICAgCisgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJy
ZWQoKSk7CisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoY29kZS0+
c2l6ZSgpKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgbmVl
ZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNvbWV0aGluZyBzaW1pbGFyLCBidXQg
aXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorICAgICAgICBtX2ppdENvZGUgPSBjb2RlOworICAg
IH0KKyAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGppdENvZGVPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdENvZGUpOyB9CisgICAgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBtX2ppdENv
ZGUuZ2V0KCk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBKSVRDb2Rl
OjpKSVRUeXBlIHJlc3VsdCA9IEpJVENvZGU6OmppdFR5cGVGb3Ioaml0Q29kZSk7CisgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lZWRlZC4gT2gg
d2VsbCwgcGFyYW5vaWEgaXMgZ29vZC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7CisgICAgfQorICAgIAor
I2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworCisgICAgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpDYXBhYmls
aXR5TGV2ZWw+KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUpOyB9CisKKyAgICBib29sIGhhc09wdGlt
aXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9v
bCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBK
SVRUeXBlCisjZW5kaWYKKworICAgIHZvaWQgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVh
c29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291bnRSZW9wdGltaXphdGlvbiwgY29uc3Qg
RmlyZURldGFpbCogPSBudWxscHRyKTsKKyAgICAKKyAgICBFeGVjdXRhYmxlQmFzZSogb3duZXJF
eGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KKyAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVy
biBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3duZXJFeGVjdXRhYmxlLmdldCgpKTsgfQor
CisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorCisgICAgdm9pZCBzZXRUaGlz
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBtX3RoaXNSZWdpc3RlciA9
IHRoaXNSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIoKSBjb25z
dCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQorCisgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZhbCgpOyB9CisKKyAgICB2b2lkIHNldFNj
b3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpCisgICAgeworICAgICAg
ICBBU1NFUlQoc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkgfHwgIXNjb3BlUmVnaXN0ZXIuaXNWYWxp
ZCgpKTsKKyAgICAgICAgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsKKyAgICB9CisK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOworICAgIH0KKyAgICAKKyAgICBDb2RlVHlwZSBjb2Rl
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZVR5cGU+
KG1fY29kZVR5cGUpOworICAgIH0KKworICAgIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBwdXRC
eUlkQ29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBFdmFs
Q29kZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWRFdmFsOwor
ICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkOworICAgIH0KKworICAgIFNv
dXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQor
ICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0
OyB9CisgICAgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7IH0KKworICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJn
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSnVtcFRhcmdldHMo
KTsgfQorICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+anVtcFRhcmdldChpbmRleCk7IH0KKworICAgIFN0cmluZyBuYW1lRm9y
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnMg
Pj0gMCk7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykpOworICAgICAgICByZXR1cm4g
bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOworICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUq
IHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgpCisgICAgewor
ICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZtX2FyZ3VtZW50VmFsdWVQcm9maWxlc1th
cmd1bWVudEluZGV4XTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCA9
PSAtMSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQor
ICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fdmFs
dWVQcm9maWxlc1tpbmRleF07IH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsKKyAgICB9CisgICAg
VmFsdWVQcm9maWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkp
CisgICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaW5kZXgpOworICAg
ICAgICByZXR1cm4gdmFsdWVQcm9maWxlKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSk7CisgICAgfQorCisgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRSYXJlQ2FzZVByb2Zp
bGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlJhcmVDYXNlUHJv
ZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpOyB9CisgICAgUmFyZUNh
c2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVP
ZmZzZXQpOworICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZz
ZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2Uo
aW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nh
c2VNaW5pbXVtQ291bnQoKTsKKyAgICB9CisKKyAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGlu
dCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9m
aWxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWlu
aW11bUNvdW50KCk7CisgICAgfQorCisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKKworICAgIGJvb2wgY291bGRUYWtlU3BlY2lh
bEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFy
cmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyB9Cisg
ICAgY29uc3QgQXJyYXlQcm9maWxlVmVjdG9yJiBhcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9h
cnJheVByb2ZpbGVzOyB9CisgICAgQXJyYXlQcm9maWxlKiBhZGRBcnJheVByb2ZpbGUoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJh
eVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAg
QXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJv
ZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBnZXRPckFk
ZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQK
KworICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsg
fQorICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBSRUxFQVNF
X0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnNbaW5kZXhdOyB9CisKKyAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KKworI2lmIEVOQUJMRShERkdfSklU
KQorICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGNvZGVP
cmlnaW5zKCk7CisgICAgCisgICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQg
dGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KKyAgICBib29sIGhhc0NvZGVPcmlnaW5zKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wgY2FuR2V0Q29kZU9yaWdpbihDYWxsU2l0ZUlu
ZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXNDb2RlT3JpZ2lucygpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaW5kZXguYml0cygpIDwgY29kZU9y
aWdpbnMoKS5zaXplKCk7CisgICAgfQorCisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxT
aXRlSW5kZXggaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRl
eC5iaXRzKCldOworICAgIH0KKworICAgIGJvb2wgYWRkRnJlcXVlbnRFeGl0U2l0ZShjb25zdCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCisgICAgeworICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChsb2Nr
ZXIsIHRoaXMsIHNpdGUpOworICAgIH0KKworICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNp
dGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShsb2NrZXIsIHNpdGUpOworICAgIH0KKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IERGRzo6
RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2Nr
ZXIsIHNpdGUpOworICAgIH0KKworICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkg
eyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQorCisgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFs
dWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworICAgIC8vIENvbnN0YW50IFBvb2wKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBudW1iZXJPZkRGR0lkZW50aWZpZXJz
KCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0OworICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdDsKKyNlbHNlCisgICAg
c2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVy
KGluZGV4KTsgfQorI2VuZGlmCisKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQorICAgIFZlY3RvcjxT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorICAg
IHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7
CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudExhemlseSgpCisgICAgeworICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAg
ICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsgfQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KKyAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHBy
KGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQorICAg
IAorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRC
dWZmZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnMuc2l6ZSgpOworICAgIH0KKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudEJ1ZmZlcihjb25zdCBW
ZWN0b3I8SlNWYWx1ZT4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRCdWZmZXJzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMu
YXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIFZlY3Rv
cjxKU1ZhbHVlPiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9CisgICAgSlNWYWx1ZSogY29uc3RhbnRC
dWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RhbnRCdWZm
ZXJBc1ZlY3RvcihpbmRleCkuZGF0YSgpOworICAgIH0KKworICAgIEhlYXAqIGhlYXAoKSBjb25z
dCB7IHJldHVybiAmbV92bS0+aGVhcDsgfQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQorCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsKKworICAgIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpCisgICAgeworICAgICAgICB7CisgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgaWYgKCEh
bV9saXZlbmVzc0FuYWx5c2lzKQorICAgICAgICAgICAgICAgIHJldHVybiAqbV9saXZlbmVzc0Fu
YWx5c2lzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXZlbmVzc0FuYWx5c2lzU2xvdygp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCk7CisKKyAgICAvLyBKdW1wIFRhYmxl
cworCisgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsg
fQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQo
U2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVz
Lmxhc3QoKTsgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisgICAgdm9pZCBjbGVhclN3aXRjaEp1
bXBUYWJsZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuY2xlYXIoKTsK
KyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5zaXplKCkgOiAwOyB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgU3RyaW5n
SnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgUkVMRUFT
RV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIEV2YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2Fj
aGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
ZXZhbENvZGVDYWNoZTsgfQorCisgICAgZW51bSBTaHJpbmtNb2RlIHsKKyAgICAgICAgLy8gU2hy
aW5rIHByaW9yIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIHRoYXQgbWF5IHBvaW50IGRpcmVj
dGx5IGludG8gdmVjdG9ycy4KKyAgICAgICAgRWFybHlTaHJpbmssCisKKyAgICAgICAgLy8gU2hy
aW5rIGFmdGVyIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlLCBhbmQgYWZ0ZXIgcG9zc2libHkgY3Jl
YXRpbmcgbmV3IHZlY3RvcnMKKyAgICAgICAgLy8gYW5kIGFwcGVuZGluZyB0byBvdGhlcnMuIEF0
IHRoaXMgdGltZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJpbmsgY2VydGFpbiB2ZWN0b3JzCisgICAg
ICAgIC8vIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIHRoYXQg
cmVmZXJlbmNlcyB0aGVtIGRpcmVjdGx5LgorICAgICAgICBMYXRlU2hyaW5rCisgICAgfTsKKyAg
ICB2b2lkIHNocmlua1RvRml0KFNocmlua01vZGUpOworCisgICAgLy8gRnVuY3Rpb25zIGZvciBj
b250cm9sbGluZyB3aGVuIEpJVHRpbmcga2lja3MgaW4sIGluIGEgbWl4ZWQgbW9kZQorICAgIC8v
IGV4ZWN1dGlvbiB3b3JsZC4KKworICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhy
ZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGRvbnRKSVRBbnl0
aW1lU29vbigpCisgICAgeworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRl
ZmluaXRlbHkoKTsKKyAgICB9CisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90
IHRocmVzaG9sZCk7CisgICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOworICAgIHZvaWQgaml0U29v
bigpOworCisgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVD
b3VudGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CisgICAgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVyZSosIEJhZzxMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBv
aW50TWFwOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAmIGxsaW50R2V0QnlJZFdhdGNocG9p
bnRNYXAoKSB7IHJldHVybiBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7IH0KKworICAgIC8v
IEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRpb24ga2lja3Mg
aW4uIFRoaXMKKyAgICAvLyBjb250cm9scyBib3RoIHdoZW4gdGhlIG9wdGltaXppbmcgY29tcGls
ZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKKyAgICAvLyBlbnRyeSBoYXBwZW5zLiBUd28gdHJp
Z2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1cm4KKyAgICAvLyB0cmln
Z2VyLiBJbiBlaXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRpdGlvbiB0byBtX2ppdEV4ZWN1dGVDb3Vu
dGVyCisgICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBub24tbmVnYXRpdmUsIHRoZSBvcHRpbWl6
aW5nIGNvbXBpbGVyIGlzCisgICAgLy8gaW52b2tlZC4gVGhpcyBpbmNsdWRlcyBhIGZhc3QgY2hl
Y2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcworICAgIC8vIGFscmVhZHkgYmVlbiBvcHRp
bWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5zIGEgQ29kZUJsb2NrCisgICAgLy8gdGhh
dCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdoZXIgdGllciBKSVQgdGhhbiB0aGlzIG9uZSkuIElu
IHRoZQorICAgIC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJpZ2dlciwgaWYgdGhlIG9wdGltaXplZCBj
b21waWxhdGlvbiBzdWNjZWVkcworICAgIC8vIChvciBoYXMgYWxyZWFkeSBzdWNjZWVkZWQgaW4g
dGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0bworICAgIC8vIHJlZGlyZWN0IHByb2dy
YW0gZmxvdyBpbnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4KKworICAgIC8vIFRoZXNlIGZ1bmN0aW9u
cyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMsCisgICAg
Ly8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUg
aGV1cmlzdGljcworICAgIC8vIGZvciBob3cgbXVjaCB3YXJtLXVwIGlzIG1hbmRhdGVkIGJlZm9y
ZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24KKyAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJs
b2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCisgICAgLy8gYXMgdGhp
cyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgorCisgICAgLy8gV2hl
biB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzLCB3ZSB0cmlnZ2VyIGEK
KyAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2UgaW5jcmVhc2UgdGhlIG9w
dGltaXphdGlvbiB0cmlnZ2VyCisgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3Q7
CisgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
IHsgcmV0dXJuIFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IGxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKKyAgICBzaXplX3QgY2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRG
R0NvbXBpbGVzKCk7CisKKyAgICBpbnQzMl90IGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigp
IGNvbnN0OworCisgICAgaW50MzJfdCBhZGp1c3RlZENvdW50ZXJWYWx1ZShpbnQzMl90IGRlc2ly
ZWRUaHJlc2hvbGQpOworCisgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2ppdEV4ZWN1dGVDb3VudGVyLm1fY291bnRlcjsK
KyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVy
KSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1fY291bnRlcik7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNo
b2xkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291
bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2
ZVRocmVzaG9sZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9u
VG90YWxDb3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhl
Y3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwg
bV90b3RhbENvdW50KTsgfQorCisgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBq
aXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXI7IH0K
KworICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9CisKKyAgICAvLyBDaGVjayBpZiB0aGUgb3B0
aW1pemF0aW9uIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkLCBhbmQgaWYgbm90LAorICAgIC8v
IGFkanVzdCB0aGUgaGV1cmlzdGljcyBhY2NvcmRpbmdseS4gUmV0dXJucyB0cnVlIGlmIHRoZSB0
aHJlc2hvbGQgaGFzCisgICAgLy8gYmVlbiByZWFjaGVkLgorICAgIGJvb2wgY2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQoKTsKKworICAgIC8vIENhbGwgdGhpcyB0byBmb3JjZSB0
aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBUaGlzIGlzCisgICAgLy8gcmFy
ZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNhbGx5IG1vcmUK
KyAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUgY29kZS4KKyAgICB2b2lk
IG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKworICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50
IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CisgICAgLy8gb3B0
aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJvdWdobHkgMl4yOSBpbnZvY2F0aW9u
cywKKyAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFudCB0byBkZWxheSB0aGF0IGFzIG11Y2gg
YXMgcG9zc2libGUuIFRoaXMKKyAgICAvLyBpcyBjYWxsZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxl
ZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisgICAgLy8gdGhlIGZ1dHVyZSBhcyB3ZWxs
LgorICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKworICAgIC8vIENhbGwgdGhp
cyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0aW5nIHN0YXRlLAorICAg
IC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0
aW9uIHRyaWdnZXIKKyAgICAvLyBmaXJlcy4gVGhpcyBpcyBjYWxsZWQgaW4gdGhlIENvZGVCbG9j
ayBjb25zdHJ1Y3Rvci4gSXQgYWxzbworICAgIC8vIG1ha2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBp
ZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0CisgICAgLy8gT1NSIGV4aXQgY29kZSBp
cyBjb2RlIGdlbmVyYXRlZCwgc28gdGhlIHZhbHVlIG9mIHRoZSBleGVjdXRlCisgICAgLy8gY291
bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFpbGFibGUgZGlyZWN0bHku
CisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5IGFmdGVyCisgICAgLy8g
YSBsb3Qgb2Ygd2FybS11cC4KKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCk7CisK
KyAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmly
ZSBzb29uLCBidXQKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1h
a2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgorICAgIC8vIHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBv
cHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMgYXJlCisgICAgLy8gcmVsaW5rZWQgdG8g
dGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkgYWZmZWN0cyBjYWxsCisgICAgLy8gZnJh
bWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlzIENvZGVCbG9jay4gVGhlIHZhbHVlIGhl
cmUKKyAgICAvLyBpcyB0dW5lZCB0byBzdHJpa2UgYSBiYWxhbmNlIGJldHdlZW4gdGhlIGNvc3Qg
b2YgT1NSIGVudHJ5CisgICAgLy8gKHdoaWNoIGlzIHRvbyBoaWdoIHRvIHdhcnJhbnQgbWFraW5n
IGV2ZXJ5IGxvb3AgYmFjayBlZGdlIHRvCisgICAgLy8gdHJpZ2dlciBPU1IgaW1tZWRpYXRlbHkp
IGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxpbmUKKyAgICAvLyBjb2RlICh3aGljaCBp
cyBoaWdoIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQgdG8KKyAgICAvLyBo
YXZlIGEgZnVsbCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2FsbGluZyB0aGlzIGluc3Rl
YWQgb2YKKyAgICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkgaXMgZm9yIHRoZSBjYXNlIG9m
IHJlY3Vyc2l2ZSBmdW5jdGlvbnMKKyAgICAvLyB3aXRoIGxvb3BzLiBDb25zaWRlciB0aGF0IHRo
ZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUKKyAgICAvLyByZWN1cnNpdmUgZnVuY3Rp
b24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhlIHRvcAorICAgIC8vIG9u
ZSB0cmlnZ2VycyBvcHRpbWl6YXRpb24sIGFuZCB0aGVuIHJldHVybnMsIGFuZCB0aGVuIGFsbCBv
ZgorICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBkb24ndCB3YW50IG9wdGltaXphdGlvbiB0
byBiZSB0cmlnZ2VyZWQgb24KKyAgICAvLyBlYWNoIHJldHVybiwgYXMgdGhhdCB3b3VsZCBiZSBz
dXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQorICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1p
emF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBob3QKKyAgICAvLyBpbiB0
aGUgYmFzZWxpbmUgY29kZS4KKyAgICB2b2lkIG9wdGltaXplU29vbigpOworCisgICAgdm9pZCBm
b3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCk7CisKKyAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJl
c3VsdCk7CisgICAgCisgICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIoKSBjb25zdCB7IHJldHVy
biBtX29zckV4aXRDb3VudGVyOyB9CisKKyAgICB2b2lkIGNvdW50T1NSRXhpdCgpIHsgbV9vc3JF
eGl0Q291bnRlcisrOyB9CisKKyAgICB1aW50MzJfdCogYWRkcmVzc09mT1NSRXhpdENvdW50ZXIo
KSB7IHJldHVybiAmbV9vc3JFeGl0Q291bnRlcjsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9j
aywgbV9vc3JFeGl0Q291bnRlcik7IH0KKworICAgIHVpbnQzMl90IGFkanVzdGVkRXhpdENvdW50
VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOworICAgIHVpbnQzMl90IGV4aXRD
b3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7CisgICAgdWludDMyX3QgZXhpdENvdW50
VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOworICAgIGJvb2wgc2hvdWxkUmVv
cHRpbWl6ZU5vdygpOworICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCk7CisK
KyAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOworICAgIHZvaWQg
c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExp
c3Q+KTsKKyAgICAKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoKTsgfQorI2Vsc2Ug
Ly8gTm8gSklUCisgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHNpemVfdCBsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkgeyByZXR1cm4gMDsgfTsK
KyAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyAgICBib29sIHNob3VsZE9w
dGltaXplTm93KCk7CisgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygp
OworICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworICAgIHZvaWQgdXBkYXRl
QWxsUHJlZGljdGlvbnMoKTsKKworICAgIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudCgpOwor
ICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQoKTsKKworICAgIGJvb2wgaGFzT3BEZWJ1Z0Zvckxp
bmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKKworICAgIGJvb2wg
aGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsg
fQorICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdn
ZXJSZXF1ZXN0czsgfQorCisgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFr
cG9pbnRzKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1CcmVha3BvaW50cyA+PSBudW1CcmVha3Bv
aW50cyk7CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgLT0gbnVtQnJlYWtwb2ludHM7CisgICAg
fQorCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAgICAgICBTdGVwcGluZ01vZGVEaXNhYmxl
ZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAorICAgIH07CisgICAgdm9pZCBzZXRTdGVw
cGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKKworICAgIHZvaWQgY2xlYXJEZWJ1Z2dlclJlcXVlc3Rz
KCkKKyAgICB7CisgICAgICAgIG1fc3RlcHBpbmdNb2RlID0gU3RlcHBpbmdNb2RlRGlzYWJsZWQ7
CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgPSAwOworICAgIH0KKworICAgIGJvb2wgd2FzQ29t
cGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KKyAgICAKKyAgICAvLyBGSVhN
RTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgorCisgICAgaW50IG1fbnVt
Q2FsbGVlTG9jYWxzOworICAgIGludCBtX251bVZhcnM7CisgICAgCisgICAgLy8gVGhpcyBpcyBp
bnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55b25lIGRv
aW5nIGFueQorICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcgdG8gaG9sZCB0aGUgbG9jazoKKyAgICAv
LworICAgIC8vIC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2Nr
LgorICAgIC8vCisgICAgLy8gLSBRdWVyaW5nIGFueSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2Rl
IGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4KKyAgICAvLyAgIHRoZSBtYWluIHRocmVh
ZC4KKyAgICAvLworICAgIC8vIEFkZGl0aW9uYWxseSwgaXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlm
eSB0aGUgaW5saW5lIGNhY2hlIG9uIHRoZSBtYWluCisgICAgLy8gdGhyZWFkLiBUaGlzIG1lYW5z
IHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0aGUgaW5saW5lIGNhY2hlIHdpdGhvdXQK
KyAgICAvLyBsb2NraW5nLiBUaGlzIGlzIGNydWNpYWwgc2luY2UgZXhlY3V0aW5nIHRoZSBpbmxp
bmUgY2FjaGUgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyAicXVlcnlpbmciIGl0LgorICAgIC8vCisg
ICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBk
byB3aGF0ZXZlciBpdCB3YW50cworICAgIC8vIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGJl
Y2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBhbnkKKyAgICAvLyBjb25j
dXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdoYXQgdGhleSdyZSBkb2luZy4KKyAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKworICAgIEF0b21pYzxib29sPiBt
X3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKKworICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0
byBpdC4KKworI2lmIEVOQUJMRShKSVQpCisgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxT
dGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCisjZW5kaWYKKworICAgIGJvb2wgbV9h
bGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkIDogMTsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQg
b24gZXZlcnkgR0MuCisKKyAgICBib29sIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uIDogMTsKKyAg
ICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKKyAgICBib29sIG1faGFzQmVlbkNv
bXBpbGVkV2l0aEZUTCA6IDE7CisgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOworICAgIGJv
b2wgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOyAvLyBD
b2RlVHlwZQorCisgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24g
Y29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKKyAgICAvLyBmb3IgdGhlIGZh
Y3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KKyAgICB2b2lkIGJl
Z2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQg
ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKworICAgIHN0cnVjdCBSYXJlRGF0YSB7CisgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVmVjdG9yPEhh
bmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOworCisgICAgICAgIC8vIEJ1ZmZlcnMgdXNl
ZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKKyAgICAgICAgVmVjdG9yPFZlY3RvcjxKU1ZhbHVl
Pj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAgLy8gSnVtcCBUYWJsZXMKKyAgICAgICAg
VmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAg
RXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7CisgICAgfTsKKworICAgIHZvaWQgY2xlYXJF
eGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAgICBpZiAobV9yYXJlRGF0YSkKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuY2xlYXIoKTsKKyAgICB9CisK
KyAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgSGFuZGxlckluZm8mIGhhbmRs
ZXIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IC8vIFdlIG1h
eSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFuIGlubGluZWQgY2FsbCBmcmFtZS4KKyAg
ICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7Cisg
ICAgfQorCisgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5k
ZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKKworI2lmIEVOQUJMRShKSVQpCisg
ICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmln
aW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygp
OworICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworCisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZWxzZQor
ICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKKworICAgIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIHNw
ZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CisgICAgCisgICAgdm9pZCBub3RpY2VJbmNvbWlu
Z0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSk7CisgICAgCisgICAgZG91YmxlIG9wdGltaXph
dGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKKworICAgIHZvaWQgdXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKKworICAg
IHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisKKyAgICB2b2lkIHJlcGxhY2VD
b25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5k
ZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNp
emUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCisgICAgICAgIFByaW50U3RyZWFtJiwgRXhl
Y1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0cnVjdGlvbiomLAor
ICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlu
a0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOworCisgICAgQ1N0cmluZyByZWdpc3Rlck5h
bWUoaW50IHIpIGNvbnN0OworICAgIENTdHJpbmcgY29uc3RhbnROYW1lKGludCBpbmRleCkgY29u
c3Q7CisgICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQg
bG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2b2lk
IHByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNv
bnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50Q29uZGl0
aW9uYWxKdW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBj
b25zdCBJbnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2
b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomKTsKKyAgICB2b2lkIHByaW50R2V0QnlJZENhY2hlU3RhdHVz
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01h
cCYpOworICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVz
IH07CisgICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBs
b2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1v
ZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYpOwor
ICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHBy
aW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgaW50IGxvY2F0aW9uLCBjb25zdCBT
dHViSW5mb01hcCYpOworICAgIHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3RyZWFtJiwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFy
KiBvcCk7CisgICAgdm9pZCBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQs
IGNvbnN0IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7CisKKyAgICB2b2lkIGJlZ2luRHVtcFByb2Zp
bGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIHZvaWQg
ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9v
bCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBkdW1wQXJyYXlQcm9maWxpbmcoUHJp
bnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5n
KTsKKyAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFy
KiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAg
ICB2b2lkIGR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0mLCBBcml0aFByb2ZpbGUqLCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKworICAgIGJvb2wgc2hvdWxkVmlzaXRTdHJvbmdseSgp
OworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKTsKKyAgICBib29s
IHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKTsKKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVRy
YW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVzcyhTbG90
VmlzaXRvciYpOworICAgICAgICAKKyAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoU2xvdFZpc2l0b3Im
KTsKKworICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVNpbmNlQ3JlYXRpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM+KAorICAgICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkgLSBtX2NyZWF0aW9uVGltZSk7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIH0K
KworICAgIHZvaWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2Zp
bGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mKTsKKworICAgIFdyaXRlQmFycmllcjxV
bmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CisgICAgaW50IG1fbnVtUGFyYW1ldGVy
czsKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIG1fZGVidWdnZXJSZXF1ZXN0czsKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faGFzRGVidWdnZXJTdGF0ZW1l
bnQgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgbV9zdGVwcGluZ01vZGUgOiAxOworICAgICAg
ICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOworICAgICAgICB9OworICAgIH07
CisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX293bmVyRXhlY3V0YWJsZTsKKyAg
ICBWTSogbV92bTsKKworICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVj
dGlvbnM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOworICAgIFZpcnR1YWxS
ZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CisgICAgbXV0YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFz
aDsKKworICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CisgICAgdW5zaWduZWQg
bV9zb3VyY2VPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7CisK
KyAgICBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0luZm8+IG1fbGxpbnRDYWxsTGlua0lu
Zm9zOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgQmFzaWNSYXdT
ZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKKyAg
ICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKKyAg
ICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOworI2lmIEVOQUJMRShKSVQpCisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Cisg
ICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKKyAgICBCYWc8SklUQWRkSUM+
IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworICAgIEJhZzxCeVZhbElu
Zm8+IG1fYnlWYWxJbmZvczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7
CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAgIFNlbnRpbmVsTGlua2VkTGlz
dDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0Nh
bGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOworI2VuZGlmCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tz
IHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKKyAgICAvLyBmb3IgREZHIGNv
ZGUgYmxvY2tzLgorICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKKyAgICBDb21w
cmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZXM7CisjZW5kaWYKKyAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlczsKKyAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPiBtX3Zh
bHVlUHJvZmlsZXM7CisgICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9y
YXJlQ2FzZVByb2ZpbGVzOworICAgIFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9m
aWxlPiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzOworICAgIEFycmF5UHJvZmlsZVZlY3RvciBt
X2FycmF5UHJvZmlsZXM7CisgICAgUmVmQ291bnRlZEFycmF5PE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlPiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlczsKKworICAgIC8vIENvbnN0YW50IFBvb2wK
KyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIpID09IHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXJf
VW5rbm93bik7CisgICAgLy8gVE9ETzogVGhpcyBjb3VsZCBqdXN0IGJlIGEgcG9pbnRlciB0byBt
X3VubGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBERkcgbXV0YXRlcworICAgIC8vIGl0
LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCisgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rp
b25EZWNsczsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKKworICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1f
YWx0ZXJuYXRpdmU7CisgICAgCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsKKworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1
dGVDb3VudGVyOworICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CisgICAgdWludDE2X3Qg
bV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7CisgICAgdWludDE2X3QgbV9yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcjsKKworICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9p
bnQgbV9jcmVhdGlvblRpbWU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzQW5hbHlzaXM7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFy
ZURhdGE+IG1fcmFyZURhdGE7CisKKyAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25k
aXRpb25hbEZpbmFsaXplcjsKKyAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcjsKK307CisKKy8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFu
eSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdAorLy8gcmVzcG9uc2libGUg
Zm9yIG1hcmtpbmcgaXQuCisKK2NsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxv
Y2sgeworICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCitw
cm90ZWN0ZWQ6CisgICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAg
OiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7
CisgICAgfQorCisgICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIs
IHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICB9Cit9Owor
CitjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87
CisKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIFByb2dy
YW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3Jh
bUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwg
dm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3Ro
ZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRp
YyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgUHJvZ3JhbUNvZGVC
bG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0
YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3Ro
ZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAg
SlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworfTsKKworY2xhc3MgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgeworcHVibGljOgor
ICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJz
ZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgeworICAgICAg
ICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAg
ICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgICAgICBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNj
b3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3Ry
dWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307CisKK2NsYXNzIEV2YWxDb2RlQmxvY2sg
OiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEdsb2JhbENv
ZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBFdmFsQ29kZUJs
b2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90
aGVyKQorICAgIHsKKyAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBF
dmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0s
IENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
fQorCisgICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQor
ICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlhYmxlKGluZGV4KTsgfQorICAgIHVu
c2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT5u
dW1WYXJpYWJsZXMoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBFdmFsQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9j
ayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKyAgICAgICAgCisgICAgRXZhbENvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAg
ICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisK
K3ByaXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5r
ZWRDb2RlQmxvY2soKSk7IH0KK307CisKK2NsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGlj
IENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBE
RUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSog
dm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQorICAgIHsK
KyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
KnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOwor
ICAgIH0KKworICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
dW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25D
b2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2
bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJz
dExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxv
Y2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2Vk
QmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2Nv
cGUqIHNjb3BlLAorICAgICAgICBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpCisgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwg
dW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOworfTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNz
IFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywg
V2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1i
bHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
KHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKwor
ICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgV2ViQXNzZW1i
bHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgeworICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0tPmhlYXApKQor
ICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZtLT53ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkFz
c2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Cit9OworI2VuZGlmCisKK2lubGluZSBSZWdpc3RlciYgRXhlY1N0YXRl
OjpyKGludCBpbmRleCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVC
bG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4
KSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOworICAgIHJldHVybiB0aGlzW2luZGV4XTsKK30K
KworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOworfQorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNT
dGF0ZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5kZXgg
PCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgcmV0dXJuIHRoaXNbaW5kZXhdOwor
fQorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQoreworICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7Cit9CisKK2lu
bGluZSB2b2lkIENvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKQorewor
ICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3Ip
Cit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxlVHlw
ZTogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2Rl
QmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9wcm9ncmFtQ29kZUJs
b2NrLmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxv
Y2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgaWYgKENvZGVCbG9j
ayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9jay5nZXQoKSkpCisgICAgICAgICAgICBjb2RlQmxv
Y2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxl
VHlwZTogeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
KTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwu
Z2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhm
KTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCkpKQorICAgICAg
ICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAg
ICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4o
anNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fbW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5nZXQoKSkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29k
ZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhlY3V0YWJsZVR5cGU+CitKU09i
amVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbihWTSYgdm0sIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kLCBDb2RlQmxvY2sqJiByZXN1bHRDb2RlQmxvY2spCit7CisgICAgaWYgKGhhc0pJVENvZGVG
b3Ioa2luZCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgRXZh
bEV4ZWN1dGFibGU+Ojp2YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2Fz
dDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkp
OworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIFByb2dyYW1F
eGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8
Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPmNvZGVCbG9jaygp
KTsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0g
anNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMp
LT5jb2RlQmxvY2soKSk7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxl
VHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAgICAgICByZXN1bHRDb2Rl
QmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRo
aXMpLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKHZtLCBmdW5jdGlvbiwgc2NvcGUs
IGtpbmQsIHJlc3VsdENvZGVCbG9jayk7Cit9CisKKyNkZWZpbmUgQ09ERUJMT0NLX0xPR19FVkVO
VChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFpbHMpIFwKKyAgICAoY29kZUJsb2NrLT52bSgpLT5s
b2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAoKSB7IHJldHVybiB0b0NTdHJpbmcgZGV0
YWlsczsgfSkpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HbG9iYWxDb2RlQmxvY2suaAkocmV2aXNpb24gMjA4MjI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbENvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMDMzICsyOSwxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkFycmF5UHJvZmlsZS5oIgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgotI2luY2x1ZGUgIkJ5
dGVjb2RlQ29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKLSNpbmNsdWRl
ICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgotI2luY2x1ZGUgIkNvZGVCbG9j
a0hhc2guaCIKLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiQ29kZVR5cGUuaCIK
LSNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRM
b2NrLmgiCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUu
aCIKLSNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJF
dmFsQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgotI2luY2x1ZGUg
IkV4cHJlc3Npb25SYW5nZUluZm8uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUuaCIK
LSNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCi0jaW5j
bHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCi0jaW5jbHVk
ZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKdW1w
VGFibGUuaCIKLSNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgotI2luY2x1ZGUgIkxMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkxh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmgiCi0jaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaCIKLSNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgotI2luY2x1ZGUgIk9w
dGlvbnMuaCIKLSNpbmNsdWRlICJQcm9maWxlckpldHRpc29uUmVhc29uLmgiCi0jaW5jbHVkZSAi
UHJvZ3JhbUV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKLSNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgi
Ci0jaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgot
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwotY2xhc3MgQ29kZUJsb2NrU2V0OwotY2xhc3MgRXhl
Y1N0YXRlOwotY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKLWNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwotY2xhc3MgUmVnaXN0ZXJBdE9mZnNl
dExpc3Q7Ci1jbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotZW51bSBjbGFzcyBBY2Nlc3NUeXBl
IDogaW50OF90OwotCi1zdHJ1Y3QgQXJpdGhQcm9maWxlOwotCi10eXBlZGVmIEhhc2hNYXA8Q29k
ZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBT
dHViSW5mb01hcDsKLQotZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGlt
aXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwotCi1jbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgSlNDZWxsIHsKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIGZyaWVuZCBjbGFzcyBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7Ci0gICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgY2xhc3MgVW5jb25kaXRpb25h
bEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciB7Ci0gICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENvcHlQYXJzZWRCbG9j
a1RhZyB7IENvcHlQYXJzZWRCbG9jayB9OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFs
OwotCi0gICAgREVDTEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKFZNKiwg
U3RydWN0dXJlKiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICBD
b2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCk7Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVy
ZSosIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVj
dCopOwotI2VuZGlmCi0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQ29weVBhcnNlZEJs
b2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpT
U2NvcGUqKTsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9i
amVjdCopOwotI2VuZGlmCi0KLSAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xv
YmFsT2JqZWN0OwotCi1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvZGVCbG9jaygp
OwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUuZ2V0KCk7IH0KLQotICAgIENTdHJpbmcgaW5mZXJyZWROYW1l
KCkgY29uc3Q7Ci0gICAgQ29kZUJsb2NrSGFzaCBoYXNoKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNI
YXNoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3Q7Ci0gICAg
Q1N0cmluZyBoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBzb3Vy
Y2VDb2RlRm9yVG9vbHMoKSBjb25zdDsgLy8gTm90IHF1aXRlIHRoZSBhY3R1YWwgc291cmNlIHdl
IHBhcnNlZDsgdGhpcyB3aWxsIGRvIHRoaW5ncyBsaWtlIHByZWZpeCB0aGUgc291cmNlIGZvciBh
IGZ1bmN0aW9uIHdpdGggYSByZWlmaWVkIHNpZ25hdHVyZS4KLSAgICBDU3RyaW5nIHNvdXJjZUNv
ZGVPbk9uZUxpbmUoKSBjb25zdDsgLy8gQXMgc291cmNlQ29kZUZvclRvb2xzKCksIGJ1dCByZXBs
YWNlcyBhbGwgd2hpdGVzcGFjZSBydW5zIHdpdGggYSBzaW5nbGUgc3BhY2UuCi0gICAgdm9pZCBk
dW1wQXNzdW1pbmdKSVRUeXBlKFByaW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0K
LSAgICBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsg
fQotICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotCi0gICAgaW50IG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0KLSAg
ICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJz
OyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9Ci0KLSAgICBD
b2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KLSAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZN
JiwgQ29kZUJsb2NrKik7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoUmVsYXRlZENvZGVCbG9jayhGdW5jdG9yJiYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAg
IEZ1bmN0b3IgZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBWZWN0
b3I8Q29kZUJsb2NrKiwgND4gY29kZUJsb2NrczsKLSAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQo
dGhpcyk7Ci0KLSAgICAgICAgd2hpbGUgKCFjb2RlQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjdXJyZW50Q29kZUJsb2NrID0gY29kZUJsb2Nrcy50YWtlTGFzdCgp
OwotICAgICAgICAgICAgZihjdXJyZW50Q29kZUJsb2NrKTsKLQotICAgICAgICAgICAgaWYgKENv
ZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjdXJyZW50Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQot
ICAgICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKGFsdGVybmF0aXZlKTsKLSAgICAgICAg
ICAgIGlmIChDb2RlQmxvY2sqIG9zckVudHJ5QmxvY2sgPSBjdXJyZW50Q29kZUJsb2NrLT5zcGVj
aWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQotICAgICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBw
ZW5kKG9zckVudHJ5QmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzcGVjaWFsaXphdGlvbkZyb21Jc0NvbnN0cnVjdChtX2lzQ29uc3RydWN0b3IpOwot
ICAgIH0KLQotICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JKZXR0aXNvbigpOyAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAg
ICAKLSAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
VmVyc2lvbigpOwotCi0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0V2Vha2x5
KFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgp
OwotCi0gICAgdm9pZCBkdW1wU291cmNlKCk7Ci0gICAgdm9pZCBkdW1wU291cmNlKFByaW50U3Ry
ZWFtJik7Ci0KLSAgICB2b2lkIGR1bXBCeXRlY29kZSgpOwotICAgIHZvaWQgZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtJik7Ci0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0gICAgICAgIFByaW50U3Ry
ZWFtJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFw
JiA9IFN0dWJJbmZvTWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9N
YXAoKSk7Ci0gICAgdm9pZCBkdW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJlYW0mKTsKLSAg
ICB2b2lkIHByaW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgdm9pZCBwcmludFN0cnVjdHVyZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IEluc3RydWN0aW9uKiwgaW50IG9wZXJhbmQpOwotCi0gICAgdm9pZCBkdW1wTWF0aElD
U3RhdHMoKTsKLQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0
cmljdE1vZGU7IH0KLSAgICBFQ01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzU3Ry
aWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGU7IH0KLQotICAgIGlubGluZSBi
b29sIGlzS25vd25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4ID09IG1fdGhpc1JlZ2lzdGVyLm9mZnNldCgpICYmICFtX2lzU3RyaWN0TW9kZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgp
OwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbmRleCA+PSBtX251bVZhcnM7Ci0gICAgfQotCi0gICAgSGFuZGxlckluZm8qIGhhbmRs
ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5k
bGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKLSAgICBIYW5kbGVySW5mbyogaGFu
ZGxlckZvckluZGV4KHVuc2lnbmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6
OkFueUhhbmRsZXIpOwotICAgIHZvaWQgcmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRl
KENhbGxTaXRlSW5kZXgpOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQgZXhwcmVz
c2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYg
ZGl2b3QsCi0gICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gYnl0ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKLQotICAg
IHZvaWQgZ2V0U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZv
TWFwJiByZXN1bHQpOwotICAgIHZvaWQgZ2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3Vs
dCk7Ci0gICAgCi0gICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldENhbGxMaW5r
SW5mb01hcChDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGdldEJ5VmFsSW5m
b01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpOwot
ICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKLSAgICAKLSNp
ZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NU
eXBlKTsKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVRO
ZWdJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9m
aWxlKik7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdp
bigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1
YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgp
OyB9Ci0gICAgCi0gICAgLy8gTyhuKSBvcGVyYXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVu
bGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdldCBvbmUKLSAgICAvLyBzdHViIGluZm8u
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIGZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKLQotICAg
IEJ5VmFsSW5mbyogYWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBDYWxsTGlua0luZm8qIGFkZENhbGxM
aW5rSW5mbygpOwotICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9z
QmVnaW4oKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgfQotICAgIEJhZzxDYWxs
TGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlu
a0luZm9zLmVuZCgpOyB9Ci0KLSAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVz
ZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCi0gICAgLy8g
dGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8g
dXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKLSAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5m
b01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJ
bmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpOwotICAgIAotICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIHdhbnQgdG8gcmVhdHRlbXB0
IGNvbXBpbGluZyBzb21ldGhpbmcgd2l0aCB0aGUgYmFzZWxpbmUgSklULiBJZGVhbGx5Ci0gICAg
Ly8gdGhlIGJhc2VsaW5lIEpJVCB3b3VsZCBub3QgYWRkIGRhdGEgdG8gQ29kZUJsb2NrLCBidXQg
aW5zdGVhZCBpdCB3b3VsZCBwdXQgaXRzIGRhdGEgaW50bwotICAgIC8vIGEgbmV3bHkgY3JlYXRl
ZCBKSVRDb2RlLCB3aGljaCBjb3VsZCBiZSB0aHJvd24gYXdheSBpZiB3ZSBiYWlsIG9uIEpJVCBj
b21waWxhdGlvbi4gVGhlbiB3ZQotICAgIC8vIHdvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0
aGlzIHNpbGx5IGZ1bmN0aW9uLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MDYxCi0gICAgdm9pZCByZXNldEpJVERhdGEoKTsKLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQotCi0gICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7Ci0jZW5k
aWYgLy8gRU5BQkxFKEpJVCkKLQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUq
IGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwotCi0gICAgdm9pZCBzZXRKSVRDb2Rl
TWFwKHN0ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gaml0Q29kZU1hcCkKLSAgICB7
Ci0gICAgICAgIG1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAg
IENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2ppdENvZGVNYXAuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGNsZWFyTExJ
bnRHZXRCeUlkQ2FjaGUoSW5zdHJ1Y3Rpb24qKTsKLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmV0dXJuQWRkcmVzcyA+PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIHJldHVybkFk
ZHJlc3MgPCBpbnN0cnVjdGlvbnMoKS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbnN0cnVjdGlvbio+KHJldHVybkFkZHJlc3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsK
LSAgICB9Ci0KLSAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247Ci0gICAg
dHlwZWRlZiBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9u
czsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLSAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2luc3RydWN0aW9uczsgfQotCi0gICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6
ZSgpOwotCi0gICAgYm9vbCB1c2VzT3Bjb2RlKE9wY29kZUlEKTsKLQotICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0K
LQotICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9u
S2luZCgpKQotICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnQoKTsKLSAgICAKLSAgICB2b2lk
IHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZChjb2RlLT5zaXplKCkpOwotICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlz
IGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29t
ZXRoaW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCi0gICAgICAgIG1f
aml0Q29kZSA9IGNvZGU7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgp
IHsgcmV0dXJuIG1faml0Q29kZTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgaml0Q29kZU9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0Q29kZSk7IH0KLSAg
ICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgSklUQ29k
ZSogaml0Q29kZSA9IG1faml0Q29kZS5nZXQoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7Ci0gICAgICAgIEpJVENvZGU6OkpJVFR5cGUgcmVzdWx0ID0gSklUQ29kZTo6aml0VHlwZUZv
cihqaXRDb2RlKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7IC8vIFRoaXMgcHJvYmFi
bHkgaXNuJ3QgbmVlZGVkLiBPaCB3ZWxsLCBwYXJhbm9pYSBpcyBnb29kLgotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVDsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50KCk7Ci0KLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjb21wdXRlQ2FwYWJpbGl0eUxl
dmVsKCk7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKCk7Ci0gICAg
REZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsU3RhdGUoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxERkc6OkNhcGFiaWxpdHlMZXZlbD4obV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSk7IH0K
LQotICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBl
VG9SZXBsYWNlKTsKLSAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0
eXBlVG9SZXBsYWNlIGlzIG15IEpJVFR5cGUKLSNlbmRpZgotCi0gICAgdm9pZCBqZXR0aXNvbihQ
cm9maWxlcjo6SmV0dGlzb25SZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSA9IERvbnRDb3VudFJl
b3B0aW1pemF0aW9uLCBjb25zdCBGaXJlRGV0YWlsKiA9IG51bGxwdHIpOwotICAgIAotICAgIEV4
ZWN1dGFibGVCYXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhl
Y3V0YWJsZS5nZXQoKTsgfQotICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4
ZWN1dGFibGUuZ2V0KCkpOyB9Ci0KLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9
Ci0KLSAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVy
KSB7IG1fdGhpc1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0KLSAgICBi
b29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7
IH0KLQotICAgIHZvaWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdp
c3RlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSB8fCAh
c2NvcGVSZWdpc3Rlci5pc1ZhbGlkKCkpOwotICAgICAgICBtX3Njb3BlUmVnaXN0ZXIgPSBzY29w
ZVJlZ2lzdGVyOwotICAgIH0KLQotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAgfQotICAg
IAotICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDb2RlVHlwZT4obV9jb2RlVHlwZSk7Ci0gICAgfQotCi0gICAgUHV0UHJvcGVy
dHlTbG90OjpDb250ZXh0IHB1dEJ5SWRDb250ZXh0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChjb2RlVHlwZSgpID09IEV2YWxDb2RlKQotICAgICAgICAgICAgcmV0dXJuIFB1dFByb3BlcnR5
U2xvdDo6UHV0QnlJZEV2YWw7Ci0gICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5
SWQ7Ci0gICAgfQotCi0gICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VPZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldDsgfQotCi0gICAgc2l6
ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyB9Ci0gICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5qdW1wVGFyZ2V0KGluZGV4KTsgfQot
Ci0gICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fbnVtUGFyYW1ldGVycyA+PSAwKTsKLSAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJz
KSk7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7Ci0gICAg
fQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJn
dW1lbnRJbmRleCkKLSAgICB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gJm1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzW2FyZ3VtZW50SW5kZXhdOwotICAgICAgICBBU1NFUlQocmVzdWx0
LT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVl
UHJvZmlsZXMuc2l6ZSgpOyB9Ci0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGlu
ZGV4KSB7IHJldHVybiAmbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQotICAgIFZhbHVlUHJvZmls
ZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAg
ICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9mVmFsdWVQcm9m
aWxlcygpOwotICAgIH0KLSAgICBWYWx1ZVByb2ZpbGUqIGdldEZyb21BbGxWYWx1ZVByb2ZpbGVz
KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChpbmRleCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGUoaW5kZXggLSBudW1i
ZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKTsKLSAgICB9Ci0KLSAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVk
IG51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpIHsgcmV0dXJuIG1fcmFyZUNhc2VQcm9maWxlcy5z
aXplKCk7IH0KLSAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxl
Q291bnRGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgYm9vbCBs
aWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICBp
ZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25z
OjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwotICAgIH0KLQotICAgIGJvb2wg
Y291bGRUYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYg
KCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6
Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0g
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlvbiopOwotCi0gICAg
Ym9vbCBjb3VsZFRha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAg
IHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQ
cm9maWxlcy5zaXplKCk7IH0KLSAgICBjb25zdCBBcnJheVByb2ZpbGVWZWN0b3ImIGFycmF5UHJv
ZmlsZXMoKSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXM7IH0KLSAgICBBcnJheVByb2ZpbGUqIGFk
ZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5
UHJvZmlsZSogZ2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBB
cnJheVByb2ZpbGUqIGdldE9yQWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRPckFk
ZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAvLyBFeGNlcHRp
b24gaGFuZGxpbmcgc3VwcG9ydAotCi0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxl
cnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIo
aW50IGluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0KLQotICAgIGJvb2wgaGFzRXhwcmVzc2lv
bkluZm8oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzRXhwcmVzc2lvbkluZm8oKTsgfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiYgY29kZU9yaWdpbnMoKTsKLSAgICAKLSAgICAvLyBIYXZpbmcgY29kZSBv
cmlnaW5zIGltcGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgotICAgIGJv
b2wgaGFzQ29kZU9yaWdpbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgYm9vbCBjYW5HZXRD
b2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIWhhc0Nv
ZGVPcmlnaW5zKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBp
bmRleC5iaXRzKCkgPCBjb2RlT3JpZ2lucygpLnNpemUoKTsKLSAgICB9Ci0KLSAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjb2RlT3JpZ2lucygpW2luZGV4LmJpdHMoKV07Ci0gICAgfQotCi0gICAgYm9vbCBhZGRGcmVx
dWVudEV4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIG1f
ZXhpdFByb2ZpbGUuYWRkKGxvY2tlciwgdGhpcywgc2l0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBo
YXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6
RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotICAgIGJvb2wgaGFz
RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAotICAgIHsK
LSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0
dXJuIGhhc0V4aXRTaXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotCi0gICAgREZHOjpFeGl0UHJv
ZmlsZSYgZXhpdFByb2ZpbGUoKSB7IHJldHVybiBtX2V4aXRQcm9maWxlOyB9Ci0KLSAgICBDb21w
cmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7
Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgLy8gQ29uc3RhbnQgUG9v
bAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG51
bWJlck9mREZHSWRlbnRpZmllcnMoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZkRGR0lkZW50aWZp
ZXJzKCkgY29uc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgp
IGNvbnN0OwotI2Vsc2UKLSAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7IH0KLSAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOyB9Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzOyB9Ci0gICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOyB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2KQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3du
PigpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCB0aGlzLCB2KTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50TGF6aWx5
KCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMu
c2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8
VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
LmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVn
aXN0ZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19J
TkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb25baW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLQotICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9m
dW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQotICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVj
bHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9Ci0gICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNb
aW5kZXhdLmdldCgpOyB9Ci0gICAgCi0gICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+cmVnZXhwKGluZGV4KTsgfQotCi0gICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFt
X3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3JhcmVE
YXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXplKCk7Ci0gICAgfQotICAgIHVuc2lnbmVkIGFkZENv
bnN0YW50QnVmZmVyKGNvbnN0IFZlY3RvcjxKU1ZhbHVlPiYgYnVmZmVyKQotICAgIHsKLSAgICAg
ICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0g
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRh
LT5tX2NvbnN0YW50QnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHNpemU7
Ci0gICAgfQotCi0gICAgVmVjdG9yPEpTVmFsdWU+JiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKHVu
c2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAg
ICByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLSAg
ICBKU1ZhbHVlKiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKGluZGV4KS5kYXRhKCk7Ci0gICAgfQotCi0g
ICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuICZtX3ZtLT5oZWFwOyB9Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9
Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4pOwotCi0g
ICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKLSAgICB7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgICAgICAgICBpZiAoISFtX2xpdmVuZXNzQW5hbHlzaXMpCi0gICAgICAgICAgICAgICAg
cmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxp
dmVuZXNzQW5hbHlzaXNTbG93KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdmFsaWRhdGUoKTsK
LQotICAgIC8vIEp1bXAgVGFibGVzCi0KLSAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVt
cFRhYmxlcy5zaXplKCkgOiAwOyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1w
VGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzLmFwcGVuZChTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7
IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLSAg
ICB2b2lkIGNsZWFyU3dpdGNoSnVtcFRhYmxlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fcmFy
ZURhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNo
SnVtcFRhYmxlcy5jbGVhcigpOwotICAgIH0KLQotICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBTdHJpbmdKdW1wVGFi
bGUmIGFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFN0cmluZ0p1
bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5s
YXN0KCk7IH0KLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgRXZhbENv
ZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBy
ZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9Ci0KLSAgICBlbnVtIFNocmlua01v
ZGUgewotICAgICAgICAvLyBTaHJpbmsgcHJpb3IgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUg
dGhhdCBtYXkgcG9pbnQgZGlyZWN0bHkgaW50byB2ZWN0b3JzLgotICAgICAgICBFYXJseVNocmlu
aywKLQotICAgICAgICAvLyBTaHJpbmsgYWZ0ZXIgZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUsIGFu
ZCBhZnRlciBwb3NzaWJseSBjcmVhdGluZyBuZXcgdmVjdG9ycwotICAgICAgICAvLyBhbmQgYXBw
ZW5kaW5nIHRvIG90aGVycy4gQXQgdGhpcyB0aW1lIGl0IGlzIG5vdCBzYWZlIHRvIHNocmluayBj
ZXJ0YWluIHZlY3RvcnMKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGdlbmVyYXRl
ZCBtYWNoaW5lIGNvZGUgdGhhdCByZWZlcmVuY2VzIHRoZW0gZGlyZWN0bHkuCi0gICAgICAgIExh
dGVTaHJpbmsKLSAgICB9OwotICAgIHZvaWQgc2hyaW5rVG9GaXQoU2hyaW5rTW9kZSk7Ci0KLSAg
ICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gSklUdGluZyBraWNrcyBpbiwgaW4g
YSBtaXhlZCBtb2RlCi0gICAgLy8gZXhlY3V0aW9uIHdvcmxkLgotCi0gICAgYm9vbCBjaGVja0lm
SklUVGhyZXNob2xkUmVhY2hlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1
dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwotICAgIH0KLQot
ICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKLSAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwotICAgIH0KLQotICAgIGludDMyX3QgdGhy
ZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVw
KCk7Ci0gICAgdm9pZCBqaXRTb29uKCk7Ci0KLSAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
dWN0dXJlKiwgQmFnPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7Ci0gICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCYg
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcCgpIHsgcmV0dXJuIG1fbGxpbnRHZXRCeUlkV2F0Y2hw
b2ludE1hcDsgfQotCi0gICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJl
ZCBjb21waWxhdGlvbiBraWNrcyBpbi4gVGhpcwotICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0
aGUgb3B0aW1pemluZyBjb21waWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgotICAgIC8vIGVu
dHJ5IGhhcHBlbnMuIFR3byB0cmlnZ2VycyBleGlzdDogdGhlIGxvb3AgdHJpZ2dlciBhbmQgdGhl
IHJldHVybgotICAgIC8vIHRyaWdnZXIuIEluIGVpdGhlciBjYXNlLCB3aGVuIGFuIGFkZGl0aW9u
IHRvIG1faml0RXhlY3V0ZUNvdW50ZXIKLSAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1u
ZWdhdGl2ZSwgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMKLSAgICAvLyBpbnZva2VkLiBUaGlz
IGluY2x1ZGVzIGEgZmFzdCBjaGVjayB0byBzZWUgaWYgdGhpcyBDb2RlQmxvY2sgaGFzCi0gICAg
Ly8gYWxyZWFkeSBiZWVuIG9wdGltaXplZCAoaS5lLiByZXBsYWNlbWVudCgpIHJldHVybnMgYSBD
b2RlQmxvY2sKLSAgICAvLyB0aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hlciB0aWVyIEpJ
VCB0aGFuIHRoaXMgb25lKS4gSW4gdGhlCi0gICAgLy8gY2FzZSBvZiB0aGUgbG9vcCB0cmlnZ2Vy
LCBpZiB0aGUgb3B0aW1pemVkIGNvbXBpbGF0aW9uIHN1Y2NlZWRzCi0gICAgLy8gKG9yIGhhcyBh
bHJlYWR5IHN1Y2NlZWRlZCBpbiB0aGUgcGFzdCkgdGhlbiBPU1IgaXMgYXR0ZW1wdGVkIHRvCi0g
ICAgLy8gcmVkaXJlY3QgcHJvZ3JhbSBmbG93IGludG8gdGhlIG9wdGltaXplZCBjb2RlLgotCi0g
ICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXph
dGlvbiB0cmlnZ2VycywKLSAgICAvLyBhbmQgYXJlIHVzZWQgYXMgYSBzaW5nbGUgcG9pbnQgYXQg
d2hpY2ggd2UgZGVmaW5lIHRoZSBoZXVyaXN0aWNzCi0gICAgLy8gZm9yIGhvdyBtdWNoIHdhcm0t
dXAgaXMgbWFuZGF0ZWQgYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbgotICAgIC8vIHRyaWdn
ZXIgZmlsZXMuIEFsbCBDb2RlQmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKSwKLSAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBDb2RlQmxvY2sgY29uc3Ry
dWN0b3IuCi0KLSAgICAvLyBXaGVuIHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFp
bHVyZXMsIHdlIHRyaWdnZXIgYQotICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1l
LCB3ZSBpbmNyZWFzZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKLSAgICAvLyB0byBhdm9pZCB0
aHJhc2hpbmcuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKSBjb25zdDsKLSAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSNp
ZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsgfQotICAgIHN0YXRp
YyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OwotICAgIHNpemVfdCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLQotICAg
IHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXMoKTsKLQotICAgIGludDMyX3QgY29kZVR5cGVU
aHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3Q7Ci0KLSAgICBpbnQzMl90IGFkanVzdGVkQ291bnRl
clZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7Ci0KLSAgICBpbnQzMl90KiBhZGRyZXNz
T2ZKSVRFeGVjdXRlQ291bnRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0
ZUNvdW50ZXIubV9jb3VudGVyOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlciwgbV9jb3VudGVyKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRF
eGVjdXRpb25BY3RpdmVUaHJlc2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIsIG1fYWN0aXZlVGhyZXNob2xkKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZKSVRFeGVjdXRpb25Ub3RhbENvdW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxp
bmVFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFsQ291bnQpOyB9Ci0KLSAgICBjb25zdCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXImIGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9q
aXRFeGVjdXRlQ291bnRlcjsgfQotCi0gICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KLQotICAg
IC8vIENoZWNrIGlmIHRoZSBvcHRpbWl6YXRpb24gdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQs
IGFuZCBpZiBub3QsCi0gICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBS
ZXR1cm5zIHRydWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKLSAgICAvLyBiZWVuIHJlYWNoZWQuCi0g
ICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpOwotCi0gICAgLy8g
Q2FsbCB0aGlzIHRvIGZvcmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUu
IFRoaXMgaXMKLSAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJz
IGFyZSB0eXBpY2FsbHkgbW9yZQotICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNl
bGluZSBjb2RlLgotICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwotCi0gICAgLy8g
Q2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0aW9uIGZyb20gaGFwcGVuaW5nIGFnYWluLiBO
b3RlIHRoYXQKLSAgICAvLyBvcHRpbWl6YXRpb24gd2lsbCBzdGlsbCBoYXBwZW4gYWZ0ZXIgcm91
Z2hseSAyXjI5IGludm9jYXRpb25zLAotICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRv
IGRlbGF5IHRoYXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcwotICAgIC8vIGlzIGNhbGxlZCBp
ZiBvcHRpbWl6YXRpb24gZmFpbGVkLCBhbmQgd2UgZXhwZWN0IGl0IHRvIGZhaWwgaW4KLSAgICAv
LyB0aGUgZnV0dXJlIGFzIHdlbGwuCi0gICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigp
OwotCi0gICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMg
c3RhcnRpbmcgc3RhdGUsCi0gICAgLy8gZm9yY2luZyBhIHdhcm0tdXAgdG8gaGFwcGVuIGJlZm9y
ZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlcgotICAgIC8vIGZpcmVzLiBUaGlzIGlzIGNh
bGxlZCBpbiB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLiBJdCBhbHNvCi0gICAgLy8gbWFrZXMg
c2Vuc2UgdG8gY2FsbCB0aGlzIGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBOb3RlIHRoYXQKLSAg
ICAvLyBPU1IgZXhpdCBjb2RlIGlzIGNvZGUgZ2VuZXJhdGVkLCBzbyB0aGUgdmFsdWUgb2YgdGhl
IGV4ZWN1dGUKLSAgICAvLyBjb3VudGVyIHRoYXQgdGhpcyBjb3JyZXNwb25kcyB0byBpcyBhbHNv
IGF2YWlsYWJsZSBkaXJlY3RseS4KLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLQot
ICAgIC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
IG9ubHkgYWZ0ZXIKLSAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgotICAgIHZvaWQgb3B0aW1pemVB
ZnRlckxvbmdXYXJtVXAoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBhbiBvcHRpbWl6
YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAotICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0
aGUgbmV4dCBvbmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCi0gICAgLy8gc3Vj
Y2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUK
LSAgICAvLyByZWxpbmtlZCB0byB0aGUgb3B0aW1pemVkIGNvZGUsIHNvIHRoaXMgb25seSBhZmZl
Y3RzIGNhbGwKLSAgICAvLyBmcmFtZXMgdGhhdCBhcmUgc3RpbGwgZXhlY3V0aW5nIHRoaXMgQ29k
ZUJsb2NrLiBUaGUgdmFsdWUgaGVyZQotICAgIC8vIGlzIHR1bmVkIHRvIHN0cmlrZSBhIGJhbGFu
Y2UgYmV0d2VlbiB0aGUgY29zdCBvZiBPU1IgZW50cnkKLSAgICAvLyAod2hpY2ggaXMgdG9vIGhp
Z2ggdG8gd2FycmFudCBtYWtpbmcgZXZlcnkgbG9vcCBiYWNrIGVkZ2UgdG8KLSAgICAvLyB0cmln
Z2VyIE9TUiBpbW1lZGlhdGVseSkgYW5kIHRoZSBjb3N0IG9mIGV4ZWN1dGluZyBiYXNlbGluZQot
ICAgIC8vIGNvZGUgKHdoaWNoIGlzIGhpZ2ggZW5vdWdoIHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJp
bHkgd2FudCB0bwotICAgIC8vIGhhdmUgYSBmdWxsIHdhcm0tdXApLiBUaGUgaW50dWl0aW9uIGZv
ciBjYWxsaW5nIHRoaXMgaW5zdGVhZCBvZgotICAgIC8vIG9wdGltaXplTmV4dEludm9jYXRpb24o
KSBpcyBmb3IgdGhlIGNhc2Ugb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucwotICAgIC8vIHdpdGggbG9v
cHMuIENvbnNpZGVyIHRoYXQgdGhlcmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQotICAg
IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgZm9yIGEgcmVhc29uYWJseSBsYXJnZSB2YWx1ZSBvZiBO
LiBUaGUgdG9wCi0gICAgLy8gb25lIHRyaWdnZXJzIG9wdGltaXphdGlvbiwgYW5kIHRoZW4gcmV0
dXJucywgYW5kIHRoZW4gYWxsIG9mCi0gICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0
IHdhbnQgb3B0aW1pemF0aW9uIHRvIGJlIHRyaWdnZXJlZCBvbgotICAgIC8vIGVhY2ggcmV0dXJu
LCBhcyB0aGF0IHdvdWxkIGJlIHN1cGVyZmx1b3VzLiBJdCBvbmx5IG1ha2VzIHNlbnNlCi0gICAg
Ly8gdG8gdHJpZ2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNv
bWVzIGhvdAotICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgotICAgIHZvaWQgb3B0aW1pemVT
b29uKCk7Ci0KLSAgICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHko
KTsKLQotICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKLSAgICAKLSAgICB1aW50MzJfdCBvc3JFeGl0Q291
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KLQotICAgIHZvaWQgY291
bnRPU1JFeGl0KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KLQotICAgIHVpbnQzMl90KiBhZGRy
ZXNzT2ZPU1JFeGl0Q291bnRlcigpIHsgcmV0dXJuICZtX29zckV4aXRDb3VudGVyOyB9Ci0KLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX29zckV4aXRDb3VudGVyKTsgfQotCi0gICAgdWludDMy
X3QgYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7
Ci0gICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKLSAg
ICB1aW50MzJfdCBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7
Ci0gICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCk7Ci0gICAgYm9vbCBzaG91bGRSZW9wdGlt
aXplRnJvbUxvb3BOb3coKTsKLQotICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdp
c3RlclNldCk7Ci0gICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVlX3B0
cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4pOwotICAgIAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzLmdldCgpOyB9Ci0jZWxzZSAvLyBObyBKSVQKLSAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVy
T2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH0KLSAgICBz
dGF0aWMgc2l6ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKSB7IHJldHVybiAwOyB9OwotICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpIHsgfQot
ICAgIHVuc2lnbmVkIG51bWJlck9mREZHQ29tcGlsZXMoKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYK
LQotICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKTsKLSAgICB2b2lkIHVwZGF0ZUFsbFZhbHVl
UHJvZmlsZVByZWRpY3Rpb25zKCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25z
KCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotCi0gICAgdW5zaWduZWQgZnJh
bWVSZWdpc3RlckNvdW50KCk7Ci0gICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCgpOwotCi0gICAg
Ym9vbCBoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBj
b2x1bW4pOwotCi0gICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z2dlclJlcXVlc3RzOyB9Ci0gICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9Ci0KLSAgICB2b2lkIGFkZEJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1
bnNpZ25lZCBudW1CcmVha3BvaW50cykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX251bUJyZWFr
cG9pbnRzID49IG51bUJyZWFrcG9pbnRzKTsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyAtPSBu
dW1CcmVha3BvaW50czsKLSAgICB9Ci0KLSAgICBlbnVtIFN0ZXBwaW5nTW9kZSB7Ci0gICAgICAg
IFN0ZXBwaW5nTW9kZURpc2FibGVkLAotICAgICAgICBTdGVwcGluZ01vZGVFbmFibGVkCi0gICAg
fTsKLSAgICB2b2lkIHNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUpOwotCi0gICAgdm9pZCBj
bGVhckRlYnVnZ2VyUmVxdWVzdHMoKQotICAgIHsKLSAgICAgICAgbV9zdGVwcGluZ01vZGUgPSBT
dGVwcGluZ01vZGVEaXNhYmxlZDsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyA9IDA7Ci0gICAg
fQotCi0gICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsg
fQotICAgIAotICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZh
dGUuCi0KLSAgICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7Ci0gICAgaW50IG1fbnVtVmFyczsKLSAg
ICAKLSAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25z
aWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcgYW55Ci0gICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBo
b2xkIHRoZSBsb2NrOgotICAgIC8vCi0gICAgLy8gLSBNb2RpZnlpbmcgYW55IGlubGluZSBjYWNo
ZSBpbiB0aGlzIGNvZGUgYmxvY2suCi0gICAgLy8KLSAgICAvLyAtIFF1ZXJpbmcgYW55IGlubGlu
ZSBjYWNoZSBpbiB0aGlzIGNvZGUgYmxvY2ssIGZyb20gYSB0aHJlYWQgb3RoZXIgdGhhbgotICAg
IC8vICAgdGhlIG1haW4gdGhyZWFkLgotICAgIC8vCi0gICAgLy8gQWRkaXRpb25hbGx5LCBpdCdz
IG9ubHkgbGVnYWwgdG8gbW9kaWZ5IHRoZSBpbmxpbmUgY2FjaGUgb24gdGhlIG1haW4KLSAgICAv
LyB0aHJlYWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbWFpbiB0aHJlYWQgY2FuIHF1ZXJ5IHRoZSBp
bmxpbmUgY2FjaGUgd2l0aG91dAotICAgIC8vIGxvY2tpbmcuIFRoaXMgaXMgY3J1Y2lhbCBzaW5j
ZSBleGVjdXRpbmcgdGhlIGlubGluZSBjYWNoZSBpcyBlZmZlY3RpdmVseQotICAgIC8vICJxdWVy
eWluZyIgaXQuCi0gICAgLy8KLSAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMg
aXMgdGhhdCB0aGUgR0MgY2FuIGRvIHdoYXRldmVyIGl0IHdhbnRzCi0gICAgLy8gd2l0aG91dCBo
b2xkaW5nIGFueSBsb2NrcywgYmVjYXVzZSB0aGUgR0MgaXMgZ3VhcmFudGVlZCB0byB3YWl0IHVu
dGlsIGFueQotICAgIC8vIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkcyBmaW5pc2ggd2hh
dCB0aGV5J3JlIGRvaW5nLgotICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwot
Ci0gICAgQXRvbWljPGJvb2w+IG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkOwotCi0gICAgYm9v
bCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUg
SklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB1bnNpZ25l
ZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKLSNl
bmRpZgotCi0gICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgOiAxOyAvLyBJ
bml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KLQotICAgIGJvb2wgbV9kaWRGYWlsSklU
Q29tcGlsYXRpb24gOiAxOwotICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwot
ICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKLSAgICBib29sIG1faXNDb25z
dHJ1Y3RvciA6IDE7Ci0gICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAgdW5zaWduZWQg
bV9jb2RlVHlwZSA6IDI7IC8vIENvZGVUeXBlCi0KLSAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZv
ciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24n
dAotICAgIC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1l
c3BhY2VzLgotICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgIE5PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotCi0gICAgc3RydWN0
IFJhcmVEYXRhIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGlj
OgotICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0KLSAg
ICAgICAgLy8gQnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBW
ZWN0b3I8VmVjdG9yPEpTVmFsdWU+PiBtX2NvbnN0YW50QnVmZmVyczsKLQotICAgICAgICAvLyBK
dW1wIFRhYmxlcwotICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKLQotICAgICAgICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLSAgICB9
OwotCi0gICAgdm9pZCBjbGVhckV4Y2VwdGlvbkhhbmRsZXJzKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cy5jbGVhcigpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kRXhjZXB0aW9uSGFuZGxlcihjb25z
dCBIYW5kbGVySW5mbyYgaGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsgLy8gV2UgbWF5IGJlIGhhbmRsaW5nIHRoZSBleGNlcHRpb24gb2YgYW4gaW5s
aW5lZCBjYWxsIGZyYW1lLgotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJz
LmFwcGVuZChoYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBDYWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlv
bkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwot
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5p
cXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7Ci0gICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKHZvaWQqIHBjKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKCk7Ci0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5l
Q2FjaGVzKCk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2b2lkIHRhbGx5RnJlcXVlbnRF
eGl0U2l0ZXMoKTsKLSNlbHNlCi0gICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9
Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwotCi0g
ICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwotICAg
IAotICAgIENvZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKLSAgICAKLSAg
ICB2b2lkIG5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsKLSAgICAK
LSAgICBkb3VibGUgb3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpOwotCi0gICAg
dm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMpOwotCi0gICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsK
LQotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZt
KCksIHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBCeXRlY29kZSgKLSAgICAg
ICAgUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNv
bnN0IEluc3RydWN0aW9uKiYsCi0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZv
TWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7Ci0KLSAg
ICBDU3RyaW5nIHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7Ci0gICAgQ1N0cmluZyBjb25zdGFu
dE5hbWUoaW50IGluZGV4KSBjb25zdDsKLSAgICB2b2lkIHByaW50VW5hcnlPcChQcmludFN0cmVh
bSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3Qg
Y2hhciogb3ApOwotICAgIHZvaWQgcHJpbnRCaW5hcnlPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0
ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwot
ICAgIHZvaWQgcHJpbnRDb25kaXRpb25hbEp1bXAoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBj
b25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IEluc3RydWN0aW9uKiYsIGludCBsb2NhdGlvbiwgY29u
c3QgY2hhciogb3ApOwotICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwotICAgIHZvaWQgcHJp
bnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRp
b24sIGNvbnN0IFN0dWJJbmZvTWFwJik7Ci0gICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVtcENh
Y2hlcywgRG9udER1bXBDYWNoZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFt
JiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBj
aGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3Qg
Q2FsbExpbmtJbmZvTWFwJik7Ci0gICAgdm9pZCBwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYs
IEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hh
ciogb3ApOwotICAgIHZvaWQgcHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBp
bnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZvTWFwJik7Ci0gICAgdm9pZCBwcmludExvY2F0aW9u
QW5kT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50TG9jYXRpb25PcEFuZFJl
Z2lzdGVyT3BlcmFuZChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5kKTsKLQotICAg
IHZvaWQgYmVnaW5EdW1wUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7Ci0gICAgdm9pZCBkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25z
dCBJbnN0cnVjdGlvbiomLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1
bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wm
IGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIHZvaWQgZHVtcFJhcmVDYXNlUHJvZmlsZShQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSosIGJvb2wmIGhhc1By
aW50ZWRQcm9maWxpbmcpOwotICAgIHZvaWQgZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYs
IEFyaXRoUHJvZmlsZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotCi0gICAgYm9vbCBz
aG91bGRWaXNpdFN0cm9uZ2x5KCk7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1Jl
ZmVyZW5jZSgpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpOwotICAgIAot
ICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgIHZvaWQgc3Ryb25n
bHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5
VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0
VGFyZ2V0cyhTbG90VmlzaXRvciYpOwotCi0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lU2luY2VDcmVhdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAtIG1fY3JlYXRpb25UaW1lKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYg
KCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
UmFyZURhdGE+KCk7Ci0gICAgfQotCi0gICAgdm9pZCBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmll
c0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYpOwot
Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKLSAg
ICBpbnQgbV9udW1QYXJhbWV0ZXJzOwotICAgIHVuaW9uIHsKLSAgICAgICAgdW5zaWduZWQgbV9k
ZWJ1Z2dlclJlcXVlc3RzOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQg
bV9oYXNEZWJ1Z2dlclN0YXRlbWVudCA6IDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3N0ZXBw
aW5nTW9kZSA6IDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX251bUJyZWFrcG9pbnRzIDogMzA7
Ci0gICAgICAgIH07Ci0gICAgfTsKLSAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1f
b3duZXJFeGVjdXRhYmxlOwotICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmQ291bnRlZEFycmF5PElu
c3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVn
aXN0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBtdXRhYmxl
IENvZGVCbG9ja0hhc2ggbV9oYXNoOwotCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3Nv
dXJjZTsKLSAgICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2ZpcnN0
TGluZUNvbHVtbk9mZnNldDsKLQotICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5m
bz4gbV9sbGludENhbGxMaW5rSW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2Fs
bExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5j
b21pbmdMTEludENhbGxzOwotICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5
SWRXYXRjaHBvaW50TWFwOwotICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9z
OwotICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElD
czsKLSAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJ
Q3M7Ci0gICAgQmFnPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZv
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7Ci0g
ICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5N
YXA7Ci0jZW5kaWYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0
Q29kZU1hcDsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awotICAgIC8vIGZvciBERkcgY29kZSBibG9ja3MuCi0gICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4
aXRQcm9maWxlOwotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciBt
X2xhenlPcGVyYW5kVmFsdWVQcm9maWxlczsKLSNlbmRpZgotICAgIFJlZkNvdW50ZWRBcnJheTxW
YWx1ZVByb2ZpbGU+IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzOwotICAgIFJlZkNvdW50ZWRBcnJh
eTxWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8UmFy
ZUNhc2VQcm9maWxlLCA4PiBtX3JhcmVDYXNlUHJvZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5
PEFycmF5QWxsb2NhdGlvblByb2ZpbGU+IG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXM7Ci0gICAg
QXJyYXlQcm9maWxlVmVjdG9yIG1fYXJyYXlQcm9maWxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU+IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzOwotCi0g
ICAgLy8gQ29uc3RhbnQgUG9vbAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3Rlcikg
PT0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9z
aXplX2FzX1dyaXRlQmFycmllcl9Vbmtub3duKTsKLSAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1
c3QgYmUgYSBwb2ludGVyIHRvIG1fdW5saW5rZWRDb2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERG
RyBtdXRhdGVzCi0gICAgLy8gaXQsIHNvIHdlJ3JlIHN0dWNrIHdpdGggaXQgZm9yIG5vdy4KLSAg
ICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAg
IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOwotICAgIFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPj4gbV9mdW5jdGlvbkRlY2xzOwotICAgIFJlZkNvdW50ZWRBcnJheTxXcml0ZUJh
cnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwotCi0gICAgV3JpdGVC
YXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKLSAgICAKLSAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwotCi0gICAgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7Ci0gICAgdWludDMyX3QgbV9vc3JFeGl0Q291
bnRlcjsKLSAgICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKLSAgICB1aW50
MTZfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotCi0gICAgc3RkOjpjaHJvbm86OnN0
ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2NyZWF0aW9uVGltZTsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3NBbmFseXNpczsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKLQotICAgIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwotICAgIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwotfTsKLQogLy8gUHJvZ3JhbSBjb2Rl
IGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2Jq
ZWN0CiAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAogY2xhc3MgR2xvYmFsQ29kZUJs
b2NrIDogcHVibGljIENvZGVCbG9jayB7CiAgICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKLSAg
ICBERUNMQVJFX0lORk87CiAKIHByb3RlY3RlZDoKICAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxv
Y2smIG90aGVyKQpAQCAtMTA2OSwzMDcgKzUxLDQgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAK
LWNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsK
LQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgUHJvZ3Jh
bUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFt
Q29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2
bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhl
cik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9j
aywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFByb2dyYW1FeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ss
Ci0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVD
b2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25l
ckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBp
bnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhl
cikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBK
U1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxv
Y2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotCi1jbGFzcyBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAg
ICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAg
ICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgICAgIE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQot
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2Nv
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1
Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLQotY2xhc3MgRXZhbENvZGVCbG9jayA6
IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgR2xvYmFsQ29k
ZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEV2YWxDb2RlQmxv
Y2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEV2
YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFy
c2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwg
Q29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRXZhbEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0g
ICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVyZS5n
ZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVBy
b3ZpZGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+dmFyaWFibGUoaW5kZXgpOyB9Ci0gICAgdW5z
aWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPm51
bVZhcmlhYmxlcygpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEV2YWxDb2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2Nr
JiBvdGhlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotICAgICAgICAKLSAgICBFdmFsQ29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAg
ICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCAxKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQot
cHJpdmF0ZToKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENvZGVCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxvY2sqPih1bmxpbmtl
ZENvZGVCbG9jaygpKTsgfQotfTsKLQotY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMg
Q29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOwotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZNKiB2
bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCi0gICAgewot
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAotICAgICAgICBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1
bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgICAgICBGdW5jdGlvbkNv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNv
ZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sodm0sIHZt
LT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0
TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0s
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9j
ayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29w
ZSogc2NvcGUsCi0gICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZp
cnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7Ci19OwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotY2xhc3Mg
V2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBX
ZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBX
ZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCi0gICAgewotICAgICAgICBXZWJBc3NlbWJseUNv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2so
dm0sIHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJs
b2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQ
YXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVhcCkpCi0g
ICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViQXNz
ZW1ibHlDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQot
ICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKLX07Ci0jZW5kaWYKLQotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6
OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJs
b2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgp
KQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQot
Ci1pbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewot
ICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0
YXRlOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhpc1tpbmRleF07Ci19
Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rl
ciByZWcpCi17Ci0gICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgpKTsKLX0KLQotaW5s
aW5lIHZvaWQgQ29kZUJsb2NrOjpjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgpCi17Ci0g
ICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiYgZnVuY3RvcikK
LXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBl
OiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVC
bG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxv
Y2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9j
ayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVU
eXBlOiB7Ci0gICAgICAgIEZ1bmN0b3IgZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5n
ZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYp
OwotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpCi0gICAgICAg
ICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlwZTogewotICAg
ICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2Rl
QmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFeGVjdXRhYmxlVHlwZT4KLUpTT2Jq
ZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKFZNJiB2bSwgSlNGdW5j
dGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIENvZGVCbG9jayomIHJlc3VsdENvZGVCbG9jaykKLXsKLSAgICBpZiAoaGFzSklUQ29kZUZv
cihraW5kKSkgewotICAgICAgICBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBFdmFs
RXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0
PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7
Ci0gICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgUHJvZ3JhbUV4
ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxD
b2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkp
OwotICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBq
c0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcykt
PmNvZGVCbG9jaygpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVU
eXBlLCBGdW5jdGlvbkV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdENvZGVC
bG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhp
cyktPmNvZGVCbG9ja0ZvcihraW5kKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICByZXR1cm4gcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwodm0sIGZ1bmN0aW9uLCBzY29wZSwg
a2luZCwgcmVzdWx0Q29kZUJsb2NrKTsKLX0KLQotI2RlZmluZSBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgc3VtbWFyeSwgZGV0YWlscykgXAotICAgIChjb2RlQmxvY2stPnZtKCktPmxv
Z0V2ZW50KGNvZGVCbG9jaywgc3VtbWFyeSwgWyZdICgpIHsgcmV0dXJuIHRvQ1N0cmluZyBkZXRh
aWxzOyB9KSkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyMDgzMDMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwOjIwODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2NjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2gg
PGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKKyNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRp
b24uaCIKKyNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCisjaW5jbHVk
ZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRl
ICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJE
RkdEcml2ZXIuaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCIKKyNpbmNsdWRlICJHZXRQdXRJbmZvLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKSVQuaCIKKyNpbmNs
dWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAi
SlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUg
IkxMSW50RW50cnlwb2ludC5oIgorI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlN0YWNrVmlzaXRv
ci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0
aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJVbmxpbmtl
ZEluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMu
aD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KKwor
I2lmIEVOQUJMRShKSVQpCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKERGR19KSVQpCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBDb2RlQmxvY2s6OnNfaW5m
byA9IHsKKyAgICAiQ29kZUJsb2NrIiwgMCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKENv
ZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZv
ID0geworICAgICJGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JF
QVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkNvZGVCbG9jaykKK307CisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9
IHsKKyAgICAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlDb2RlQmxvY2spCit9OworI2VuZGlmCisKK2Nv
bnN0IENsYXNzSW5mbyBHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiR2xvYmFsQ29k
ZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2Jh
bENvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBQcm9ncmFtQ29kZUJsb2NrOjpzX2lu
Zm8gPSB7CisgICAgIlByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUNvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5m
byBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIk1vZHVsZVByb2dyYW1D
b2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBFdmFsQ29kZUJsb2Nr
OjpzX2luZm8gPSB7CisgICAgIkV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAg
IENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbENvZGVCbG9jaykKK307CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxGdW5jdGlvbkNv
ZGVCbG9jayo+KGNlbGwpLT5+RnVuY3Rpb25Db2RlQmxvY2soKTsKK30KKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKK3ZvaWQgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIGpzQ2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5+V2ViQXNz
ZW1ibHlDb2RlQmxvY2soKTsKK30KKyNlbmRpZgorCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oY2Vs
bCktPn5Qcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3ZvaWQgTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sqPihjZWxsKS0+fk1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9pZCBFdmFs
Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8RXZhbENvZGVC
bG9jayo+KGNlbGwpLT5+RXZhbENvZGVCbG9jaygpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6
aW5mZXJyZWROYW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBj
YXNlIEdsb2JhbENvZGU6CisgICAgICAgIHJldHVybiAiPGdsb2JhbD4iOworICAgIGNhc2UgRXZh
bENvZGU6CisgICAgICAgIHJldHVybiAiPGV2YWw+IjsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToK
KyAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAg
ICAgIHJldHVybiAiPG1vZHVsZT4iOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZUJsb2Nr
OjpoYXNIYXNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2hhc2g7Cit9CisKK2Jvb2wgQ29k
ZUJsb2NrOjppc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWlzQ29t
cGlsYXRpb25UaHJlYWQoKTsKK30KKworQ29kZUJsb2NrSGFzaCBDb2RlQmxvY2s6Omhhc2goKSBj
b25zdAoreworICAgIGlmICghbV9oYXNoKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzU2Fm
ZVRvQ29tcHV0ZUhhc2goKSk7CisgICAgICAgIG1faGFzaCA9IENvZGVCbG9ja0hhc2gob3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAg
fQorICAgIHJldHVybiBtX2hhc2g7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2Rl
Rm9yVG9vbHMoKSBjb25zdAoreworICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkK
KyAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1VURjgo
KTsKKyAgICAKKyAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKTsKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpOworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1
bmxpbmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOworICAgIHVuc2lnbmVk
IHVubGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKKyAgICB1bnNp
Z25lZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0
KCk7CisgICAgaW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxpbmtlZFN0YXJ0T2Zm
c2V0OworICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSArIHVubGlua2VkLT51bmxpbmtl
ZEZ1bmN0aW9uTmFtZVN0YXJ0KCk7CisgICAgdW5zaWduZWQgcmFuZ2VFbmQgPSBkZWx0YSArIHVu
bGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0aCgpOworICAgIHJl
dHVybiB0b0NTdHJpbmcoCisgICAgICAgICJmdW5jdGlvbiAiLAorICAgICAgICBwcm92aWRlci0+
c291cmNlKCkuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFuZ2VTdGFydCkudXRm
OCgpKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9uZUxpbmUoKSBjb25z
dAoreworICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVGb3JUb29scygpKTsK
K30KKworQ1N0cmluZyBDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAor
eworICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgpKQorICAgICAgICBy
ZXR1cm4gdG9DU3RyaW5nKGhhc2goKSk7CisgICAgcmV0dXJuICI8bm8taGFzaD4iOworfQorCit2
b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYgb3V0LCBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGluZmVycmVkTmFt
ZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7CisgICAgb3V0LnByaW50KCI6WyIs
IFJhd1BvaW50ZXIodGhpcyksICItPiIpOworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAg
ICAgIG91dC5wcmludChSYXdQb2ludGVyKGFsdGVybmF0aXZlKCkpLCAiLT4iKTsKKyAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGppdFR5cGUsIGNvZGVU
eXBlKCkpOworCisgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBv
dXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIG91dC5wcmludCgiLCAiLCBpbnN0
cnVjdGlvbkNvdW50KCkpOworICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCisgICAgICAgIG91dC5wcmludCgi
IChTaG91bGRBbHdheXNCZUlubGluZWQpIik7CisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5uZXZlcklubGluZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUpIik7
CisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGltaXplKCkpCisgICAg
ICAgIG91dC5wcmludCgiIChOZXZlck9wdGltaXplKSIpOworICAgIGVsc2UgaWYgKG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5uZXZlckZUTE9wdGltaXplKCkpCisgICAgICAgIG91dC5wcmludCgi
IChOZXZlckZUTE9wdGltaXplKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+
ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQorICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9FbnRl
ckluTG9vcCkiKTsKKyAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKKyAgICBpZiAobV9kaWRG
YWlsSklUQ29tcGlsYXRpb24pCisgICAgICAgIG91dC5wcmludCgiIChKSVRGYWlsKSIpOworICAg
IGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb24pCisgICAgICAgIG91dC5wcmludCgiIChGVExGYWlsKSIpOworICAgIGlm
ICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKQorICAgICAgICBvdXQucHJpbnQoIiAoSGFkRlRMUmVwbGFjZW1lbnQpIik7
CisgICAgb3V0LnByaW50KCJdIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEFzc3VtaW5nSklUVHlwZShvdXQsIGppdFR5cGUo
KSk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKK3sKKyAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQiLCBp
ZDAsICIpIik7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5hbWUoaW50IHIpIGNv
bnN0Cit7CisgICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQorICAgICAgICByZXR1
cm4gY29uc3RhbnROYW1lKHIpOworCisgICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVnaXN0
ZXIocikpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6Y29uc3RhbnROYW1lKGludCBpbmRleCkg
Y29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnQoaW5kZXgpOworICAgIHJl
dHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIikiKTsK
K30KKworc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdFeHAp
Cit7CisgICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAgfTsKKyAgICBpbnQg
aW5kZXggPSAxOworICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQorICAgICAgICBwb3N0Zml4W2lu
ZGV4KytdID0gJ2cnOworICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkKKyAgICAgICAgcG9z
dGZpeFtpbmRleCsrXSA9ICdpJzsKKyAgICBpZiAocmVnRXhwLT5tdWx0aWxpbmUoKSkKKyAgICAg
ICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7CisgICAgaWYgKHJlZ0V4cC0+c3RpY2t5KCkpCisgICAg
ICAgIHBvc3RmaXhbaW5kZXgrK10gPSAneSc7CisgICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKQor
ICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOworCisgICAgcmV0dXJuIHRvQ1N0cmluZygi
LyIsIHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Cit9CisKK3N0YXRpYyBDU3Ry
aW5nIHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKK3sKKyAgICByZXR1cm4gdG9D
U3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUsICIpIik7Cit9
CisKK05FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb29rTmFtZShpbnQgZGVi
dWdIb29rVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERlYnVnSG9va1R5cGU+KGRl
YnVnSG9va1R5cGUpKSB7CisgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CisgICAgICAg
ICAgICByZXR1cm4gImRpZEVudGVyQ2FsbEZyYW1lIjsKKyAgICAgICAgY2FzZSBXaWxsTGVhdmVD
YWxsRnJhbWU6CisgICAgICAgICAgICByZXR1cm4gIndpbGxMZWF2ZUNhbGxGcmFtZSI7CisgICAg
ICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIndpbGxF
eGVjdXRlU3RhdGVtZW50IjsKKyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4cHJlc3Npb246Cisg
ICAgICAgICAgICByZXR1cm4gIndpbGxFeGVjdXRlRXhwcmVzc2lvbiI7CisgICAgICAgIGNhc2Ug
V2lsbEV4ZWN1dGVQcm9ncmFtOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxsRXhlY3V0ZVByb2dy
YW0iOworICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgorICAgICAgICAgICAgcmV0dXJu
ICJkaWRFeGVjdXRlUHJvZ3JhbSI7CisgICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3BvaW50Ogor
ICAgICAgICAgICAgcmV0dXJuICJkaWRSZWFjaEJyZWFrcG9pbnQiOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit2b2lkIENv
ZGVCbG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywg
aW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKK3sK
KyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgb3ApOworICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludEJp
bmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKK3sKKyAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBp
bnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjIpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludENvbmRpdGlvbmFsSnVt
cChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkKK3sK
KyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgb2Zmc2V0ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCBvcCk7CisgICAgb3V0LnByaW50ZigiJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworfQorCit2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQg
bG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCit7CisgICAgY29uc3QgY2hhciogb3A7
CisgICAgc3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNv
ZGUpKSB7CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIG9wID0gImdldF9ieV9pZCI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6CisgICAg
ICAgIG9wID0gImdldF9ieV9pZF9wcm90b19sb2FkIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfdW5zZXQ6CisgICAgICAgIG9wID0gImdldF9ieV9pZF91bnNldCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAgICAgb3Ag
PSAiYXJyYXlfbGVuZ3RoIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURF
UlNfVU5SRUFDSEFCTEVfQ09ERSkKKyAgICAgICAgb3AgPSAwOworI2VuZGlmCisgICAgfQorICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7CisgICAgaXQgKz0gNDsgLy8g
SW5jcmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KK30KKworc3RhdGljIHZvaWQgZHVt
cFN0cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1lLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgaWYgKCFzdHJ1Y3R1
cmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnRmKCIlcyA9ICVwIiwgbmFt
ZSwgc3RydWN0dXJlKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldENvbmN1cnJlbnRseShpZGVudC5pbXBsKCkpOworICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkKKyAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAlZCkiLCBvZmZzZXQp
OworfQorCitzdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91dCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICBvdXQucHJpbnRm
KCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGZv
ciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+aGVh
ZCgpOworICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7CisgICAgICAgICArK2N1cnJlbnRTdHJ1
Y3R1cmUpIHsKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgZHVt
cFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBjdXJyZW50U3RydWN0dXJlLT5nZXQoKSwgaWRlbnQp
OworICAgIH0KKyAgICBvdXQucHJpbnRmKCJdIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmlu
dEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGlu
dCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKK3sKKyAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRpb247CisKKyAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oaWRlbnQpOyAvLyB0ZWxsIHRoZSBjb21waWxl
ciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29uZmlndXJhdGlvbnMuCisgICAgCisg
ICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlKSA9PSBvcF9nZXRfYXJyYXlfbGVuZ3RoKQorICAgICAgICBvdXQucHJpbnRmKCIgbGxp
bnQoYXJyYXlfbGVuZ3RoKSIpOworICAgIGVsc2UgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
ID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7
CisgICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKKyAgICAgICAgZHVtcFN0cnVjdHVyZShv
dXQsICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgb3V0LnByaW50ZigiKSIp
OworICAgICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rp
b25bMF0udS5vcGNvZGUpID09IG9wX2dldF9ieV9pZF9wcm90b19sb2FkKQorICAgICAgICAgICAg
b3V0LnByaW50ZigiIHByb3RvKCVwKSIsIGluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7CisgICAg
fQorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQdHIg
PSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8gPSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0QnlH
QykKKyAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKKyAgICAgICAgCisg
ICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7CisgICAgICAgICAgICAKKyAgICAgICAgU3RydWN0
dXJlKiBiYXNlU3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3Mq
IHN0dWIgPSBudWxscHRyOworICAgICAgICAgICAgCisgICAgICAgIHN3aXRjaCAoc3R1YkluZm8u
Y2FjaGVUeXBlKSB7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAg
ICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKKyAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBz
dHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCJzdHViIik7CisgICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5zdHViOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAg
ICAgIG91dC5wcmludGYoInVuc2V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgorICAgICAgICAgICAgb3V0LnByaW50ZigiQXJyYXlM
ZW5ndGgiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUpIHsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwg
InN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzdHViKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsKKworICAgICAgICBv
dXQucHJpbnRmKCIpIik7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyNl
bmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRT
dHJlYW0mIG91dCwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQoreworICAg
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBsb2Nh
dGlvbjsKKworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgIAorICAgIFVOVVNFRF9QQVJBTShpZGVudCk7IC8vIHRl
bGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25maWd1cmF0
aW9ucy4KKworICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbls4XS51LnB1dEJ5SWRGbGFn
cyk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25b
NF0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0t
PmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CisgICAgICAgIG91dC5w
cmludCgiIGxsaW50KCIpOworICAgICAgICBpZiAoU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQg
PSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCk7CisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHJ1Y3R1
cmUsIGlkZW50KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAgICAgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIG5ld1N0cnVjdHVyZSwgaWRlbnQpOworICAgICAgICAg
ICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0dXJl
Q2hhaW4uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAg
ICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0
cnVjdHVyZSwgaWRlbnQpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICB9CisKKyNpZiBF
TkFCTEUoSklUKQorICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0ciA9IG1hcC5nZXQo
Q29kZU9yaWdpbihsb2NhdGlvbikpKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbyA9ICpzdHViUHRyOworICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRCeUdDKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdDKSIpOworICAgICAgICAKKyAgICAgICAgb3V0
LnByaW50ZigiIGppdCgiKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uY2Fj
aGVUeXBlKSB7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKKyAgICAg
ICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7CisgICAgICAgICAgICBkdW1wU3RydWN0dXJl
KG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgaWRlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBl
OjpTdHViOiB7CisgICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpzdHViSW5mby51LnN0
dWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgorICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG91dC5w
cmludGYoIikiKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtYXApOworI2VuZGlm
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVj
U3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3Qg
Y2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCit7CisgICAgaW50IGRzdCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
aW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShkc3QpLCAiLCAi
LCByZWdpc3Rlck5hbWUoZnVuYyksICIsICIsIGFyZ0NvdW50LCAiLCAiLCByZWdpc3Rlck9mZnNl
dCk7CisgICAgb3V0LnByaW50KCIgKHRoaXMgYXQgIiwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCwgLXJlZ2lzdGVyT2Zmc2V0KSwgIikiKTsKKyAgICBpZiAoY2FjaGVEdW1wTW9kZSA9PSBE
dW1wQ2FjaGVzKSB7CisgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBp
dFsxXS51LmNhbGxMaW5rSW5mbzsKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+bGFzdFNlZW5D
YWxsZWUpIHsKKyAgICAgICAgICAgIG91dC5wcmludGYoCisgICAgICAgICAgICAgICAgIiBsbGlu
dCglcCwgZXhlYyAlcCkiLAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5D
YWxsZWUuZ2V0KCksCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxl
ZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShKSVQpCisgICAgICAgIGlm
IChDYWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgewor
ICAgICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNlZW5DYWxsZWUoKTsK
KyAgICAgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIGpp
dCglcCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpGVExKSVQpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IodGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFS
QU0obWFwKTsKKyNlbmRpZgorICAgIH0KKyAgICArK2l0OworICAgICsraXQ7CisgICAgZHVtcEFy
cmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIGR1bXBWYWx1
ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywg
aW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKK3sK
KyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgaWQwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlm
aWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgIGl0ICs9IDU7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkKK3sKKyAgICBkdW1wU291cmNlKFdU
Rjo6ZGF0YUZpbGUoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKFByaW50U3Ry
ZWFtJiBvdXQpCit7CisgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJs
ZSgpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
cmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAg
ICAgU3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3Zp
ZGVyKCktPmdldFJhbmdlKAorICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0
ZXJzU3RhcnRPZmZzZXQoKSwKKyAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+dHlwZVBy
b2ZpbGluZ0VuZE9mZnNldCgpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5nIGVuZCBvZmZzZXQgaXMg
dGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KKyAgICAgICAgCisgICAgICAgIG91dC5wcmlu
dCgiZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCksIHNvdXJjZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgb3V0LnByaW50KGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZpZXcoKSk7Cit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoKQoreworICAgIGR1bXBCeXRlY29kZShXVEY6
OmRhdGFGaWxlKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtJiBvdXQpCit7CisgICAgLy8gV2Ugb25seSB1c2UgdGhlIEV4ZWNTdGF0ZSogZm9yIHRoaW5n
cyB0aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhlY3V0aW9uLAorICAgIC8vIGxpa2Ug
Y29udmVydGluZyBhIEpTU3RyaW5nIHRvIGEgU3RyaW5nLiBIZW5jZSB0aGUgZ2xvYmFsRXhlYyBp
cyBhcHByb3ByaWF0ZS4KKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOworICAgIAorICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBpICs9IG9wY29k
ZUxlbmd0aHNbZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zKClb
aV0udS5vcGNvZGUpXSkKKyAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50OworCisgICAgb3V0LnBy
aW50KCp0aGlzKTsKKyAgICBvdXQucHJpbnRmKAorICAgICAgICAiOiAlbHUgbV9pbnN0cnVjdGlv
bnM7ICVsdSBieXRlczsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIocyk7ICVk
IHZhcmlhYmxlKHMpIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCisgICAgICAgIG1fbnVt
UGFyYW1ldGVycywgbV9udW1DYWxsZWVMb2NhbHMsIG1fbnVtVmFycyk7CisgICAgb3V0LnByaW50
KCI7IHNjb3BlIGF0ICIsIHNjb3BlUmVnaXN0ZXIoKSk7CisgICAgb3V0LnByaW50ZigiXG4iKTsK
KyAgICAKKyAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7CisgICAgQ2FsbExpbmtJbmZvTWFwIGNh
bGxMaW5rSW5mb3M7CisgICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKKyAgICBnZXRDYWxs
TGlua0luZm9NYXAoY2FsbExpbmtJbmZvcyk7CisgICAgCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiog
ZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7CisgICAgZm9yIChjb25zdCBJbnN0cnVjdGlvbiog
aXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBkdW1wQnl0ZWNvZGUob3V0LCBl
eGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7CisgICAgCisgICAgaWYg
KG51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBvdXQucHJpbnRmKCJcbklkZW50aWZp
ZXJzOlxuIik7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgb3V0LnByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwg
aWRlbnRpZmllcihpKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraTsK
KyAgICAgICAgfSB3aGlsZSAoaSAhPSBudW1iZXJPZklkZW50aWZpZXJzKCkpOworICAgIH0KKwor
ICAgIGlmICghbV9jb25zdGFudFJlZ2lzdGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnBy
aW50ZigiXG5Db25zdGFudHM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICBk
byB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNj
cmlwdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICBzd2l0Y2ggKG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uW2ldKSB7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6RG91YmxlOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGRvdWJsZSI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50
ZWdlcjoKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlv
biA9ICI6IGluIHNvdXJjZSBhcyBpbnRlZ2VyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjoKKyAgICAgICAg
ICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9ICIiOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50Zigi
ICAgayV1ID0gJXMlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0b0NTdHJpbmcobV9j
b25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpLCBzb3VyY2VDb2RlUmVwcmVzZW50YXRp
b25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgfQorCisgICAgaWYgKHNpemVfdCBjb3Vu
dCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgeworICAgICAgICBvdXQucHJp
bnRmKCJcbm1fcmVnZXhwczpcbiIpOworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5saW5rZWRDb2RlLT5yZWdleHAo
aSkpLmRhdGEoKSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBjb3Vu
dCk7CisgICAgfQorCisgICAgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKG91dCk7CisgICAgCisgICAg
aWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7CisgICAg
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIgICUxZCA9IHtcbiIsIGkpOworICAgICAgICAgICAgaW50IGVudHJ5ID0gMDsKKyAgICAgICAg
ICAgIFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuZW5kKCk7CisgICAgICAgICAgICBmb3Ig
KFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmFyZURhdGEtPm1fc3dp
dGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIsICsrZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISppdGVyKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0JTRkID0+
ICUwNGRcbiIsIGVudHJ5ICsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLm1pbiwg
Kml0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAgfVxu
Iik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmFyZURh
dGEgJiYgIW1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgb3V0LnByaW50ZigiXG5TdHJpbmcgU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIgICUxZCA9IHtcbiIsIGkpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJp
bmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgZm9yIChT
dHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiXHRc
dFwiJXNcIiA9PiAlMDRkXG4iLCBpdGVyLT5rZXktPnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZhbHVl
LmJyYW5jaE9mZnNldCk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsKKyAg
ICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOworICAgIH0KKworICAgIG91dC5wcmludGYoIlxuIik7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJlYW0m
IG91dCkKK3sKKyAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiXG5FeGNlcHRpb24gSGFu
ZGxlcnM6XG4iKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVyc1tpXTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlx0ICVkOiB7IHN0YXJ0OiBbJTRkXSBl
bmQ6IFslNGRdIHRhcmdldDogWyU0ZF0gfSAlc1xuIiwKKyAgICAgICAgICAgICAgICBpICsgMSwg
aGFuZGxlci5zdGFydCwgaGFuZGxlci5lbmQsIGhhbmRsZXIudGFyZ2V0LCBoYW5kbGVyLnR5cGVO
YW1lKCkpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOworICAgIH0KK30KKwordm9pZCBDb2RlQmxv
Y2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBib29sJiBoYXNQcmludGVk
UHJvZmlsaW5nKQoreworICAgIGlmIChoYXNQcmludGVkUHJvZmlsaW5nKSB7CisgICAgICAgIG91
dC5wcmludCgiOyAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBvdXQucHJp
bnQoIiAgICAiKTsKKyAgICBoYXNQcmludGVkUHJvZmlsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0
cnVjdGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgKytpdDsKKyAgICBDU3RyaW5n
IGRlc2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIpOwor
ICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICBiZWdp
bkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICBvdXQucHJpbnQo
ZGVzY3JpcHRpb24pOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5nKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQ
cm9maWxpbmcpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAKKyAgICArK2l0OworICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQorICAgICAgICByZXR1
cm47CisgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJvZmlsZS0+YnJpZWZE
ZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOworICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVk
UHJvZmlsaW5nKTsKKyAgICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOworfQorCit2b2lkIENvZGVC
bG9jazo6ZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBu
YW1lLCBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcp
Cit7CisgICAgaWYgKCFwcm9maWxlIHx8ICFwcm9maWxlLT5tX2NvdW50ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworICAgIG91dC5wcmludChuYW1lLCBwcm9maWxlLT5tX2NvdW50ZXIpOworfQorCit2b2lkIENv
ZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBBcml0aFByb2ZpbGUq
IHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCit7CisgICAgaWYgKCFwcm9maWxl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0LnByaW50KCJyZXN1bHRzOiAiLCAqcHJvZmlsZSk7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3AoUHJpbnRTdHJlYW0mIG91
dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBj
aGFyKiBvcCkKK3sKKyAgICBvdXQucHJpbnRmKCJbJTRkXSAlLTE3cyAiLCBsb2NhdGlvbiwgb3Ap
OworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5k
KFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJ
bnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpCit7CisgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnBy
aW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0YSgpKTsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwKKyAg
ICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNh
bGxMaW5rSW5mb3MpCit7CisgICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdpbjsKKyAgICBib29s
IGhhc1ByaW50ZWRQcm9maWxpbmcgPSBmYWxzZTsKKyAgICBPcGNvZGVJRCBvcGNvZGUgPSBleGVj
LT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9zY29wZTogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfc2Nv
cGUiLCByMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hcmd1bWVudF9jb3Vu
dDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJhcmd1bWVudF9jb3VudCIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgrK2l0KS0+dS51bnNpZ25l
ZFZhbHVlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNl
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9y
ZXN0X2xlbmd0aDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJn
ZXRfcmVzdF9sZW5ndGgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9
ICgrK2l0KS0+dS51bnNpZ25lZFZhbHVlOworICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1l
bnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRGdW5jdGlvbiA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3RoaXMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXUsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBjYWNoZWRGdW5jdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX3RoaXM6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9f
dGhpcyIsIHIwKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gKCsraXQpLT51
LnN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsIGNhY2hlKHN0cnVjdCA9ICIsIFJhd1BvaW50ZXIoc3RydWN0dXJl
KSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAoKytpdCktPnUudG9UaGlzU3Rh
dHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2hl
Y2tfdGR6OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm9wX2NoZWNrX3RkeiIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNh
cGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfb2JqZWN0Iik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaW5mZXJyZWRJbmxp
bmVDYXBhY2l0eSk7CisgICAgICAgICAgICArK2l0OyAvLyBTa2lwIG9iamVjdCBhbGxvY2F0aW9u
IHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X25ld19hcnJheTogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXkiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShhcmd2KS5kYXRhKCksIGFyZ2MpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJh
eSBhbGxvY2F0aW9uIHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKKyAgICAgICAgICAgIGludCBkc3Qg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm5ld19hcnJheV93aXRoX3NpemUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlvbiBwcm9m
aWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdf
YXJyYXlfYnVmZmVyOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV9idWZmZXIiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IGFyZ3YsIGFyZ2MpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJheSBhbGxvY2F0aW9u
IHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X25ld19yZWdleHA6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X3JlZ2V4cCIpOwor
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRDb2RlLT5udW1i
ZXJPZlJlZ0V4cHMoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2V4cE5h
bWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX21vdjogeworICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm1vdiIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgICsraXQ7Cisg
ICAgICAgICAgICArK2l0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICsraXQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJv
cF9wcm9maWxlX3R5cGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogeworICAgICAgICAgICAgQmFzaWNCbG9ja0xv
Y2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSAoKytpdCktPnUuYmFzaWNCbG9ja0xvY2F0aW9u
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicHJvZmlsZV9jb250cm9sX2Zsb3ciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslZCwg
JWRdIiwgYmFzaWNCbG9ja0xvY2F0aW9uLT5zdGFydE9mZnNldCgpLCBiYXNpY0Jsb2NrTG9jYXRp
b24tPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJub3QiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJlcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9lcV9udWxsOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJlcV9udWxsIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX25lcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxX251bGwiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKKyAgICAgICAgICAgIHByaW50
QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzdHJpY3RlcSIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uc3RyaWN0ZXE6IHsKKyAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuc3RyaWN0ZXEi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbGVzczog
eworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxl
c3MiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbGVz
c2VxOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibGVzc2VxIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2dyZWF0ZXI6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJncmVhdGVyIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXJlcSIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbmM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJP
cGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5jIiwgcjApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWM6IHsKKyAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5k
UmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVjIiwgcjApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19udW1iZXI6IHsK
KyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX251
bWJlciIpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50
ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF90b19zdHJpbmc6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInRvX3N0cmluZyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lZ2F0ZSIpOworICAgICAgICAgICAgKytpdDsgLy8gb3Bf
bmVnYXRlIGhhcyBhbiBleHRyYSBvcGVyYW5kIGZvciB0aGUgQXJpdGhQcm9maWxlLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJhZGQiKTsKKyAgICAg
ICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX211bDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm11bCIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGl2OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGl2Iik7CisgICAgICAgICAgICArK2l0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJtb2QiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcG93OiB7CisgICAg
ICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicG93Iik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N1YjogeworICAg
ICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN1YiIpOwor
ICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfbHNoaWZ0OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibHNoaWZ0Iik7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICAgICAgcHJpbnRC
aW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJzaGlmdCIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7CisgICAgICAgICAg
ICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidXJzaGlmdCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKKyAg
ICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRhbmQi
KTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2JpdHhvcjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImJpdHhvciIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKKyAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRvciIpOworICAg
ICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3ZlcnJpZGVzX2hhc19p
bnN0YW5jZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIy
KS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9pbnN0YW5jZW9mOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0YW5jZW9mIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluc3RhbmNlb2Zf
Y3VzdG9tIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdW5zaWduZWQ6IHsKKyAgICAgICAgICAgIHBy
aW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVuc2lnbmVkIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3R5cGVvZjogeworICAgICAg
ICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidHlwZW9mIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2VtcHR5OiB7
CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19l
bXB0eSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9p
c191bmRlZmluZWQ6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImlzX3VuZGVmaW5lZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19ib29sZWFuIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfbnVtYmVyIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90
eXBlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHR5cGUgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2NlbGxfd2l0aF90eXBlIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6IHsKKyAgICAgICAgICAg
IHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVjdF9vcl9udWxs
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2Z1
bmN0aW9uOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJpc19mdW5jdGlvbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9pbjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0cnlfZ2V0X2J5X2lkIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkp
LmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoK
KyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Fy
cmF5X2xlbmd0aDogeworICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQpOworICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBleGVj
LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhv
dXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczogeworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lkX3dp
dGhfdGhpcyIpOworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMiku
ZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7CisgICAgICAgICAg
ICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0
aF90aGlzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImdldF9ieV92YWxfd2l0aF90aGlzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsK
KyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmls
aW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0
X2J5X2lkOiB7CisgICAgICAgICAgICBwcmludFB1dEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInB1dF9ieV9pZCIpOworICAgICAgICAgICAgcHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMo
b3V0LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczogeworICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkX3dpdGhfdGhpcyIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZp
ZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlzOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9i
eV92YWxfd2l0aF90aGlzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9pZDog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0
X2dldHRlcl9ieV9pZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5k
YXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9zZXR0ZXJfYnlf
aWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dldHRl
cl9ieV92YWwiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBuMCwgcmVnaXN0
ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0dGVyX2J5X3ZhbCIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlZmluZV9kYXRh
X3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImRlZmluZV9kYXRhX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVmaW5l
X2FjY2Vzc29yX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjMgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByNCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
ZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfaWQiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQw
KSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbCIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgZHVt
cEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAg
ICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJwdXRfYnlfdmFsIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxpbmco
b3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7CisgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRf
YnlfdmFsX2RpcmVjdCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQs
IGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfdmFsIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaW5kZXgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAldSwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3Bfam1wOiB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJq
bXAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVkKC0+JWQpIiwgb2Zmc2V0LCBsb2NhdGlv
biArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2p0cnVlOiB7CisgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMs
IGJlZ2luLCBpdCwgbG9jYXRpb24sICJqdHJ1ZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKKyAgICAgICAgICAgIHByaW50Q29uZGl0
aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpmYWxzZSIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDogewor
ICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxv
Y2F0aW9uLCAiamVxX251bGwiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CisgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVt
cChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqbmVxX251bGwiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgU3BlY2lhbDo6
UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOworICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5lcV9wdHIiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCBwb2ludGVyLCBtX2dsb2JhbE9iamVjdC0+YWN0dWFsUG9pbnRlckZvcihwb2ludGVyKSwg
b2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICArK2l0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImpsZXNzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQs
IGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3Bfamxlc3NlcTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpsZXNzZXEiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImpncmVhdGVyIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogeworICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpn
cmVhdGVyZXEiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwg
bG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9qbmxlc3M6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3MiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImpubGVzc2VxIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7CisgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5ncmVh
dGVyIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0
aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3Bfam5ncmVhdGVyZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXJlcSIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvb3BfaGlu
dDogeworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAibG9vcF9oaW50Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3dhdGNoZG9nOiB7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ3YXRjaGRvZyIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJsb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2lt
bTogeworICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRjaF9p
bW0iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwgJXMiLCB0YWJsZUlu
ZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFt
ZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKKyAgICAgICAgICAgIGludCB0YWJs
ZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdl
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfY2hhciIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0
aW9uICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRh
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0
Y2hfc3RyaW5nOiB7CisgICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
c3dpdGNoX3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+JWQpLCAl
cyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdldCwg
cmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3
X2Z1bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgZjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9uZXdfYXN5bmNfZnVuYzogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1bmMiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Z1bmNf
ZXhwIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhw
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hc3luY19mdW5j
X2V4cCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6IHsK
KyAgICAgICAgICAgIGludCBmdW5jUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgbmFtZVJlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic2V0X2Z1bmN0aW9uX25hbWUiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShmdW5jUmVnKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShuYW1lUmVnKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBwcmludENh
bGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQcmlu
dGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAgICAgICBwcmludENhbGxP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRhaWxfY2FsbCIsIER1bXBDYWNoZXMsIGhhc1By
aW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIHByaW50Q2Fs
bE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMs
IGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOgorICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHM6IHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCB0
aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBhcmd1bWVudHMg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHZhckFyZ09mZnNldCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG9wTmFtZTsKKyAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2FsbF92YXJhcmdzKQorICAg
ICAgICAgICAgICAgIG9wTmFtZSA9ICJjYWxsX3ZhcmFyZ3MiOworICAgICAgICAgICAgZWxzZSBp
ZiAob3Bjb2RlID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQorICAgICAgICAgICAgICAgIG9wTmFt
ZSA9ICJjb25zdHJ1Y3RfdmFyYXJncyI7CisgICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCisgICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxfY2Fs
bF92YXJhcmdzIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cyI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcE5hbWUpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcywgJXMsICVkLCAlZCIsIHJlZ2lzdGVyTmFtZShyZXN1bHQpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVlKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIs
IHZhckFyZ09mZnNldCk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwg
aGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2Ugb3BfcmV0OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJldCIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBwcmludENh
bGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMsIGhh
c1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKKyAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgY291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN0cmNhdCIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY291bnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJ0b19wcmltaXRpdmUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rl
ck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAg
ICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpIC0gMTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9w
ZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJO
YW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cHJvcGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7CisgICAgICAgICAgICBpdCArPSBP
UENPREVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6
IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUg
PSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RF
X0xFTkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7Cisg
ICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJh
c2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRb
M10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KSAt
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9k
aXJlY3RfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBp
dFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzVdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0WzZdLnUucHJvZmls
ZTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm9wX2dldF9kaXJlY3RfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHBy
b2ZpbGUpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZGlyZWN0X3Bu
YW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsx
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9w
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkp
OworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcHJvcGVydHlfZW51bWVy
YXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9Q
Q09ERV9MRU5HVEgob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpIC0gMTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRl
eCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX3RvX2luZGV4X3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0cmluZykgLSAxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXNoX3dpdGhf
c2NvcGU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBuZXdTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGN1cnJlbnRTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUobmV3U2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGN1cnJlbnRT
Y29wZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZ2V0X3BhcmVudF9zY29wZTogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHBhcmVudFNjb3BlID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJnZXRfcGFyZW50X3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMi
LCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwYXJlbnRTY29wZSkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY3Jl
YXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgaW5pdGlhbFZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMi
LCAKKyAgICAgICAgICAgICAgICByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShzY29wZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3ltYm9sVGFibGUpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGluaXRpYWxWYWx1ZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJj
YXRjaCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKKyAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0
ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3ciLCByMCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJv
cjogeworICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBFcnJvclR5cGUgazEgPSBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KCgrK2l0KS0+dS51bnNpZ25l
ZFZhbHVlKTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInRocm93X3N0YXRpY19lcnJvciIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICIsIGNvbnN0YW50TmFtZShrMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludChr
MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlYnVn
OiB7CisgICAgICAgICAgICBpbnQgZGVidWdIb29rVHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGhhc0JyZWFrcG9pbnRGbGFnID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJk
ZWJ1ZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgZGVidWdIb29rTmFtZShk
ZWJ1Z0hvb2tUeXBlKSwgaGFzQnJlYWtwb2ludEZsYWcpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9hc3NlcnQ6IHsKKyAgICAgICAgICAgIGludCBjb25k
aXRpb24gPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBsaW5lID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJhc3NlcnQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCIs
IHJlZ2lzdGVyTmFtZShjb25kaXRpb24pLmRhdGEoKSwgbGluZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VuZDogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdp
c3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbmQiLCByMCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0YXRp
Y19jYXN0PFJlc29sdmVUeXBlPigoKytpdCktPnUub3BlcmFuZCk7CisgICAgICAgICAgICBpbnQg
ZGVwdGggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHZvaWQqIHBvaW50ZXIgPSAo
KytpdCktPnUucG9pbnRlcjsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgInJlc29sdmVfc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsIDwlcz4sICVkLCAlcCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5k
YXRhKCksIHJlc29sdmVUeXBlTmFtZShyZXNvbHZlVHlwZSksIGRlcHRoLCBwb2ludGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQ
dXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFN0cnVjdHVy
ZQorICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3BlcmFu
ZAorICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiZ2V0X2Zyb21fc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludChyZWdpc3Rlck5hbWUo
cjApLCAiLCAiLCByZWdpc3Rlck5hbWUocjEpKTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiwgYW5vbnltb3VzIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkpOworICAgICAgICAgICAgb3V0
LnByaW50KCIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29sdmVNb2RlTmFtZShn
ZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFtZShnZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUoZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSksICI+LCAiLCBvcGVyYW5kKTsKKyAgICAgICAgICAgIGR1bXBW
YWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbygoKytp
dCktPnUub3BlcmFuZCk7CisgICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1cmUKKyAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJhbmQKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF90b19z
Y29wZSIpOworICAgICAgICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShyMCkpOworICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFYKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgcmVnaXN0ZXJOYW1lKHIxKSwgIiwgIiwg
Z2V0UHV0SW5mby5vcGVyYW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8ucmVz
b2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSksICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9u
TW9kZSgpKSwgIj4sIDxzdHJ1Y3R1cmU+LCAiLCBvcGVyYW5kKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiZ2V0X2Zyb21fYXJndW1lbnRzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBvZmZzZXQpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhh
c1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX2FyZ3Vt
ZW50cyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCBvZmZzZXQsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGR1bXBSYXJlQ2FzZVByb2Zp
bGUob3V0LCAicmFyZSBjYXNlOiAiLCByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChs
b2NhdGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIHsKKyAgICAgICAgZHVtcEFyaXRo
UHJvZmlsZShvdXQsIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAg
IFZlY3RvcjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGV4aXRQcm9maWxlKCku
ZXhpdFNpdGVzRm9yKGxvY2F0aW9uKTsKKyAgICBpZiAoIWV4aXRTaXRlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgb3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOworICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0U2l0
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRlc1tp
XS5raW5kKCksICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7CisgICAgfQorI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKyAgICBvdXQucHJpbnQoIlxuIik7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsCisgICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiBjYWxsTGlua0luZm9zKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGl0ID0gaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OworICAgIGR1bXBCeXRlY29kZShvdXQs
IGV4ZWMsIGluc3RydWN0aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5m
b3MpOworfQorCisjZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFjcm8pIFwKKyAgICBt
YWNybyhpbnN0cnVjdGlvbnMpIFwKKyAgICBtYWNybyhjYWxsTGlua0luZm9zKSBcCisgICAgbWFj
cm8obGlua2VkQ2FsbGVyTGlzdCkgXAorICAgIG1hY3JvKGlkZW50aWZpZXJzKSBcCisgICAgbWFj
cm8oZnVuY3Rpb25FeHByZXNzaW9ucykgXAorICAgIG1hY3JvKGNvbnN0YW50UmVnaXN0ZXJzKQor
CisjZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKG1hY3JvKSBcCisgICAg
bWFjcm8ocmVnZXhwcykgXAorICAgIG1hY3JvKGZ1bmN0aW9ucykgXAorICAgIG1hY3JvKGV4Y2Vw
dGlvbkhhbmRsZXJzKSBcCisgICAgbWFjcm8oc3dpdGNoSnVtcFRhYmxlcykgXAorICAgIG1hY3Jv
KHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKKyAgICBtYWNybyhldmFsQ29kZUNhY2hlKSBcCisg
ICAgbWFjcm8oZXhwcmVzc2lvbkluZm8pIFwKKyAgICBtYWNybyhsaW5lSW5mbykgXAorICAgIG1h
Y3JvKGNhbGxSZXR1cm5JbmRleFZlY3RvcikKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRp
YyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCit7CisgICAgcmV0
dXJuIHZlY3Rvci5jYXBhY2l0eSgpICogc2l6ZW9mKFQpOworfQorCituYW1lc3BhY2UgeworCitj
bGFzcyBQdXRUb1Njb3BlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKK3B1YmxpYzoK
KyAgICBQdXRUb1Njb3BlRmlyZURldGFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAg
ICAsIG1faWRlbnQoaWRlbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG91dC5wcmludCgi
TGlua2luZyBwdXRfdG9fc2NvcGUgaW4gIiwgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSksICIg
Zm9yICIsIG1faWRlbnQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50OworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikKKyAg
ICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KG90aGVyLm1f
Z2xvYmFsT2JqZWN0KQorICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxsZWVM
b2NhbHMpCisgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQorICAgICwgbV9zaG91bGRB
bHdheXNCZUlubGluZWQodHJ1ZSkKKyNpZiBFTkFCTEUoSklUKQorICAgICwgbV9jYXBhYmlsaXR5
TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKKyNlbmRpZgorICAgICwgbV9k
aWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlv
bihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCisgICAgLCBtX2lzU3RyaWN0TW9k
ZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKKyAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlw
ZSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhlci5tX3VubGlu
a2VkQ29kZS5nZXQoKSkKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisgICAg
LCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJlYWtw
b2ludHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhl
ci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKKyAgICAsIG1fdm0ob3RoZXIubV92bSkKKyAgICAs
IG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQorICAgICwgbV90aGlzUmVnaXN0
ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIob3RoZXIubV9z
Y29wZVJlZ2lzdGVyKQorICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKKyAgICAsIG1fc291cmNl
KG90aGVyLm1fc291cmNlKQorICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIubV9zb3VyY2VPZmZz
ZXQpCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJlZ2lz
dGVycykKKyAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVyLm1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQorICAgICwgbV9mdW5jdGlvbkRlY2xz
KG90aGVyLm1fZnVuY3Rpb25EZWNscykKKyAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1
bmN0aW9uRXhwcnMpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigw
KQorICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkp
Cit7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsK
KyAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CisKKyAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsKKworICAgIGlmIChvdGhlci5tX3JhcmVEYXRh
KSB7CisgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgCisgICAg
ICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
cyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOworICAgICAgICBtX3JhcmVE
YXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IG90
aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICB9CisgICAgCisg
ICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKK30KKworQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAg
SlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkK
KyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHNjb3Bl
LT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCgpKQorICAg
ICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxz
KQorICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCisgICAgLCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQorI2VuZGlmCisg
ICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1fZGlkRmFpbEZUTENv
bXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQor
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CisgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
CisgICAgLCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKQorICAgICwg
bV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVubGlua2VkQ29kZUJs
b2NrKQorICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBp
bmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVha3BvaW50cygwKQor
ICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93bmVy
RXhlY3V0YWJsZSkKKyAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCisgICAgLCBt
X3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCisgICAgLCBt
X3Njb3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAs
IG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQorICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zm
c2V0KQorICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQorICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1f
Y3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpKQoreworICAgIG1f
dmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKworICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CisgICAgQVNTRVJU
KG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisgICAgQVNTRVJUKG1fc291cmNlKTsKKyAg
ICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwor
fQorCit2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywKKyAgICBKU1Njb3BlKiBzY29wZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisKKyAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigp
KQorICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5k
T2Zmc2V0KCkpOworCisgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSk7CisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xv
YmFsT2JqZWN0KCkpCisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwg
dGhpcywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7CisgICAgICAgIExpbmtUaW1lQ29uc3Rh
bnQgdHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOworICAgICAgICBpZiAo
dW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5yZWdpc3RlckluZGV4
Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSkKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anNDZWxs
Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7CisgICAgfQorCisgICAgLy8gV2UgYWxyZWFkeSBo
YXZlIHRoZSBjbG9uZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50IHNp
bmNlIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUKKyAgICAvLyB0aGUgbW9kdWxlIGVudmlyb25tZW50
cyBiZWZvcmUgbGlua2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0aGUgc3RvcmVkIHN5
bWJvbCB0YWJsZSB3aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCisgICAgaWYgKFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrID0g
anNEeW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih1bmxpbmtlZENv
ZGVCbG9jaykpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJvbFRhYmxlID0ganND
YXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKS0+bW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZSgpOworICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkp
IHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJvbFRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVGb3JU
eXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgIH0KKyAgICAgICAgcmVwbGFjZUNvbnN0YW50
KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xU
YWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUpOworICAgIH0K
KworICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gdm0udHlw
ZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpOworICAgIG1fZnVuY3Rpb25E
ZWNscyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4o
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKKyAgICBmb3IgKHNp
emVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGkpOworICAgICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQor
ICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0
ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ0VuZE9mZnNldCgpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwg
dGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNv
dXJjZSgpKSk7CisgICAgfQorCisgICAgbV9mdW5jdGlvbkV4cHJzID0gUmVmQ291bnRlZEFycmF5
PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZGdW5jdGlvbkV4cHJzKCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJs
ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAgICAgIGlmIChzaG91
bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCisgICAgICAgICAgICB2bS5mdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJs
ZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAg
ICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICB9CisKKyAg
ICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyQ291bnQoKSkgeworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZENvZGVCbG9jazo6Q29uc3RhbnRCdWZmZXImIGJ1ZmZlciA9IHVubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudEJ1ZmZlcihpKTsKKyAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVyc1tpXSA9IGJ1ZmZlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihp
KTsKKyAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgICAgICBo
YW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0
Q29kZVB0cihvcF9jYXRjaCkpKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5p
dGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHVubGlua2Vk
Q29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuYmVnaW4oKTsK
KyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yICg7IHB0ciAhPSBl
bmQ7ICsrcHRyKSB7CisgICAgICAgICAgICAgICAgICAgIE9mZnNldExvY2F0aW9uIG9mZnNldDsK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9IHB0ci0+dmFsdWUuYnJh
bmNoT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZzZXQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXpl
X3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAg
ICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VUYWJsZSA9IHVubGlu
a2VkQ29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7CisgICAgICAgICAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV07
CisgICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBzb3VyY2VUYWJsZS5i
cmFuY2hPZmZzZXRzOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4gPSBzb3VyY2VUYWJs
ZS5taW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGxvY2F0
ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKKyAgICBpZiAoc2l6ZV90IHNpemUg
PSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSkKKyAgICAg
ICAgbV9sbGludENhbGxMaW5rSW5mb3MgPSBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0lu
Zm8+KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZkFycmF5UHJvZmlsZXMoKSkKKyAgICAgICAgbV9hcnJheVByb2ZpbGVzLmdyb3coc2l6ZSk7
CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZXMoKSkKKyAgICAgICAgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlcyA9
IFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPihzaXplKTsKKyAgICBpZiAo
c2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkp
CisgICAgICAgIG1fdmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+
KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpKQorICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmlsZT4oc2l6ZSk7
CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJT
ZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworI2VuZGlmCisKKyAgICAv
LyBDb3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5zdHJ1Y3Rpb25zCisgICAgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5j
b3VudCgpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW06OlJlYWRlciBpbnN0cnVjdGlv
blJlYWRlcih1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOworCisgICAgLy8gQm9v
a2tlZXAgdGhlIHN0cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KKyAgICBI
YXNoU2V0PEpTTW9kdWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZp
cm9ubWVudHM7CisKKyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9u
cyhpbnN0cnVjdGlvbkNvdW50KTsKKworICAgIHVuc2lnbmVkIHZhbHVlUHJvZmlsZUNvdW50ID0g
MDsKKyAgICBhdXRvIGxpbmtWYWx1ZVByb2ZpbGUgPSBbJl0odW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIHVuc2lnbmVkIG9wTGVuZ3RoKSB7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlUHJvZmlsZUlu
ZGV4ID0gdmFsdWVQcm9maWxlQ291bnQrKzsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gJm1fdmFsdWVQcm9maWxlc1t2YWx1ZVByb2ZpbGVJbmRleF07CisgICAgICAgIEFTU0VSVChw
cm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgcHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OworICAgICAgICBpbnN0cnVjdGlvbnNbYnl0ZWNv
ZGVPZmZzZXQgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKKyAgICB9OworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgIWluc3RydWN0aW9uUmVhZGVyLmF0RW5kKCk7ICkgeworICAgICAgICBj
b25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9IGluc3RydWN0aW9uUmVhZGVyLm5leHQoKTsK
KworICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1swXS51Lm9wY29k
ZSk7CisKKyAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gdm0uaW50ZXJwcmV0ZXItPmdldE9wY29k
ZShwY1swXS51Lm9wY29kZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgb3BMZW5n
dGg7ICsraikgeworICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAhPSBzaXplb2YoaW50
cHRyX3QpKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5wb2ludGVyID0g
MDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0udS5v
cGVyYW5kOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsKKyAg
ICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGFy
cmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwor
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVBy
b2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0
aCAtIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2Zp
bGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwor
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRf
ZGlyZWN0X3BuYW1lOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfd2l0aF90aGlzOgorICAgICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6CisgICAgICAgIGNhc2Ugb3BfZ2V0
X2Zyb21fYXJndW1lbnRzOgorICAgICAgICBjYXNlIG9wX3RvX251bWJlcjogeworICAgICAgICAg
ICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCBh
cnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOworICAgICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsK
KyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJv
ZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogeworICAgICAgICAgICAgaW50IGFy
cmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwor
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9m
aWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgICAgICBjYXNlIG9wX25ld19hcnJheV9i
dWZmZXI6CisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogeworICAgICAgICAg
ICAgaW50IGFycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5v
cGVyYW5kOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZXNbYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDog
eworICAgICAgICAgICAgaW50IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXggPSBwY1tvcExl
bmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9ICZtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tv
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGludCBpbmZlcnJlZElu
bGluZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OworICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUodm0sCisg
ICAgICAgICAgICAgICAgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBp
bmZlcnJlZElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAg
ICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwg
b3BMZW5ndGgpOworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5n
dGggLSAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9m
aWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3Bj
WzVdLnUub3BlcmFuZF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XSA9ICZt
X2xsaW50Q2FsbExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgbGlua1Zh
bHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgICAgICBDUkFTSCgpOwor
CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzRdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IExvY2FsQ2xvc3VyZVZh
cik7CisgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwor
CisgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9n
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQs
IEdldCwgdHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CisgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOworICAgICAgICAg
ICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkgeworICAgICAgICAgICAgICAgIGlmIChvcC50
eXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBsaW5r
ZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHMuYWRkKGpzQ2Fz
dDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50KSkuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxleGljYWxFbnZpcm9u
bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwu
c2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9sVGFi
bGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkKKyAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgY29uc3RhbnRTY29w
ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2
XS51LnBvaW50ZXIgPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CisgICAgICAgICAgICBsaW5rVmFsdWVQ
cm9maWxlKGksIG9wTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0
LCBzY29wZSwgaWQsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAorCisgICAgICAgICAg
ICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOworCisgICAgICAgICAgICBHZXRQ
dXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1v
ZGUoKSkpOworICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2Nh
bENsb3N1cmVWYXIpIHsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gR2V0
UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBp
ZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBK
U1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9j
YWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
LCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVz
b2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3Bl
cmFuZCgpOworICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKQorICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJ
bmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25N
b2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8
fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51Lndh
dGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgZWxzZSBpZiAob3Au
c3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGU6IHsKKyAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVlLCBH
ZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0
UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChn
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CisgICAgICAgICAg
ICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGluZyB0
byBpcyBub3QgYW5vbnltb3VzLgorICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkgeworICAgICAgICAgICAgICAgICAg
ICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0
Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxv
Y2tlciwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0g
c3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFs
dWUucHJlcGFyZVRvV2F0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVu
dGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRo
ID0gcGNbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnBv
aW50ZXIgPSBudWxscHRyOworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJz
dHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0
aCwgc2NvcGUsIGlkZW50LCBQdXQsIGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5
cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKKyAgICAgICAg
ICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50
U2V0OworICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3Aud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgICAgICAgICAgb3Aud2F0Y2hwb2lu
dFNldC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhpcywgaWRlbnQpKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTogeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOworICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBv
ZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxlX3R5cGUgcmVnVG9Qcm9maWxlLCBUeXBl
TG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/CisgICAgICAgICAgICBz
aXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOworICAgICAgICAgICAg
dW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7CisgICAgICAgICAgICBHbG9iYWxWYXJpYWJs
ZUlEIGdsb2JhbFZhcmlhYmxlSUQgPSAwOworICAgICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IGds
b2JhbFR5cGVTZXQ7CisgICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2Vk
Q29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVj
dGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUHJv
ZmlsZVR5cGVCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2ZpbGVUeXBlQnl0ZWNv
ZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgc3dpdGNoIChmbGFnKSB7CisgICAgICAg
ICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5
cGU+KHBjWzVdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdHlw
ZSBwcm9maWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3IgYSBQdXQsIHdlIGNh
biBhbHdheXMgY2xhaW0gYSBHZXQgYmVjYXVzZQorICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGFi
c3RyYWN0bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgorICAgICAgICAgICAgICAgIFJlc29s
dmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0aWFs
aXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKworICAgICAgICAgICAgICAgIGlmIChv
cC50eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIpCisgICAgICAgICAg
ICAgICAgICAgIHN5bWJvbFRhYmxlID0gb3AubGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJs
ZSgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQorICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1i
b2xUYWJsZSgpOworCisgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwgPSAo
b3AudHlwZSA9PSBNb2R1bGVWYXIpID8gb3AuaW1wb3J0ZWROYW1lLmdldCgpIDogaWRlbnQuaW1w
bCgpOworICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGls
ZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBw
cm9maWxpbmcgeWV0LgorICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZv
clR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFi
bGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0p
OworICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2Jh
bFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxl
ck5vR2xvYmFsSURFeGlzdHM7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDog
eworICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNbMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1i
b2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVh
dGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFy
ZWQgZm9yIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2
bSk7CisgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxU
eXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKKworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlw
ZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRDogCisgICAgICAgICAgICBjYXNlIFByb2ZpbGVU
eXBlQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgZ2xvYmFsVmFy
aWFibGVJRCA9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNv
ZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG93bmVyRXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSk7CisgICAgICAgICAg
ICAgICAgZ2xvYmFsVHlwZVNldCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUpLT5yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7CisgICAgICAgICAgICAgICAgZ2xv
YmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudDsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNob3VsZEFuYWx5emUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVz
ZSBhIHJldHVybiBzdGF0ZW1lbnQgY2FuIGJlIGFkZGVkIGltcGxpY2l0bHkgdG8gcmV0dXJuIHVu
ZGVmaW5lZCBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2VzIGJlY2F1c2UgdGhl
eSBhcmVuJ3QgaW4gdGhlIGFjdHVhbCBzb3VyY2UgdGV4dCBvZgorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgdXNlcidzIHByb2dyYW0sIGdpdmUgdGhlIHR5cGUgcHJvZmlsZXIgc29tZSByYW5n
ZSB0byBpZGVudGlmeSB0aGVzZSByZXR1cm4gc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ3VycmVudGx5LCB0aGUgdGV4dCBvZmZzZXQgdGhhdCBpcyB1c2VkIGFzIGlkZW50aWZp
Y2F0aW9uIGlzICJmIiBpbiB0aGUgZnVuY3Rpb24ga2V5d29yZAorICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgaXMgc3RvcmVkIG9uIFR5cGVMb2NhdGlvbidzIG1fZGl2b3RGb3JGdW5jdGlvbk9m
ZnNldElmUmV0dXJuU3RhdGVtZW50IG1lbWJlciB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAg
ICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwg
Ym9vbD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hl
KCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAorICAgICAgICAgICAgICAgIG93
bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5
cGVTZXQsICZ2bSk7CisgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRp
b25QYWlyLmZpcnN0OworICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLnNlY29uZDsKKworICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmlsZVR5cGVCeXRlY29k
ZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQorICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rp
dm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVyRXhlY3V0YWJsZS0+
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRBbmFs
eXplICYmIGlzTmV3TG9jYXRpb24pCisgICAgICAgICAgICAgICAgdm0udHlwZVByb2ZpbGVyKCkt
Pmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKKyAgICAgICAgICAgIGlmIChwY1sxXS51
LmluZGV4ID09IERpZFJlYWNoQnJlYWtwb2ludCkKKyAgICAgICAgICAgICAgICBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogeworICAgICAgICAgICAgaW50IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPT0gbnVtUGFyYW1ldGVycygpIC0gMSwgIldlIGFzc3VtZSB0aGF0IHRo
aXMgaXMgdHJ1ZSB3aGVuIHJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdCBwYXJhbWV0ZXIgZHVyaW5n
IE9TUiBleGl0IGluIHRoZSBGVEwgSklULiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaSArPSBvcExlbmd0aDsKKyAgICB9CisKKyAgICBpZiAodm0uY29udHJvbEZsb3dQcm9m
aWxlcigpKQorICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93
UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsKKworICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShp
bnN0cnVjdGlvbnMpOworCisgICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJlc2hvbGRzIG9ubHkg
YWZ0ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZXNlCisgICAgLy8g
cmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRl
ZCB0byBhbHNvIGluc3BlY3QgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUg
YWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgorICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKKyAgICBqaXRBZnRlcldhcm1VcCgpOworCisgICAgLy8gSWYgdGhlIGNvbmN1cnJl
bnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBp
dCBoZXJlCisgICAgLy8gc3luY2hyb25vdXNseS4KKyAgICBpZiAoT3B0aW9uczo6YWx3YXlzQ29t
cHV0ZUhhc2goKSkKKyAgICAgICAgaGFzaCgpOworCisgICAgaWYgKE9wdGlvbnM6OmR1bXBHZW5l
cmF0ZWRCeXRlY29kZXMoKSkKKyAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CisgICAgCisgICAgaGVh
cCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKKyAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikp
OworfQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0NlbGwoKnZt
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIHRo
aXMsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDApCisgICAgLCBtX251
bVZhcnMoMCkKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNlKQorI2lmIEVOQUJM
RShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fubm90Q29tcGlsZSkK
KyNlbmRpZgorICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2Rp
ZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TChmYWxzZSkKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKKyAgICAsIG1faXNTdHJpY3RN
b2RlKGZhbHNlKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCisgICAgLCBtX2hhc0Rl
YnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2Rl
RGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0
YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQorICAgICwg
bV92bSh2bSkKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCisg
ICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkKK3sK
KyAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9i
amVjdCopCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgaGVhcCgpLT5t
X2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKK30KKyNlbmRpZgorCitDb2RlQmxvY2s6On5Db2RlQmxv
Y2soKQoreworICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CisKKyAg
ICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBNaXhlZFRyaVN0YXRl
KQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6ZShGYWxzZVRyaVN0
YXRlKTsKKworI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCisgICAgZHVtcFZhbHVl
UHJvZmlsZXMoKTsKKyNlbmRpZgorCisgICAgLy8gV2UgbWF5IGJlIGRlc3Ryb3llZCBiZWZvcmUg
YW55IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUgZGVzdHJveWVkLgorICAgIC8vIENv
bnNpZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVucmVhY2hhYmxlIGF0IHRoZSBzYW1l
IHRpbWUuIFRoZXJlCisgICAgLy8gaXMgbm8gZ3VhcmFudGVlIGFib3V0IHRoZSBvcmRlciBpbiB3
aGljaCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgorICAgIC8vIFNvLCBpZiB3ZSBkb24n
dCByZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVzdHJveWVkIGJlZm9yZSB0aGUKKyAg
ICAvLyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGludG8gdXMsIHRoZW4gdGhlIENhbGxM
aW5rSW5mbyB2ZWN0b3IncworICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkgdG8gcmVtb3ZlIG5v
ZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0LgorICAgIHVubGlua0lu
Y29taW5nQ2FsbHMoKTsKKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxz
IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAgLy8gbV9pbmNvbWlu
Z0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlu
a0luZm8KKyAgICAvLyBkZXN0cnVjdG9ycy4KKworI2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChC
YWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAq
aXRlcjsKKyAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOworICAgICAgICBzdHViLT5kZXJlZigp
OworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCit2b2lkIENvZGVCbG9jazo6c2V0
Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKK3sKKyAgICBBU1NFUlQoY29uc3RhbnRzLnNpemUo
KSA9PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6ZSgpKTsKKyAgICBzaXpl
X3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOworICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVz
aXplVG9GaXQoY291bnQpOworICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVyID0gISFtX3ZtLT50eXBl
UHJvZmlsZXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAg
ICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsKKworICAgICAgICBp
ZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPihjb25zdGFudCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7CisgICAgICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2Vy
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogY2xv
bmUgPSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOworICAgICAgICAgICAgICAg
IGlmICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKKworICAgICAgICAgICAgICAg
IGNvbnN0YW50ID0gY2xvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnQpOworICAgIH0K
KworICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOworfQorCit2b2lkIENvZGVCbG9jazo6c2V0QWx0ZXJuYXRp
dmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQoreworICAgIG1fYWx0ZXJuYXRpdmUu
c2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXROdW1Q
YXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkKK3sKKyAgICBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1
ZTsKKworICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFZhbHVl
UHJvZmlsZT4obmV3VmFsdWUpOworfQorCit2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKKyAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0b3Ig
cHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOworfQorCitDb2RlQmxvY2sqIENvZGVCbG9jazo6c3Bl
Y2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlm
IChqaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICByZXR1cm4gMDsKKyAgICBE
Rkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOworICAgIHJldHVybiBqaXRD
b2RlLT5vc3JFbnRyeUJsb2NrKCk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OnZp
c2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGJvb2wgc2V0QnlNZSA9ICFt
X3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRy
dWUpOworICAgIGlmICghc2V0QnlNZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
c2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVBvaW50ZXIodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6
ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKKyAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBw
cm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGlu
Z3MKKyAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5v
IG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CisgICAgLy8gZmlndXJlcyBvdXQgd2hl
dGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFs
RmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworCisgICAgaWYgKCFKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SWYgd2UgamV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFsdGVybmF0aXZlLCBz
byBtYWtlIHN1cmUgdGhhdCBpdAorICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4gaWYgd2UgZG9uJ3Qu
CisgICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOworICAgIAorICAgIC8vIFRoZXJl
IGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9y
OiBERkcgZml4cG9pbnQgZm9yCisgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmlu
ZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCisgICAgLy8gaW5s
aW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3Mu
CisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gV2UgZ2V0IGhlcmUgaWYg
d2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZl
LAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBzZW5z
ZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBibG9jayBzaG91bGQg
YmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJlaW5n
CisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGlsbCBh
c3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0gb25lIHJvdW5kIG9m
IGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNlZCBv
bgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkgb3Ro
ZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVhc29ucywgdGhhdCB0
aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlz
CisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KKwor
ICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworCisgICAgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2
ZW5lc3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7CisgICAgZGV0ZXJtaW5lTGl2ZW5lc3ModmlzaXRv
cik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisKK3NpemVfdCBDb2RlQmxvY2s6OmVz
dGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9
IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxvY2F0
ZWQgPSB0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rp
b24pOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2ppdENvZGUpCisgICAgICAgIGV4dHJhTWVtb3J5
QWxsb2NhdGVkICs9IHRoaXNPYmplY3QtPm1faml0Q29kZS0+c2l6ZSgpOworICAgIHJldHVybiBC
YXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAg
dGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gVGhlcmUgYXJl
IHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogaW5saW5l
IGNhY2hlIGNsZWFyaW5nCisgICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxpdHkg
b2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCisgICAgLy8g
aXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIgd2hh
dCBhbmQgd2hlbiBpdCBydW5zLCBpdAorICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQgaGFz
IGFueSB3b3JrIHRvIGRvLgorICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigm
bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKworICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxv
Y2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQorICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG90aGVyQmxvY2spOworCisgICAgaWYgKG1faml0
Q29kZSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRDb2Rl
LT5zaXplKCkpOworICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCisgICAgICAgIHZpc2l0
b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVv
ZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKKworICAgIHN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgIHN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyh2aXNpdG9yKTsKKworICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtl
ZCA9IGZhbHNlOworICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworfQorCitib29s
IENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCit7CisgICAgaWYgKE9wdGlvbnM6OmZv
cmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0
byBiZSBqZXR0aXNvbmVkIHdoZW4KKyAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3Rh
bGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKKyAgICAvLyBzY2FubmVkLCB3
ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICBpZiAoIUpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29u
RHVlVG9XZWFrUmVmZXJlbmNlKCkKK3sKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFIZWFwOjpp
c01hcmtlZCh0aGlzKTsKK30KKworc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGlt
ZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CisgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnVzZUVhZ2VyQ29kZUJsb2NrSmV0dGlzb25UaW1pbmcoKSkpIHsKKyAgICAgICAgc3dp
dGNoIChqaXRUeXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazoK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKKyAgICAg
ICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKDEwICsgMjApOworICAgICAgICBjYXNlIEpJVENvZGU6OkRGR0pJ
VDoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwKTsKKyAg
ICAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcygxMjApOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rOgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOworICAgIGNhc2UgSklU
Q29kZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9uYWwg
c2Vjb25kcywgc2luY2UgQmFzZWxpbmVKSVQgYW5kCisgICAgICAgIC8vIEludGVycHJldGVyVGh1
bmsgc2hhcmUgYSBDb2RlQmxvY2suCisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg1
ICsgMTApKTsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hy
b25vOjpzZWNvbmRzKDIwKSk7CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
PihzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKK3sKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZSgp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKHRpbWVTaW5jZUNyZWF0aW9u
KCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQorc3RhdGljIGJvb2wg
c2hvdWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNp
dGlvbikKK3sKKyAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
dHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKK3ZvaWQgQ29k
ZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisKKyAgICBpZiAobV9hbGxUcmFuc2l0aW9uc0hhdmVC
ZWVuTWFya2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGFsbEFyZU1hcmtlZFNvRmFy
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92bS0+
aW50ZXJwcmV0ZXI7CisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSB7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CisgICAgICAg
ICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9w
Y29kZSkpIHsKKyAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVy
ZUlEOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gaW5zdHJ1
Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZUlEIHx8ICFuZXdTdHJ1Y3R1cmVJRCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQorICAgICAgICAgICAgICAgICAg
ICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KKyAgICAgICAgICAgICAgICAg
ICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0dXJl
KSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5
UG9pbnRlcihuZXdTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIGZvciAoQmFn
PFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7
ICEhaXRlcjsgKytpdGVyKQorICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gKCppdGVy
KS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKEpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgZm9yIChhdXRvJiB3ZWFrUmVm
ZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKKyAgICAgICAgICAg
IGFsbEFyZU1hcmtlZFNvRmFyICY9IHdlYWtSZWZlcmVuY2UtPm1hcmtJZkNoZWFwKHZpc2l0b3Ip
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+
dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRNYXJrVHJh
bnNpdGlvbihkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldKSkgeworICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJnZXQg
b2YgdGhlCisgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6CisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29kZSBibG9jay4gV2Ug
a25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICAgICAgICAg
IC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRyYW5zaXRp
b24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gICBjb2Rl
IHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNlcidzCisg
ICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIGlubGlu
ZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJjZSBvZiB0aGUgdHJh
bnNpdGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKKyAgICAgICAgICAgICAgICAv
LyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMgdGhl
IHRhcmdldC4KKyAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBs
aXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgorICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzaG9ydC1jaXJjdWl0IHRoZSBsaXZlbmVzcyBpZiB0
aGUgc3RydWN0dXJlIGlzIGhhcm1sZXNzCisgICAgICAgICAgICAgICAgLy8gdG8gbWFyayAoaS5l
LiBpdHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFscmVhZHkKKyAgICAg
ICAgICAgICAgICAvLyBsaXZlKS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisgICAgaWYg
KGFsbEFyZU1hcmtlZFNvRmFyKQorICAgICAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJr
ZWQgPSB0cnVlOworfQorCit2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIAorI2lm
IEVOQUJMRShERkdfSklUKQorICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFpbmluZyB3
b3JrIHRvIGRvLgorICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5k
ZmdDb21tb24oKTsKKyAgICBpZiAoZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBOb3cgY2hlY2sgYWxsIG9mIG91ciB3ZWFrIHJl
ZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdlCisgICAgLy8gaGF2ZSBw
cm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyByZWZlcmVuY2VzLiBJZiBh
dCBlbmQgb2YKKyAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92ZWQgbGl2ZW5lc3MsIHRo
ZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgorICAgIGJvb2wgYWxsQXJlTGl2ZVNvRmFyID0g
dHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJl
bmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBh
bGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9u
LT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBh
bGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBzb21lIHdlYWsgcmVmZXJl
bmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3YXMKKyAgICAvLyB1
bnN1Y2Nlc3NmdWwuCisgICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBSZWNvcmQgdGhpcyBp
bmZvcm1hdGlvbiBzbyB3ZSBkb24ndAorICAgIC8vIGNvbWUgYmFjayBoZXJlIGFnYWluLCBhbmQg
c2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCisgICAgZGZnQ29tbW9uLT5saXZlbmVzc0hhc0Jl
ZW5Qcm92ZWQgPSB0cnVlOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIodGhpcyk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0KKyAgICAgICAgYml0
d2lzZV9jYXN0PENvZGVCbG9jayo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rl
cikpOworCisgICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAg
ICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOworfQorCit2b2lkIENvZGVC
bG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7
CisgICAgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKG9wX2dldF9i
eV9pZCk7CisgICAgaW5zdHJ1Y3Rpb25bNF0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICBpbnN0
cnVjdGlvbls1XS51LnBvaW50ZXIgPSBudWxscHRyOworICAgIGluc3RydWN0aW9uWzZdLnUucG9p
bnRlciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKG1fb3duZXJFeGVj
dXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwor
ICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0g
bV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7CisgICAgZm9yIChz
aXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmlu
c3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKKyAgICAgICAgc3dp
dGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUp
KSB7CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9wcm90b19sb2FkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDogeworICAgICAg
ICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51LnN0
cnVjdHVyZUlEOworICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01h
cmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHByb3BlcnR5
IGFjY2Vzcy5cbiIpOworICAgICAgICAgICAgY2xlYXJMTEludEdldEJ5SWRDYWNoZShjdXJJbnN0
cnVjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X3B1dF9ieV9pZDogeworICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBj
dXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAgU3RydWN0dXJlSUQg
bmV3U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOworICAgICAg
ICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1
cmVDaGFpbi5nZXQoKTsKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6
OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJ
RCkpKSAmJgorICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJr
ZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpICYm
CisgICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRp
b24uXG4iKTsKKyAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQgPSAw
OworICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKKyAgICAgICAg
ICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQgPSAwOworICAgICAgICAgICAgY3Vy
SW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKKyAgICAgICAgICAgIGlmICgh
Y3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1
Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1cklu
c3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIGN1ckluc3RydWN0
aW9uWzJdLnUuc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblsz
XS51LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAorICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9u
WzNdLnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogeworICAgICAgICAgICAgYXV0byYgY2Fj
aGVXcml0ZUJhcnJpZXIgPSBjdXJJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsKKyAgICAgICAgICAg
IGlmICghY2FjaGVXcml0ZUJhcnJpZXIgfHwgY2FjaGVXcml0ZUJhcnJpZXIudW52YWxpZGF0ZWRH
ZXQoKSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rpb24gPSBjYWNoZVdy
aXRlQmFycmllci5nZXQoKTsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjYWNoZWRG
dW5jdGlvbikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTElu
dCBjcmVhdGVfdGhpcyB3aXRoIGNhY2hlZCBjYWxsZWUgJXAuXG4iLCBjYWNoZWRGdW5jdGlvbik7
CisgICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5jbGVhcigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7CisgICAgICAg
ICAgICAvLyBSaWdodCBub3cgdGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkuIEFueSBzeW1i
b2wgdGFibGVzIHRoYXQgdGhpcyB3aWxsIHJlZmVyIHRvCisgICAgICAgICAgICAvLyBhcmUgZm9y
IG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJvbmds
eSwgYW5kIHRoZXkgcmVmZXIKKyAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUgc3Ry
b25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KKyAgICAgICAgICAg
IFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSA9IGN1ckluc3RydWN0
aW9uWzZdLnUuc3ltYm9sVGFibGU7CisgICAgICAgICAgICBpZiAoIXN5bWJvbFRhYmxlIHx8IEhl
YXA6OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBzeW1ib2xUYWJsZS5n
ZXQoKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5m
byA9IEdldFB1dEluZm8oY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8IGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIAorICAgICAg
ICAgICAgICAgIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIg
fHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXIgfHwgZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVy
ZTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVjdHVy
ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBzY29w
ZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpOworICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQob3Bjb2RlSUQsIGZhbHNlLCAiVW5oYW5kbGVk
IG9wY29kZSBpbiBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5LCAlcyglZCkgYXQg
YmMgJXUiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sIG9wY29kZUlELCBwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBjYW4ndCBqdXN0
IHJlbW92ZSBhbGwgdGhlIHNldHMgd2hlbiB3ZSBjbGVhciB0aGUgY2FjaGVzIHNpbmNlIHdlIG1p
Z2h0IGhhdmUgY3JlYXRlZCBhIHdhdGNocG9pbnQgc2V0CisgICAgLy8gdGhlbiBjbGVhcmVkIHRo
ZSBjYWNoZSB3aXRob3V0IEdDaW5nIGluIGJldHdlZW4uCisgICAgbV9sbGludEdldEJ5SWRXYXRj
aHBvaW50TWFwLnJlbW92ZUlmKFtdKGNvbnN0IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA6OktleVZh
bHVlUGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gIUhlYXA6OmlzTWFy
a2VkKHBhaXIua2V5KTsKKyAgICB9KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9sbGludENh
bGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQobV9sbGludENhbGxM
aW5rSW5mb3NbaV0uY2FsbGVlLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBjYWxs
IGZyb20gIiwgKnRoaXMsICJcbiIpOworICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3Nb
aV0udW5saW5rKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEhbV9sbGludENhbGxMaW5rSW5m
b3NbaV0ubGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlua0lu
Zm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKKyAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlu
a0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBmb3IgKGF1dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikKKyAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp2bSgpKTsKKworICAgIGZvciAoQmFn
PFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7
ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
ICoqaXRlcjsKKyAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsKKyAg
ICB9CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXpl
cikpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0
dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgeworICAgICAgICBjb2RlQmxvY2stPmpldHRpc29u
KFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyAgICBpZiAoY29kZUJsb2NrLT5z
aG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKKyAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNv
bihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVCbG9jay0+aml0VHlw
ZSgpKSkKKyAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisK
KyNpZiBFTkFCTEUoSklUKQorICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29kZSgpKQorICAgICAg
ICBjb2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyNlbmRpZgor
fQorCit2b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAo
SklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdG9IYXNoTWFwKG1fc3R1YkluZm9z
LCBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRTdHVi
SW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCByZXN1bHQpOworfQor
Cit2b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAg
IGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQorICAgICAgICB0b0hhc2hNYXAobV9jYWxs
TGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6Z2V0
Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0Q2FsbExpbmtJbmZvTWFwKGxvY2tl
ciwgcmVzdWx0KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxF
KEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBmb3Ig
KGF1dG8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
Q29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBieVZhbEluZm8pOworICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordm9pZCBDb2Rl
QmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldEJ5VmFsSW5mb01hcChsb2Nr
ZXIsIHJlc3VsdCk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorU3RydWN0dXJlU3R1YkluZm8qIENv
ZGVCbG9jazo6YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQoreworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIG1fc3R1YkluZm9zLmFk
ZChhY2Nlc3NUeXBlKTsKK30KKworSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0
aFByb2ZpbGUpOworfQorCitKSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7Cit9CisKK0pJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxl
KTsKK30KKworSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwor
fQorCitTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQoreworICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
bV9zdHViSW5mb3MpIHsKKyAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNvZGVP
cmlnaW4pCisgICAgICAgICAgICByZXR1cm4gc3R1YkluZm87CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCitCeVZhbEluZm8qIENvZGVCbG9jazo6YWRkQnlWYWxJbmZvKCkKK3sKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBtX2J5VmFs
SW5mb3MuYWRkKCk7Cit9CisKK0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlua0lu
Zm8oKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0
dXJuIG1fY2FsbExpbmtJbmZvcy5hZGQoKTsKK30KKworQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAg
Zm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIp
IHsKKyAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGluZGV4
KSkKKyAgICAgICAgICAgIHJldHVybiAqaXRlcjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKTsKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIAorICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNhdXNl
IG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZvcywg
Y2FsbAorICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBoYXZl
IEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCisgICAgLy8gc3RydWN0dXJl
cyB1c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldFN0dWJJbmZvTWFwIGFuZCBmcmllbmRzKSB3
aWxsIHJldHVybiBub3RoaW5nIGlmIHdlCisgICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4KKyAg
ICBtX3N0dWJJbmZvcy5jbGVhcigpOworICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOworICAg
IG1fYnlWYWxJbmZvcy5jbGVhcigpOworICAgIAorICAgIC8vIFdlIGNhbiBjbGVhciB0aGlzIGJl
Y2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBndWFy
ZGVkIGJ5IHdoZXRoZXIKKyAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KKyAgICBtX3JhcmVDYXNl
UHJvZmlsZXMuY2xlYXIoKTsKK30KKyNlbmRpZgorCit2b2lkIENvZGVCbG9jazo6dmlzaXRPU1JF
eGl0VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBXZSBzdHJvbmdseSB2
aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRo
CisgICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBDb2Rl
QmxvY2sgb24gZGVtYW5kIGFuZAorICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNoZXMg
dGhlIGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAorICAgIC8vIHRoZSBPU1Ig
ZXhpdCBhZ2FpbnN0LgorCisgICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOworCisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2pp
dENvZGUtPmRmZ0NvbW1vbigpOworICAgIGlmIChkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMp
IHsKKyAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZnQ29tbW9uLT5pbmxp
bmVDYWxsRnJhbWVzKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNl
bGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZy
YW1lLT5iYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CisgICAg
dmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
bV91bmxpbmtlZENvZGUpOworICAgIGlmIChtX3JhcmVEYXRhKQorICAgICAgICBtX3JhcmVEYXRh
LT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29uc3RhbnRSZWdpc3Rl
cnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25FeHBycy5z
aXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tpXSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAoQnlWYWxJbmZvKiBieVZhbElu
Zm8gOiBtX2J5VmFsSW5mb3MpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZieVZhbEluZm8tPmNh
Y2hlZFN5bWJvbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdmlzaXRPU1JFeGl0VGFy
Z2V0cyh2aXNpdG9yKTsKKyNlbmRpZgorCisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBt
X2ppdENvZGUtPmRmZ0NvbW1vbigpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
Z0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCEhZGZnQ29t
bW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pOyAvLyBBbG1vc3Qg
Y2VydGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdpbiBzaG91bGQgYWxz
byBiZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhvdWdoLgorICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20pOworICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKyAg
ICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1Jl
ZmVyZW5jZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzW2ldKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdD
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXSk7CisKKyAg
ICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7CisjZW5kaWYgICAgCit9
CisKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKK3sKKyNpZiBF
TkFCTEUoSklUKQorICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsKKyAgICB3aGlsZSAocmVz
dWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZl
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmppdFR5cGUoKSkgfHwgcmVzdWx0LT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6Tm9uZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0
dXJuIHRoaXM7CisjZW5kaWYKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVy
c2lvbigpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgQ29kZUJsb2NrKiByZXN1
bHQgPSByZXBsYWNlbWVudCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIC8vIFRoaXMg
Y2FuIGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGZvciBh
biBleGVjdXRhYmxlLgorICAgICAgICAvLyBBc3N1bWUgdGhhdCB3ZSdyZSB0aGUgYmFzZWxpbmUg
Q29kZUJsb2NrLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6
Tm9uZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICByZXN1bHQgPSByZXN1bHQt
PmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBy
ZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2Nr
OjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2Up
Cit7CisgICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRU
eXBlKCksIHR5cGVUb1JlcGxhY2UpOworfQorCitib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRU
eXBlKCkpOworfQorI2VuZGlmCisKK0hhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJl
cXVpcmVkSGFuZGxlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29k
ZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKK30KKworSGFuZGxlckluZm8qIENvZGVCbG9jazo6
aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRI
YW5kbGVyKQoreworICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK0NhbGxTaXRlSW5kZXgg
Q29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRl
eCBvcmlnaW5hbENhbGxTaXRlKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKKyAgICBBU1NFUlQo
ISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKKyAgICBDb2RlT3Jp
Z2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKKyAgICBy
ZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmln
aW5hbE9yaWdpbik7CisjZWxzZQorICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBuZXcgb24tdGhlLWZs
eSBleGNlcHRpb24gaGFuZGxpbmcKKyAgICAvLyBjYWxsIHNpdGVzIG91dHNpZGUgdGhlIERGRy9G
VEwgaW5saW5lIGNhY2hlcy4KKyAgICBVTlVTRURfUEFSQU0ob3JpZ2luYWxDYWxsU2l0ZSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRl
eCgwdSk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnJlbW92ZUV4Y2VwdGlvbkhhbmRs
ZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9yYXJlRGF0YSk7CisgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9u
SGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOworICAgIHVuc2lnbmVk
IGluZGV4ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBleGNlcHRpb25IYW5kbGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBIYW5kbGVySW5mbyYg
aGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICBpZiAoaGFuZGxlci5zdGFy
dCA8PSBpbmRleCAmJiBoYW5kbGVyLmVuZCA+IGluZGV4KSB7CisgICAgICAgICAgICBleGNlcHRp
b25IYW5kbGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit1bnNpZ25lZCBD
b2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9u
cygpLnNpemUoKSk7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExp
bmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworfQorCit1bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGludCBkaXZvdDsKKyAg
ICBpbnQgc3RhcnRPZmZzZXQ7CisgICAgaW50IGVuZE9mZnNldDsKKyAgICB1bnNpZ25lZCBsaW5l
OworICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUs
IGNvbHVtbik7CisgICAgcmV0dXJuIGNvbHVtbjsKK30KKwordm9pZCBDb2RlQmxvY2s6OmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQm
IGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxpbmUs
IHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Cit7CisgICAgbV91bmxpbmtlZENvZGUtPmV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICBkaXZvdCArPSBtX3NvdXJjZU9mZnNl
dDsKKyAgICBjb2x1bW4gKz0gbGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5PZmZzZXQoKTsKKyAg
ICBsaW5lICs9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKTsKK30KKworYm9v
bCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVu
c2lnbmVkIGNvbHVtbikKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSB2bSgpLT5p
bnRlcnByZXRlcjsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5iZWdpbigpOworICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5l
bmQoKTsKKyAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7
KSB7CisgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGl0LT51Lm9wY29kZSk7CisgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9kZWJ1ZykgeworICAg
ICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBpdCAtIGJlZ2luOworICAgICAgICAg
ICAgaW50IHVudXNlZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdMaW5lOworICAgICAg
ICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKKyAgICAgICAgICAgIGV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWQsIHVudXNlZCwgdW51c2Vk
LCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7CisgICAgICAgICAgICBpZiAobGluZSA9PSBv
cERlYnVnTGluZSAmJiAoY29sdW1uID09IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uIHx8
IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hy
aW5rTW9kZSBzaHJpbmtNb2RlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisKKyAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAKKyAg
ICBpZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNocmluaykgeworICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLnNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9yYXJlRGF0
YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0gLy8gZWxzZSBkb24ndCBzaHJpbmsgdGhl
c2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMgaW50byB0
aGVzZSB0YWJsZXMuCit9CisKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWlu
ZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21p
bmdDYWxscy5wdXNoKGluY29taW5nKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxO
b2RlKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwor
ICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisKK3ZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkK
K3sKKyAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5n
TExJbnRDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+
dW5saW5rKCk7CisjaWYgRU5BQkxFKEpJVCkKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJl
Z2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAg
ICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQorfQorCit2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2Fs
bChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcpCit7
CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nTExJ
bnRDYWxscy5wdXNoKGluY29taW5nKTsKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1Jl
cGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ld1Jl
cGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKK30KKworI2lmIEVO
QUJMRShKSVQpCitDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CisKKyAgICBpZiAo
Y2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBq
c0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tG
b3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKwor
ICAgIGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1
cm4ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2so
KTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAg
ICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2soKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZv
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitERkc6OkNhcGFiaWxp
dHlMZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQoreworICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CisKKyAgICBpZiAoY2xh
c3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKKyAgICAgICAgaWYgKG1faXND
b25zdHJ1Y3RvcikKKyAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29uc3RydWN0
Q2FwYWJpbGl0eUxldmVsKHRoaXMpOworICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNh
bGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAgfQorCisgICAgaWYgKGNsYXNzSW5mbyA9PSBF
dmFsQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmlsaXR5
TGV2ZWwodGhpcyk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6Omlu
Zm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsK
KworICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQor
ICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKKyNlbmRp
ZgorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gREZHOjpD
YW5ub3RDb21waWxlOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwordm9pZCBDb2RlQmxv
Y2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0
aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCit7CisjaWYgIUVOQUJMRShE
RkdfSklUKQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyAgICBVTlVTRURfUEFSQU0oZGV0YWls
KTsKKyNlbmRpZgorICAgIAorICAgIENPREVCTE9DS19MT0dfRVZFTlQodGhpcywgImpldHRpc29u
IiwgKCJkdWUgdG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUgPT0gQ291bnRSZW9w
dGltaXphdGlvbiwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWlsKSkpOworCisgICAg
UkVMRUFTRV9BU1NFUlQocmVhc29uICE9IFByb2ZpbGVyOjpOb3RKZXR0aXNvbmVkKTsKKyAgICAK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHko
KSkgeworICAgICAgICBkYXRhTG9nKCJKZXR0aXNvbmluZyAiLCAqdGhpcyk7CisgICAgICAgIGlm
IChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pCisgICAgICAgICAgICBkYXRhTG9nKCIgYW5k
IGNvdW50aW5nIHJlb3B0aW1pemF0aW9uIik7CisgICAgICAgIGRhdGFMb2coIiBkdWUgdG8gIiwg
cmVhc29uKTsKKyAgICAgICAgaWYgKGRldGFpbCkKKyAgICAgICAgICAgIGRhdGFMb2coIiwgIiwg
KmRldGFpbCk7CisgICAgICAgIGRhdGFMb2coIi5cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAo
cmVhc29uID09IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSkgeworICAgICAg
ICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkgeworICAgICAgICAgICAgZGF0YUxv
ZygqdGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGRl
YWQgcmVmZXJlbmNlczpcbiIpOworICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uID0gZGZnQ29t
bW9uLT50cmFuc2l0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9IHRy
YW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpOworICAgICAgICAgICAgICAgIEpTQ2VsbCogZnJv
bSA9IHRyYW5zaXRpb24ubV9mcm9tLmdldCgpOworICAgICAgICAgICAgICAgIEpTQ2VsbCogdG8g
PSB0cmFuc2l0aW9uLm1fdG8uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCghb3JpZ2luIHx8
IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpICYmIEhlYXA6OmlzTWFya2VkKGZyb20pKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgVHJh
bnNpdGlvbiB1bmRlciAiLCBSYXdQb2ludGVyKG9yaWdpbiksICIsICIsIFJhd1BvaW50ZXIoZnJv
bSksICIgLT4gIiwgUmF3UG9pbnRlcih0byksICIuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFrID0gZGZnQ29tbW9u
LT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNN
YXJrZWQod2VhaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBSYXdQb2ludGVyKHdlYWspLCAiLlxu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7CisgICAgCisg
ICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKKyAgICAvLyAxKSBN
YWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQgbm93
LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAorICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhpdCBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSByZXR1
cm4uCisgICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhlY3V0
YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KKworI2lmIEVOQUJM
RShERkdfSklUKQorICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRB
Z2UpIHsKKyAgICAgICAgaWYgKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBq
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKSkKKyAgICAgICAgICAgIGNv
bXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9vay1r
ZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCisgICAgICAgIGlm
ICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7CisgICAgICAgICAgICAv
LyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXNDdXJyZW50VGhyZWFk
QnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoREZHOjpz
aG91bGREdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZhbGlk
YXRlICIsICp0aGlzLCAiXG4iKTsKKyAgICAKKyAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6YXRp
b24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgorICAgIGlmIChtb2RlID09IENvdW50
UmVvcHRpbWl6YXRpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNh
bGwgYWx0ZXJuYXRpdmUoKS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzY3NworICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNvdW50
UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9uIGZv
ciAiLCAqdGhpcywgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmICh0aGlzICE9IHJlcGxhY2Vt
ZW50KCkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhlIGVu
dHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKKyAgICAgICAgLy8g
YmxvY2tzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFsdGVybmF0aXZlKCkp
CisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKworICAgIGlm
IChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpCisgICAgICAgIHRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgIC8v
IEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3RhbGwg
Y29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQorICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQg
YSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCisgICAgaWYgKG1fdm0tPmhlYXAu
aXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1
dGFibGUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgy
KS4KKyAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoCisgICAgICAgIG1f
Z2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXph
dGlvbktpbmQoKSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoREZHOjpzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnN0YWxsIGJhc2Vs
aW5lIHZlcnNpb24gb2YgIiwgKnRoaXMsICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorfQorCitKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQoreworICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
CisgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKK30KKwor
Y2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBSZWN1cnNpb25DaGVj
a0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGRlcHRoVG9DaGVjaykKKyAgICAgICAgOiBtX3N0YXJ0Q2FsbEZyYW1lKHN0YXJ0
Q2FsbEZyYW1lKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBt
X2RlcHRoVG9DaGVjayhkZXB0aFRvQ2hlY2spCisgICAgICAgICwgbV9mb3VuZFN0YXJ0Q2FsbEZy
YW1lKGZhbHNlKQorICAgICAgICAsIG1fZGlkUmVjdXJzZShmYWxzZSkKKyAgICB7IH0KKworICAg
IFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgQ2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lID0gdmlzaXRv
ci0+Y2FsbEZyYW1lKCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRDYWxsRnJhbWUgPT0gbV9zdGFy
dENhbGxGcmFtZSkKKyAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFtZSA9IHRydWU7CisK
KyAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKHZp
c2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSA9PSBtX2NvZGVCbG9jaykgeworICAgICAg
ICAgICAgICAgIG1fZGlkUmVjdXJzZSA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX2Rl
cHRoVG9DaGVjay0tKQorICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAg
ICB9CisKKyAgICBib29sIGRpZFJlY3Vyc2UoKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY3Vyc2U7
IH0KKworcHJpdmF0ZToKKyAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJhbWU7CisgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVwdGhUb0NoZWNr
OworICAgIG11dGFibGUgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7CisgICAgbXV0YWJsZSBi
b29sIG1fZGlkUmVjdXJzZTsKK307CisKK3ZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0Nh
bGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSkKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNhbGwgbGluayBm
cm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwgKnRoaXMsICJcbiIp
OworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghbV9zaG91bGRBbHdheXNCZUlu
bGluZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWNhbGxlckNvZGVCbG9jaykg
eworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xl
YXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcykpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFERkc6OmlzU21hbGxFbm91Z2hUb0lu
bGluZUNvZGVJbnRvKGNhbGxlckNvZGVCbG9jaykpIHsKKyAgICAgICAgbV9zaG91bGRBbHdheXNC
ZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygp
KQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIg
aXMgdG9vIGxhcmdlLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2Fs
bGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewor
ICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0aWxsIGluIHRoZSBpbnRlcnByZXRlciwgdGhl
biB3ZSBjYW4ndCBleHBlY3QgaW5saW5pbmcgdG8KKyAgICAgICAgLy8gaGFwcGVuIGFueXRpbWUg
c29vbi4gQXNzdW1lIGl0J3MgcHJvZml0YWJsZSB0byBvcHRpbWl6ZSBpdCBzZXBhcmF0ZWx5LiBU
aGlzCisgICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIFNBQkkgb25seSBpZiBp
dCBpcyBjYWxsZWQgbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4KKyAgICAgICAgLy8gYW55IG9mIGl0
cyBjYWxsZXJzLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBpbiBMTEludC5cbiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAgIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmso
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIg
d2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpIHsK
KyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwgY29kZSwg
YXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQorICAgICAgICAvLyBvcHRpbWl6ZWQgYW55dGltZSBz
b29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ugd2UKKyAg
ICAgICAgLy8gZGVsYXkgZXZhbCBvcHRpbWl6YXRpb24gYnkgYSAqbG90Ki4KKyAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVj
YXVzZSBjYWxsZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFJlY3Vyc2l2ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVkLgorICAgIFJlY3Vy
c2lvbkNoZWNrRnVuY3RvciBmdW5jdG9yKGNhbGxlckZyYW1lLCB0aGlzLCBPcHRpb25zOjptYXhp
bXVtSW5saW5pbmdEZXB0aCgpKTsKKyAgICB2bSgpLT50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVu
Y3Rvcik7CisKKyAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNlKCkpIHsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFy
aW5nIFNBQkkgYmVjYXVzZSByZWN1cnNpb24gd2FzIGRldGVjdGVkLlxuIik7CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSA9PSBE
Rkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgeworICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZy
b20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpLCAi
IHRvICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0eSBsZXZlbCBpcyBub3Qgc2V0
LlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIGlmIChjYW5Db21waWxl
KGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgIGRh
dGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgdGhlIGNhbGxlciBpcyBub3QgYSBERkcg
Y2FuZGlkYXRlLlxuIik7CisgICAgCisgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKKyNlbmRpZgorfQorCit1bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIEFTU0VSVChtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4KCkpOworICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworI2Vsc2UK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorfQorCisjaWYgRU5BQkxFKEpJ
VCkKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmVSZWdpc3RlcnMpCit7CisgICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVlX3B0
cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVnaXN0ZXJBdE9mZnNldExpc3QpCit7CisgICAgbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0TGlzdCk7Cit9Cisg
ICAgCitzdGF0aWMgc2l6ZV90IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KHNpemVfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjcHVSZWdpc3RlclNpemUgPSBzaXplb2Yodm9pZCopOworICAgIHJldHVybiAoV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIGNhbGxlZVNhdmVSZWdpc3RlcnMgKiBj
cHVSZWdpc3RlclNpemUpIC8gc2l6ZW9mKFJlZ2lzdGVyKSk7CisKK30KKworc2l6ZV90IENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCit7
CisgICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG51bWJl
ck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3NpemVfdCBDb2Rl
QmxvY2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCit7CisgICAgcmV0dXJu
IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG1fY2FsbGVlU2F2ZVJlZ2lz
dGVycy0+c2l6ZSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmNvdW50UmVvcHRpbWl6YXRpb24o
KQoreworICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKKyAgICBpZiAobV9yZW9w
dGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4KCkpCisgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOworfQorCit1bnNpZ25lZCBDb2RlQmxv
Y2s6Om51bWJlck9mREZHQ29tcGlsZXMoKQoreworICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKCkpKTsKKyAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7Cisg
ICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKKyAgICAgICAgICAgIHJldHVybiAx
MDAwMDAwOworICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEgOiAw
KSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CisgICAgfQorICAgIHJldHVybiAoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkgPyAxIDogMCkg
KyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworfQorCitpbnQzMl90IENvZGVCbG9jazo6
Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKK3sKKyAgICBpZiAoY29kZVR5cGUo
KSA9PSBFdmFsQ29kZSkKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV2YWxUaHJlc2hvbGRNdWx0
aXBsaWVyKCk7CisgICAgCisgICAgcmV0dXJuIDE7Cit9CisKK2RvdWJsZSBDb2RlQmxvY2s6Om9w
dGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKQoreworICAgIC8vIFRoaXMgZXhwcmVz
c2lvbiBhcmlzZXMgZnJvbSBkb2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9mCisgICAgLy8KKyAg
ICAvLyBGW3hfXSA9OiBhICogU3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsgZAorICAgIC8vCisg
ICAgLy8gYWdhaW5zdCB0aGUgZGF0YSBwb2ludHM6CisgICAgLy8KKyAgICAvLyAgICB4ICAgICAg
IEZbeF9dCisgICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFsbGVzdCByZWFzb25h
YmxlIGNvZGUgYmxvY2spCisgICAgLy8gICAyMDAgICAgICAgMS4wICAgICAgICAgICh0eXBpY2Fs
IHNtYWxsLWlzaCBjb2RlIGJsb2NrKQorICAgIC8vICAgMzIwICAgICAgIDEuMiAgICAgICAgICAo
c29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBvcHRpbWl6ZSkKKyAg
ICAvLyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJl
IHRoYXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKKyAgICAvLyAgNDAwMCAgICAgICA1LjUg
ICAgICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRoZSBmdW5jdGlvbiB0
byBjb252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQorICAgIC8vIDEwMDAw
ICAgICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKKyAgICAvLworICAgIC8vIEkg
YWNoaWV2ZSB0aGUgbWluaW1pemF0aW9uIHVzaW5nIHRoZSBmb2xsb3dpbmcgTWF0aGVtYXRpY2Eg
Y29kZToKKyAgICAvLworICAgIC8vIE15RnVuY3Rpb25UZW1wbGF0ZVt4XywgYV8sIGJfLCBjXywg
ZF9dIDo9IGEqU3FydFt4ICsgYl0gKyBBYnNbYyp4XSArIGQKKyAgICAvLworICAgIC8vIHNhbXBs
ZXMgPSB7ezEwLCAwLjl9LCB7MjAwLCAxfSwgezMyMCwgMS4yfSwgezEyNjgsIDV9LCB7NDAwMCwg
NS41fSwgezEwMDAwLCA2fX0KKyAgICAvLworICAgIC8vIHNvbHV0aW9uID0gCisgICAgLy8gICAg
IE1pbmltaXplW1BsdXMgQEAgKChNeUZ1bmN0aW9uVGVtcGxhdGVbI1tbMV1dLCBhLCBiLCBjLCBk
XSAtICNbWzJdXSleMiAmIC9AIHNhbXBsZXMpLAorICAgIC8vICAgICAgICAge2EsIGIsIGMsIGR9
XVtbMl1dCisgICAgLy8KKyAgICAvLyBBbmQgdGhlIGNvZGUgYmVsb3cgKHRvIGluaXRpYWxpemUg
YSwgYiwgYywgZCkgaXMgZ2VuZXJhdGVkIGJ5OgorICAgIC8vCisgICAgLy8gUHJpbnRbImNvbnN0
IGRvdWJsZSAiIDw+IFRvU3RyaW5nWyNbWzFdXV0gPD4gIiA9ICIgPD4KKyAgICAvLyAgICAgSWZb
I1tbMl1dIDwgMC4wMDAwMSwgIjAuMCIsIFRvU3RyaW5nWyNbWzJdXV1dIDw+ICI7Il0gJiAvQCBz
b2x1dGlvbgorICAgIC8vCisgICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUgZm9sbG93aW5nIHRv
IGJlIHRydWU6CisgICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hlYXAgdG8gb3B0aW1p
emUgYW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCisgICAgLy8gICB0aGFuIGxh
dGVyLgorICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2ZSB0byBvcHRpbWl6
ZSBhbmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAorICAgIC8vICAgYW5kIHNvbWV0
aW1lcyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5ldmVyIG9wdGltaXpl
IHRoZW0uCisgICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5vdCB0b3RhbGx5IGxp
bmVhciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQorICAgIC8vICAgREZHIGluY3VycyBz
b21lIGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0aGVyZSBpcyBlbm91
Z2ggc2xvcAorICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gaW5zdHJ1Y3Rpb24g
Y291bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAorICAgIC8vICAgdGhhdCBmb3Ig
dGhvc2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hvdWxkIG5vdCBoYXZl
IGEgc3Ryb25nCisgICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9sZC4KKyAgICAvLwor
ICAgIC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93IHRvIGFjaGlldmUg
dGhlbTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKKyAgICAvLyBleGFtcGxlIHdoZXJlIHRo
ZSBoZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3ViZSB3aXRoIGluc3Ry
dWN0aW9uCisgICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQgZWFybHkgYXMgaXQg
c2hvdWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKKyAgICAvLyB0b3RhbGx5
IHdyb25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbiBjb3VudCAxMjY4
LCB3aGljaCB3YXMgZXhwZW5zaXZlCisgICAgLy8gdG8gY29tcGlsZSBhbmQgZGlkbid0IHJ1biBv
ZnRlbiBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGluaW9uKSwgYW5kCisg
ICAgLy8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRoYXQgcmVwcmVzZW50
ZWQgbXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCisgICAgLy8gaGV1cmlzdGljcyBzaG91bGQgZG8g
Zm9yIHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCisgICAgLy8KKyAgICAvLyBUaGUgZXhw
cmVzc2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFyb3NlIGJlY2F1c2Ug
SSBzdGFydGVkIHdpdGggYW4KKyAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFuZCB0aGVuIGRpZCB0
d28gdGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBlbnN1cmUKKyAgICAv
LyB0aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0aXZlIHZhbHVlIG9m
IGMgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbgorICAgIC8vIHRoZSBmdW5jdGlvbiB0dXJuaW5nIG92
ZXIgYW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJldyBpbiBhIFNxcnQK
KyAgICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0aW9uIHRoYXQgdGhl
IGZ1bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQorICAgIC8vIHRvIHNtYWxsIGNoYW5n
ZXMgaW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3aGVuIHggZ2V0cyBs
YXJnZS4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0IGVzc2VudGlhbGx5
IGVsaW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQorICAgIC8vIGV4cHJlc3Npb24g
KGMgPT0gMC4wKS4KKyAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0OworICAgIGNvbnN0IGRv
dWJsZSBiID0gMS4wMjQwNjsKKyAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsKKyAgICBjb25zdCBk
b3VibGUgZCA9IDAuODI1OTE0OworICAgIAorICAgIGRvdWJsZSBpbnN0cnVjdGlvbkNvdW50ID0g
dGhpcy0+aW5zdHJ1Y3Rpb25Db3VudCgpOworICAgIAorICAgIEFTU0VSVChpbnN0cnVjdGlvbkNv
dW50KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIgd2UgaGF2ZSBhbiBp
bnN0cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBqdXN0IHJldHVybiB0aGUgdmFsdWUg
b2YgZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCisgICAgCisgICAgZG91YmxlIHJlc3VsdCA9IGQg
KyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1Y3Rpb25Db3VudDsK
KyAgICAKKyAgICByZXN1bHQgKj0gY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCk7CisgICAg
CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9uQ291
bnQsCisgICAgICAgICAgICAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJlc3Vs
dCwgIiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLAorICAgICAgICAgICAgIlxu
Iik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IGNsaXBU
aHJlc2hvbGQoZG91YmxlIHRocmVzaG9sZCkKK3sKKyAgICBpZiAodGhyZXNob2xkIDwgMS4wKQor
ICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBpZiAodGhyZXNob2xkID4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKKyAgICAKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhyZXNob2xkKTsKK30KKworaW50MzJfdCBDb2RlQmxv
Y2s6OmFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKK3sKKyAg
ICByZXR1cm4gY2xpcFRocmVzaG9sZCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihkZXNp
cmVkVGhyZXNob2xkKSAqCisgICAgICAgIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0
b3IoKSAqCisgICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkpKTsKK30K
KworYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkK
K3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3Qg
PSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSkgeworICAgICAgICBpZiAo
d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleSh0aGlzLCBERkc6
OkRGR01vZGUpKQorICAgICAgICAgICAgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAg
ICAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgCisgICAgcmV0dXJuIG1faml0RXhl
Y3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKK3sKKyAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIG5l
eHQgaW52b2NhdGlvbi5cbiIpOworICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKDAsIHRoaXMpOworfQorCit2b2lkIENvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGltZVNv
b24oKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2co
KnRoaXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOworICAgIG1faml0RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBDb2RlQmxvY2s6Om9w
dGltaXplQWZ0ZXJXYXJtVXAoKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC5cbiIpOwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKAorICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9j
azo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgbG9uZyB3
YXJtLXVwLlxuIik7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9qaXRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCB0aGlzKTsKKyNlbmRpZgor
fQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVTb29uKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIHNvb24u
XG4iKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5l
d1RocmVzaG9sZCgKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkpLCB0aGlzKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9j
azo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpCit7CisgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogRm9yY2luZyBz
bG93IHBhdGggY29uY3VycmVudGx5LlxuIik7CisgICAgbV9qaXRFeGVjdXRlQ291bnRlci5mb3Jj
ZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQg
Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIEpJVENvZGU6OkpJVFR5cGUgdHlw
ZSA9IGppdFR5cGUoKTsKKyAgICBpZiAodHlwZSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNvZGUg
YnV0IGhhdmUgIiwgdHlwZSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogdGhlUmVwbGFjZW1lbnQgPSByZXBs
YWNlbWVudCgpOworICAgIGlmICgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgIT0g
KHRoZVJlcGxhY2VtZW50ICE9IHRoaXMpKSB7CisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IHdl
IGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKKyAgICAgICAgaWYgKHRoZVJlcGxh
Y2VtZW50ID09IHRoaXMpCisgICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUgb3VyIG93biByZXBs
YWNlbWVudC5cbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhTG9nKCJvdXIgcmVw
bGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAodGhlUmVwbGFjZW1lbnQpLCAiXG4iKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgc3dpdGNo
IChyZXN1bHQpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5
cGUoKSkpOworICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVk
OgorICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGltaXplQW55dGltZVNvb24oKSBi
dXQgd2UgY2Fubm90IGJlY2F1c2UKKyAgICAgICAgLy8gZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0
aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQgd29uJ3QKKyAgICAgICAgLy8g
bmVjZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywgd2UgbWFrZSBzdXJlIHRoYXQgZXZl
biBpZiB0aGF0CisgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ug
c3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQorICAgICAgICAvLyB0aGF0IHdlIGhh
dmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAg
ICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgorICAgICAgICBjb3VudFJlb3B0
aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgcmVzdWx0OiAiLCBz
dGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCksICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKKyNlbmRpZgorICAgIAordWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3Rl
ZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQoreworICAgIEFT
U0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgLy8gQ29tcHV0
ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhpcyBpcyBjYWxsZWQg
aW5mcmVxdWVudGx5CisgICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQgdXMu
CisgICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKKyAgICBmb3IgKHVuc2ln
bmVkIG4gPSBiYXNlbGluZVZlcnNpb24oKS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsg
bi0tOykgeworICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQgPDwgMTsKKyAgICAg
ICAgaWYgKG5ld1Jlc3VsdCA8IHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJlc3VsdCA9IG5ld1Jlc3VsdDsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordWludDMyX3QgQ29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCit7CisgICAgcmV0dXJuIGFkanVzdGVk
RXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9u
KCkgKiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSk7Cit9CisKK3VpbnQzMl90IENvZGVC
bG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpCit7Cisg
ICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3Vu
dEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGll
cigpKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3coKQoreworICAg
IHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1p
emF0aW9uKCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxvb3BO
b3coKQoreworICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9s
ZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKK30KKyNlbmRpZgorCitBcnJheVByb2ZpbGUq
IENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9hcnJheVByb2ZpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FycmF5UHJvZmls
ZXNbaV0uYnl0ZWNvZGVPZmZzZXQoKSA9PSBieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJl
dHVybiAmbV9hcnJheVByb2ZpbGVzW2ldOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworQXJy
YXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJl
dHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Cit9CisKK0FycmF5
UHJvZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIG1fYXJyYXlQcm9maWxlcy5h
cHBlbmQoQXJyYXlQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuICZtX2FycmF5
UHJvZmlsZXMubGFzdCgpOworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJyYXlQ
cm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGFkZEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5
dGVjb2RlT2Zmc2V0KTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRkQXJy
YXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCit7CisgICAgQXJyYXlQcm9maWxlKiByZXN1bHQgPSBnZXRBcnJheVByb2Zp
bGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVP
ZmZzZXQpOworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByb2Zp
bGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0T3JBZGRBcnJheVByb2ZpbGUobG9ja2VyLCBi
eXRlY29kZU9mZnNldCk7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK1ZlY3RvcjxDb2RlT3Jp
Z2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIENvZGVCbG9jazo6Y29kZU9yaWdpbnMoKQor
eworICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5jb2RlT3JpZ2luczsKK30KKwor
c2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0Cit7CisgICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50aWZp
ZXJzLnNpemUoKTsKK30KKworY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlmaWVy
KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9IG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQorICAgICAgICByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOworICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29t
bW9uKCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOworICAgIG51bWJlck9mU2FtcGxlc0lu
UHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9maWxlOjpudW1iZXJP
ZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4gdmFsdWUgcHJvZmls
ZXMgYXJlIGZ1bGwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBn
ZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9
IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7CisgICAgICAgIGlmIChudW1TYW1wbGVz
ID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCisgICAgICAgICAgICBudW1TYW1wbGVz
ID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJvZmls
ZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KKyAgICAg
ICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOworICAgICAgICBpZiAo
cHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2Zp
bGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKKyAgICAgICAgICAgIG51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhs
b2NrZXIpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9ucygpCit7CisgICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZh
bHVlMjsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoaWdub3JlZFZh
bHVlMSwgaWdub3JlZFZhbHVlMik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7IGkt
LTspCisgICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCB0aGlzKTsKKyAgICAKKyAgICAvLyBEb24ndCBjb3VudCB0aGVzZSBlaXRoZXIsIGZv
ciBzaW1pbGFyIHJlYXNvbnMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlcy5zaXplKCk7IGktLTspCisgICAgICAgIG1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZXNbaV0udXBkYXRlSW5kZXhpbmdUeXBlKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVB
bGxQcmVkaWN0aW9ucygpCit7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChtX293
bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisgICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKKyAgICB1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRP
cHRpbWl6ZU5vdygpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4uLlxuIik7CisKKyAg
ICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkRlbGF5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHVwZGF0ZUFs
bEFycmF5UHJlZGljdGlvbnMoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25B
cmd1bWVudFZhbHVlUHJvZmlsZXM7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlczsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsK
KworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZ0YoCisg
ICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1IC8gJXUp
XG4iLAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCisgICAg
ICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAorICAgICAgICAgICAg
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
KiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQorCisgICAgaWYgKCghbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmls
ZUxpdmVuZXNzUmF0ZSgpKQorICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpu
dW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9wdGlvbnM6
OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCisgICAgICAgICYmIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1pbmlt
dW1PcHRpbWl6YXRpb25EZWxheSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBB
U1NFUlQobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ4X3Q+OjptYXgoKSk7CisgICAgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIrKzsKKyAgICBv
cHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxF
KERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCit7Cisg
ICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAg
ICAKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOworICAgIAor
ICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHsKKyAg
ICAgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIERGRzo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Cisg
ICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVk
QmxvY2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworI2lmIEVOQUJMRShG
VExfSklUKQorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiB7CisgICAgICAgIC8vIFRoZXJlIGlz
IG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBzaW5jZSB0aGUgRlRM
OjpKSVRDb2RlOjpvc3JFeGl0CisgICAgICAgIC8vIHZlY3RvciBjb250YWlucyBhIHRvdGFsbHkg
ZGlmZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5zIHRvIGJlaGF2ZSBsaWtlCisgICAg
ICAgIC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KKyAgICAgICAgRlRMOjpKSVRDb2RlKiBqaXRD
b2RlID0gbV9qaXRDb2RlLT5mdGwoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEZUTDo6T1NSRXhp
dCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07CisgICAgICAgICAgICBleGl0LmNvbnNpZGVy
QWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9Q
Uk9GSUxFKQordm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKK3sKKyAgICBkYXRh
TG9nKCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKKyAg
ICAgICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAgICBkYXRh
TG9nRigiICAgYXJnID0gJXU6ICIsIGkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRh
dGFMb2dGKCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgaWYgKCFwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSAmJiBwcm9maWxlLT5tX3ByZWRpY3Rp
b24gPT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCI8ZW1wdHk+XG4iKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHByb2ZpbGUtPmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIlxuIik7CisgICAgfQorICAgIGRhdGFM
b2coIlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAg
ICBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGUoaSk7CisgICAgICAg
IGRhdGFMb2dGKCIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwg
cHJvZmlsZS0+bV9jb3VudGVyKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKKwordW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQo
KQoreworICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rOgorICAgICAgICByZXR1cm4gTExJbnQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0
aGlzKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoK
KyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBjYXNlIEpJVENvZGU6
OkRGR0pJVDoKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIGppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmZyYW1lUmVnaXN0ZXJDb3VudDsKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgQ29kZUJs
b2NrOjpzdGFja1BvaW50ZXJPZmZzZXQoKQoreworICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQoKSAtIDEpLm9mZnNldCgpOworfQorCitzaXplX3Qg
Q29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQoreworICAgIC8vIFRoaXMgd2ls
bCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1fdm0g
b3IgdGhlCisgICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gSXQncyBP
SyB0byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKKyAgICAvLyBtYXR0ZXIgaXMg
dGhlIHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBzbG93IHBhdGggaXMgdHJp
Z2dlcmVkLgorICAgIGlmICghbV92bSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYg
KCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGljdGlvbiBhcyB3ZSds
bCBnZXQuCisgICAgCisgICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4gYSBzaXplIHRoYXQg
d2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCisgICAgZG91YmxlIG11
bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxp
bmVKSVQtPm1lYW4oKSArCisgICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29k
ZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKKyAgICAKKyAgICAvLyBC
ZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMuIFNpbGVudGx5IGRv
aW5nIHRoZSAid3JvbmciIHRoaW5nCisgICAgLy8gaGVyZSBpcyBPSywgc2luY2UgdGhpcyB3aG9s
ZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KKyAgICBpZiAobXVsdGlwbGllciA8IDAgfHwg
bXVsdGlwbGllciA+IDEwMDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGRvdWJsZSBk
b3VibGVSZXN1bHQgPSBtdWx0aXBsaWVyICogbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOworICAgIAor
ICAgIC8vIEJlIGV2ZW4gbW9yZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IHZhbHVlcyB0aGF0
IHdvbid0IGZpdCBpbnRvIGEgc2l6ZV90LiBJZgorICAgIC8vIHRoZSBmdW5jdGlvbiBpcyBzbyBo
dWdlIHRoYXQgd2UgY2FuJ3QgZXZlbiBmaXQgaXQgaW50byB2aXJ0dWFsIG1lbW9yeSB0aGVuIHdl
CisgICAgLy8gc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBvdGhlciBndWFyZHMgaW4gcGxhY2Ug
dG8gcHJldmVudCB1cyBmcm9tIGV2ZW4gZ2V0dGluZworICAgIC8vIHRvIHRoaXMgcG9pbnQuCisg
ICAgaWYgKGRvdWJsZVJlc3VsdCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KGRvdWJsZVJlc3VsdCk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlE
IG9wY29kZUlEKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmludGVy
cHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9u
cygpLmJlZ2luKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9u
cygpLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsg
Ynl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgc3dpdGNoIChp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRd
LnUub3Bjb2RlKSkgeworI2RlZmluZSBERUZJTkVfT1AoY3VyT3Bjb2RlLCBsZW5ndGgpICAgICAg
ICBcCisgICAgICAgIGNhc2UgY3VyT3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIGlmIChjdXJPcGNvZGUgPT0gb3Bjb2RlSUQpICAgICAgXAorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBieXRlY29kZU9mZnNl
dCArPSBsZW5ndGg7ICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKKyN1bmRlZiBERUZJTkVfT1AKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1N0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX2NvbnN0YW50UmVnaXN0ZXJz
W2ldLmdldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+KG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGF1dG8gZW5k
ID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOworICAgICAgICAgICAgZm9yIChhdXRvIHB0ciA9
IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0cikgeworICAgICAg
ICAgICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9mZnNldCh2aXJ0dWFs
UmVnaXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdv
cmsgZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgorICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAwCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwdHItPmtleS5nZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSB0
aGlzUmVnaXN0ZXIoKSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidGhpcyIpOworICAg
IGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRvQXJndW1lbnQoKSk7
CisKKyAgICByZXR1cm4gIiI7Cit9CisKK1ZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp2YWx1ZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25z
KClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBvcGNv
ZGVMZW5ndGgob3Bjb2RlSUQpOworICAgIHJldHVybiBpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9m
ZnNldCArIGxlbmd0aCAtIDFdLnUucHJvZmlsZTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnZhbGlk
YXRlKCkKK3sKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7IC8v
IENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENvZGVC
bG9jayBmb290cHJpbnQuCisgICAgCisgICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2
ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKKyAgICAKKyAgICBpZiAo
bGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxv
Y2FscykpIHsKKyAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgICAgICBkYXRh
TG9nKCIgICAgV3JvbmcgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0IVxuIik7CisgICAgICAgIGRh
dGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOworICAgICAgICBkYXRhTG9n
KCIgICAgQml0IGNvdW50OiAiLCBsaXZlQXRIZWFkLm51bUJpdHMoKSwgIlxuIik7CisgICAgICAg
IGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbnVtQ2FsbGVlTG9jYWxzOyBpLS07KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChs
aXZlQXRIZWFkW2ldKSB7CisgICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7Cisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgIiwgcmVnLCAiIGlzIGV4cGVjdGVkIHRv
IGJlIGRlYWQuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVB
dEhlYWQsICJcbiIpOworICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZhaWwo
KQoreworICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZSBpbiAiLCAqdGhpcywgIjpcbiIp
OworICAgIGRhdGFMb2coIlxuIik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0aW9u
RGlkRmFpbCgpCit7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkdW1wQnl0ZWNvZGUoKTsKKyAg
ICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZS5cbiIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjph
ZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQoreworICAgIG1fbnVtQnJlYWtw
b2ludHMgKz0gbnVtQnJlYWtwb2ludHM7CisgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMpOwor
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgamV0
dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOworfQorCit2
b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlIG1v
ZGUpCit7CisgICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOworICAgIGlmIChtb2RlID09IFN0ZXBw
aW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisg
ICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGluZyk7
Cit9CisKK1JhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUoaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIG1fcmFyZUNhc2VQcm9maWxlcy5hcHBlbmQoUmFyZUNh
c2VQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJuICZtX3JhcmVDYXNlUHJvZmls
ZXMubGFzdCgpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNhc2VQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIHJldHVybiB0
cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAorICAgICAgICBtX3JhcmVDYXNl
UHJvZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAorICAg
ICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7Cit9CisKK3Vuc2lnbmVkIENv
ZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNv
ZGVPZmZzZXQpCit7CisgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChwcm9maWxlKQor
ICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOworICAgIHJldHVybiAwOworfQorCitB
cml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIHJldHVybiBhcml0aFByb2ZpbGVGb3JQQyhpbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQpOworfQorCitBcml0aFByb2ZpbGUqIENv
ZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qIHBjKQoreworICAgIGF1dG8g
b3Bjb2RlSUQgPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNvZGUp
OworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICBjYXNlIG9wX25lZ2F0ZToKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmcGNbM10udS5vcGVyYW5kKTsKKyAg
ICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9y
OgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3Bfc3ViOgor
ICAgIGNhc2Ugb3BfZGl2OgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmls
ZSo+KCZwY1s0XS51Lm9wZXJhbmQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIENvZGVCbG9jazo6Y291bGRUYWtl
U3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBcml0aFByb2Zp
bGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgaWYgKCFwcm9maWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHByb2ZpbGUtPnRvb2tTcGVjaWFsRmFzdFBhdGgoKTsKK30KKworI2lmIEVOQUJMRShKSVQpCitE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCit7CisgICAg
REZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOwor
ICAgIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZgorCit2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNG
b3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3Ry
dWN0aW9ucykKK3sKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKCktPmhhc09wUHJvZmlsZUNv
bnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBW
ZWN0b3I8c2l6ZV90PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2RlQmxvY2soKS0+b3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7IGkgPCBvZmZzZXRzTGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyBp
cyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMgYmxvY2ssIGZpbmRpbmcg
CisgICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IHdpbGwgZ2l2ZSB1
cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4KKyAgICAgICAgc2l6ZV90
IHN0YXJ0SWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2ldOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4XS51Lm9w
Y29kZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOworICAgICAgICBpbnQgYmFzaWNCbG9j
a1N0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5vcGVyYW5kOworICAg
ICAgICBpbnQgYmFzaWNCbG9ja0VuZE9mZnNldDsKKyAgICAgICAgaWYgKGkgKyAxIDwgb2Zmc2V0
c0xlbmd0aCkgeworICAgICAgICAgICAgc2l6ZV90IGVuZElkeCA9IGJ5dGVjb2RlT2Zmc2V0c1tp
ICsgMV07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KTsKKyAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBpbnN0cnVjdGlv
bnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhlIGNs
b3NpbmcgYnJhY2UuCisgICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6Om1p
bihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21lIHN0
YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMgdGhl
IG9mZnNldCBiZWZvcmUuCisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNo
ZWNrIGFsbG93cyBmb3IgdGhlIHNhbWUgdGV4dHVhbCBKYXZhU2NyaXB0IGJhc2ljIGJsb2NrIHRv
IGhhdmUgaXRzIGJ5dGVjb2RlIGVtaXR0ZWQgbW9yZQorICAgICAgICAvLyB0aGFuIG9uY2UgYW5k
IHN0aWxsIHBsYXkgbmljZSB3aXRoIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuIFdoZW4gYmFz
aWNCbG9ja1N0YXJ0T2Zmc2V0IGlzIGxhcmdlciB0aGFuIAorICAgICAgICAvLyBiYXNpY0Jsb2Nr
RW5kT2Zmc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIGhhcyBl
bWl0dGVkIGNvZGUgZm9yIHRoZSBzYW1lIEFTVCBub2RlIAorICAgICAgICAvLyBtb3JlIHRoYW4g
b25jZSAoZm9yIGV4YW1wbGU6IEZvckluTm9kZSwgRmluYWxseSBibG9ja3MgaW4gVHJ5Tm9kZSwg
ZXRjKS4gVGhvdWdoIHRoZXNlIGFyZSBkaWZmZXJlbnQgCisgICAgICAgIC8vIGJhc2ljIGJsb2Nr
cyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoZXkgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1l
IHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIEphdmFTY3JpcHQgCisgICAgICAgIC8vIHByb2dy
YW0uIFRoZSBjb25kaXRpb246IAorICAgICAgICAvLyAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJh
c2ljQmxvY2tTdGFydE9mZnNldCkgCisgICAgICAgIC8vIGlzIGVuY291bnRlcmVkIHdoZW4gb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3cgbGllcyBhY3Jvc3MgdGhlIGJvdW5kYXJ5IG9mIHRoZXNlIGR1
cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgCisgICAgICAgIC8vIGJsb2NrcyBhbmQgdGhlIHRleHR1
YWwgb2Zmc2V0IGdvZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBkdXBsaWNhdGVkIGJsb2NrIGJhY2sg
dG8gdGhlIGJlZ2lubmluZy4gVGhlc2UgCisgICAgICAgIC8vIHJhbmdlcyBhcmUgZHVtbXkgcmFu
Z2VzIGFuZCBhcmUgaWdub3JlZC4gVGhlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgYmxvY2tz
IHBvaW50IHRvIHRoZSBzYW1lIAorICAgICAgICAvLyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSwg
c28gaWYgYW55IG9mIHRoZW0gZXhlY3V0ZSwgaXQgd2lsbCByZWNvcmQgdGhlIHNhbWUgdGV4dHVh
bCBiYXNpYyBibG9jayBpbiB0aGUgCisgICAgICAgIC8vIEphdmFTY3JpcHQgcHJvZ3JhbSBhcyBl
eGVjdXRpbmcuCisgICAgICAgIC8vIEF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhpcyBzaXR1YXRp
b24gbG9va3MgbGlrZToKKyAgICAgICAgLy8gajogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgKGZy
b20gai0+aywgd2UgaGF2ZSBiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0KQorICAgICAgICAvLyAuLi4KKyAgICAgICAgLy8gazogb3BfcHJvZmlsZV9jb250cm9sX2Zs
b3cgKHdlIHdhbnQgdG8gc2tpcCBvdmVyIHRoZSBqLT5rIGJsb2NrIGFuZCBzdGFydCBmcmVzaCBh
dCBvZmZzZXQgayBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmFzaWMgYmxvY2sgay0+bSkuCisgICAg
ICAgIC8vIC4uLgorICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdworICAgICAg
ICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ugc2hv
dWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVCbG9j
ay4KKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFzaWNCbG9ja0xv
Y2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9ja0xv
Y2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlSUQo
KSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsKKworICAgICAg
ICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0aGluIHRoZSByYW5n
ZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0KKyAgICAgICAg
Ly8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZzZXRzIGFzIGdhcHMg
aW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgorICAgICAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dCBvZiBhIEphdmFTY3Jp
cHQgcHJvZ3JhbSwgCisgICAgICAgIC8vIGZ1bmN0aW9uIGxpdGVyYWxzIGZvcm0gbmV3IGJhc2lj
IGJsb2NrcyBib3VuZGFyaWVzLCBidXQgdGhleSBhcmVuJ3QgcmVwcmVzZW50ZWQgCisgICAgICAg
IC8vIGluc2lkZSB0aGUgQ29kZUJsb2NrJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorICAgICAgICBh
dXRvIGluc2VydEZ1bmN0aW9uR2FwcyA9IFtiYXNpY0Jsb2NrTG9jYXRpb24sIGJhc2ljQmxvY2tT
dGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0gKGNvbnN0IFdyaXRlQmFycmllcjxGdW5j
dGlvbkV4ZWN1dGFibGU+JiBmdW5jdGlvbkV4ZWN1dGFibGUpIHsKKyAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIGludCBmdW5jdGlvblN0YXJ0
ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICBp
bnQgZnVuY3Rpb25FbmQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7Cisg
ICAgICAgICAgICBpZiAoZnVuY3Rpb25TdGFydCA+PSBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgJiYg
ZnVuY3Rpb25FbmQgPD0gYmFzaWNCbG9ja0VuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBiYXNp
Y0Jsb2NrTG9jYXRpb24tPmluc2VydEdhcChmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkVuZCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVj
dXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25EZWNscykKKyAgICAgICAgICAgIGluc2Vy
dEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKKyAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJp
ZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25FeHBycykKKyAg
ICAgICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKKworICAgICAgICBpbnN0
cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2ljQmxvY2tMb2NhdGlvbiA9IGJhc2ljQmxvY2tM
b2NhdGlvbjsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNl
dFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBt
YXApIAoreyAKKyAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOworfQorCitP
cHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKK3sKKyAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgeworICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdp
bj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAg
ICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVT
dHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAg
ICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8
Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7CisgICAgfQorCisgICAgaWYgKE9wdGlvbmFs
PENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykpCisg
ICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworCisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKworT3B0aW9uYWw8dW5zaWduZWQ+IENvZGVCbG9jazo6Ynl0ZWNv
ZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7
CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0OworICAgIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKKyAgICBpZiAoaml0VHlwZSA9PSBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxTaXRl
SW5kZXguYml0cygpOworI2Vsc2UKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
Yml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRzKCkpOworICAgICAg
ICBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsK
KyNlbmRpZgorICAgIH0gZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQgfHwgaml0
VHlwZSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7CisgICAgICAg
IENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKKyAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyNlbHNlCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4g
Ynl0ZWNvZGVPZmZzZXQ7Cit9CisKK2ludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQo
aW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5k
aWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkOworICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVz
aG9sZCAqIDQ7CisgICAgY2FzZSBUcnVlVHJpU3RhdGU6CisgICAgICAgIHJldHVybiB0aHJlc2hv
bGQgLyAyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdGhy
ZXNob2xkOworfQorCit2b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQoreworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OmppdFNvb24oKQoreworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJl
c2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRo
aXMpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkKK3sKKyNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKKyAgICBkb3VibGUgbnVtQWRkcyA9IDAuMDsKKyAgICBkb3VibGUg
dG90YWxBZGRTaXplID0gMC4wOworICAgIGRvdWJsZSBudW1NdWxzID0gMC4wOworICAgIGRvdWJs
ZSB0b3RhbE11bFNpemUgPSAwLjA7CisgICAgZG91YmxlIG51bU5lZ3MgPSAwLjA7CisgICAgZG91
YmxlIHRvdGFsTmVnU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtU3VicyA9IDAuMDsKKyAgICBk
b3VibGUgdG90YWxTdWJTaXplID0gMC4wOworCisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBjb2Rl
QmxvY2stPm1fYWRkSUNzKSB7CisgICAgICAgICAgICBudW1BZGRzKys7CisgICAgICAgICAgICB0
b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKEpJVE11bElDKiBtdWxJQyA6IGNvZGVCbG9jay0+bV9tdWxJQ3MpIHsKKyAgICAgICAgICAg
IG51bU11bHMrKzsKKyAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogY29kZUJsb2Nr
LT5tX25lZ0lDcykgeworICAgICAgICAgICAgbnVtTmVncysrOworICAgICAgICAgICAgdG90YWxO
ZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChK
SVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNzKSB7CisgICAgICAgICAgICBudW1T
dWJzKys7CisgICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNvZGVTaXplKCk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBoZWFwKCktPmZv
ckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOworCisgICAgZGF0YUxvZygiTnVtIEFkZHM6ICIsIG51
bUFkZHMsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIEFkZCBzaXplIGluIGJ5dGVzOiAiLCB0
b3RhbEFkZFNpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2ZXJhZ2UgQWRkIHNpemU6ICIsIHRv
dGFsQWRkU2l6ZSAvIG51bUFkZHMsICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0
YUxvZygiTnVtIE11bHM6ICIsIG51bU11bHMsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIE11
bCBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE11bFNpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2
ZXJhZ2UgTXVsIHNpemU6ICIsIHRvdGFsTXVsU2l6ZSAvIG51bU11bHMsICJcbiIpOworICAgIGRh
dGFMb2coIlxuIik7CisgICAgZGF0YUxvZygiTnVtIE5lZ3M6ICIsIG51bU5lZ3MsICJcbiIpOwor
ICAgIGRhdGFMb2coIlRvdGFsIE5lZyBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE5lZ1NpemUsICJc
biIpOworICAgIGRhdGFMb2coIkF2ZXJhZ2UgTmVnIHNpemU6ICIsIHRvdGFsTmVnU2l6ZSAvIG51
bU5lZ3MsICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0YUxvZygiTnVtIFN1YnM6
ICIsIG51bVN1YnMsICJcbiIpOworICAgIGRhdGFMb2coIlRvdGFsIFN1YiBzaXplIGluIGJ5dGVz
OiAiLCB0b3RhbFN1YlNpemUsICJcbiIpOworICAgIGRhdGFMb2coIkF2ZXJhZ2UgU3ViIHNpemU6
ICIsIHRvdGFsU3ViU2l6ZSAvIG51bVN1YnMsICJcbiIpOworCisgICAgZGF0YUxvZygiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS1cbiIpOworI2VuZGlmCit9CisKK0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcyYgQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7CisgICAgeworICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBpZiAoIW1fbGl2ZW5lc3NB
bmFseXNpcykKKyAgICAgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcyA9IFdURk1vdmUoYW5hbHlz
aXMpOworICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKKyAgICB9Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDgz
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDQ2MzggKzI4LDE4IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotCi0jaW5jbHVkZSAiQXJp
dGhQcm9maWxlLmgiCi0jaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCi0jaW5jbHVkZSAi
Qnl0ZWNvZGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCIKLSNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgotI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVz
LmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCi0jaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHRHJpdmVyLmgiCi0jaW5j
bHVkZSAiREZHSklUQ29kZS5oIgotI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCi0jaW5jbHVkZSAi
RGVidWdnZXIuaCIKLSNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCi0jaW5jbHVk
ZSAiR2V0UHV0SW5mby5oIgotI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgotI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUTWF0aElDLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNs
dWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1l
bnQuaCIKLSNpbmNsdWRlICJMTEludERhdGEuaCIKLSNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQu
aCIKLSNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCIKLSNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCi0jaW5jbHVkZSAiUG9seW1v
cnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
UmVkdWNlV2hpdGVzcGFjZS5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgIlR5cGVMb2NhdGlvbkNhY2hlLmgiCi0jaW5j
bHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVh
bS5oIgotI2luY2x1ZGUgIlZNSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RXhlY3V0
YWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1NpbXBsZVN0YXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+Ci0KLSNpZiBFTkFCTEUoSklUKQot
I2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShE
RkdfSklUKQotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgotI2VuZGlmCisjaW5jbHVkZSAiTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJ
bmZvIENvZGVCbG9jazo6c19pbmZvID0gewotICAgICJDb2RlQmxvY2siLCAwLCAwLAotICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEZ1bmN0
aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIkZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6
OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29kZUJsb2NrKQot
fTsKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLWNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6c19pbmZvID0gewotICAgICJXZWJBc3NlbWJseUNvZGVCbG9jayIsICZCYXNl
OjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUNvZGVCbG9j
aykKLX07Ci0jZW5kaWYKLQotY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9jazo6c19pbmZv
ID0gewotICAgICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFU
RV9NRVRIT0RfVEFCTEUoR2xvYmFsQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIFBy
b2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNl
OjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29kZUJsb2NrKQot
fTsKLQogY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsK
ICAgICAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCiAgICAgQ1JF
QVRFX01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQogfTsKIAotY29uc3QgQ2xh
c3NJbmZvIEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiRXZhbENvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29kZUJsb2NrKQot
fTsKLQotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0g
ICAganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNvZGVCbG9jaygp
OwotfQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotdm9pZCBXZWJBc3NlbWJseUNvZGVCbG9j
azo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFdlYkFzc2VtYmx5Q29kZUJs
b2NrKj4oY2VsbCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOwotfQotI2VuZGlmCi0KLXZvaWQg
UHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PFBy
b2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKLX0KLQogdm9pZCBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBqc0Nh
c3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
aygpOwogfQogCi12b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewot
ICAgIGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2NrKCk7Ci19Ci0K
LUNTdHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAotewotICAgIHN3aXRjaCAo
Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAgICAgcmV0dXJuICI8Z2xv
YmFsPiI7Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgcmV0dXJuICI8ZXZhbD4iOwotICAg
IGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgpOwotICAgIGNh
c2UgTW9kdWxlQ29kZToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlPiI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwotICAgIH0K
LX0KLQotYm9vbCBDb2RlQmxvY2s6Omhhc0hhc2goKSBjb25zdAotewotICAgIHJldHVybiAhIW1f
aGFzaDsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvQ29tcHV0ZUhhc2goKSBjb25zdAot
ewotICAgIHJldHVybiAhaXNDb21waWxhdGlvblRocmVhZCgpOwotfQotCi1Db2RlQmxvY2tIYXNo
IENvZGVCbG9jazo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhc2gpIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNTYWZlVG9Db21wdXRlSGFzaCgpKTsKLSAgICAgICAgbV9oYXNoID0g
Q29kZUJsb2NrSGFzaChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCksIHNwZWNpYWxp
emF0aW9uS2luZCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faGFzaDsKLX0KLQotQ1N0cmluZyBD
b2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0Ci17Ci0gICAgaWYgKGNvZGVUeXBl
KCkgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxl
KCktPnNvdXJjZSgpLnRvVVRGOCgpOwotICAgIAotICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRl
ciA9IHNvdXJjZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSk7Ci0gICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkID0gZXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRh
YmxlKCk7Ci0gICAgdW5zaWduZWQgdW5saW5rZWRTdGFydE9mZnNldCA9IHVubGlua2VkLT5zdGFy
dE9mZnNldCgpOwotICAgIHVuc2lnbmVkIGxpbmtlZFN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS0+
c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKLSAgICBpbnQgZGVsdGEgPSBsaW5rZWRTdGFydE9mZnNl
dCAtIHVubGlua2VkU3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgcmFuZ2VTdGFydCA9IGRlbHRh
ICsgdW5saW5rZWQtPnVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKTsKLSAgICB1bnNpZ25lZCBy
YW5nZUVuZCA9IGRlbHRhICsgdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZC0+c291
cmNlTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZygKLSAgICAgICAgImZ1bmN0aW9uICIs
Ci0gICAgICAgIHByb3ZpZGVyLT5zb3VyY2UoKS5zdWJzdHJpbmcocmFuZ2VTdGFydCwgcmFuZ2VF
bmQgLSByYW5nZVN0YXJ0KS51dGY4KCkpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6c291cmNl
Q29kZU9uT25lTGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlZHVjZVdoaXRlc3BhY2Uoc291
cmNlQ29kZUZvclRvb2xzKCkpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6aGFzaEFzU3RyaW5n
SWZQb3NzaWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGhhc0hhc2goKSB8fCBpc1NhZmVUb0NvbXB1
dGVIYXNoKCkpCi0gICAgICAgIHJldHVybiB0b0NTdHJpbmcoaGFzaCgpKTsKLSAgICByZXR1cm4g
Ijxuby1oYXNoPiI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFBy
aW50U3RyZWFtJiBvdXQsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkgY29uc3QKLXsKLSAgICBv
dXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpKTsK
LSAgICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+Iik7Ci0gICAgaWYgKCEh
bV9hbHRlcm5hdGl2ZSkKLSAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoYWx0ZXJuYXRpdmUo
KSksICItPiIpOwotICAgIG91dC5wcmludChSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwg
IiwgIiwgaml0VHlwZSwgY29kZVR5cGUoKSk7Ci0KLSAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpCi0gICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7Ci0gICAg
b3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7Ci0gICAgaWYgKHRoaXMtPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkK
LSAgICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKLSAgICBpZiAo
b3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCi0gICAgICAgIG91dC5wcmlu
dCgiIChOZXZlcklubGluZSkiKTsKLSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5l
dmVyT3B0aW1pemUoKSkKLSAgICAgICAgb3V0LnByaW50KCIgKE5ldmVyT3B0aW1pemUpIik7Ci0g
ICAgZWxzZSBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVyRlRMT3B0aW1pemUoKSkK
LSAgICAgICAgb3V0LnByaW50KCIgKE5ldmVyRlRMT3B0aW1pemUpIik7Ci0gICAgaWYgKG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCi0gICAgICAgIG91dC5w
cmludCgiIChEaWRUcnlUb0VudGVySW5Mb29wKSIpOwotICAgIGlmIChvd25lclNjcmlwdEV4ZWN1
dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2Rl
KSIpOwotICAgIGlmIChtX2RpZEZhaWxKSVRDb21waWxhdGlvbikKLSAgICAgICAgb3V0LnByaW50
KCIgKEpJVEZhaWwpIik7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCAmJiBtX2RpZEZhaWxGVExDb21waWxhdGlvbikKLSAgICAgICAgb3V0LnByaW50KCIg
KEZUTEZhaWwpIik7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCAmJiBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwpCi0gICAgICAgIG91dC5wcmludCgiIChI
YWRGVExSZXBsYWNlbWVudCkiKTsKLSAgICBvdXQucHJpbnQoIl0iKTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1wQXNzdW1pbmdK
SVRUeXBlKG91dCwgaml0VHlwZSgpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgaWROYW1lKGludCBp
ZDAsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAgIHJldHVybiB0b0NTdHJpbmcoaWRl
bnQuaW1wbCgpLCAiKEBpZCIsIGlkMCwgIikiKTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6OnJl
Z2lzdGVyTmFtZShpbnQgcikgY29uc3QKLXsKLSAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgocikpCi0gICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7Ci0KLSAgICByZXR1cm4gdG9D
U3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpjb25z
dGFudE5hbWUoaW50IGluZGV4KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25z
dGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgpLCAiKSIpOwotfQotCi1zdGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0
cmluZyhSZWdFeHAqIHJlZ0V4cCkKLXsKLSAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwg
MCwgMCwgMCB9OwotICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkp
Ci0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnZyc7Ci0gICAgaWYgKHJlZ0V4cC0+aWdub3Jl
Q2FzZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwotICAgIGlmIChyZWdFeHAt
Pm11bHRpbGluZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKLSAgICBpZiAocmVn
RXhwLT5zdGlja3koKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd5JzsKLSAgICBpZiAo
cmVnRXhwLT51bmljb2RlKCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAndSc7Ci0KLSAg
ICByZXR1cm4gdG9DU3RyaW5nKCIvIiwgcmVnRXhwLT5wYXR0ZXJuKCkuaW1wbCgpLCBwb3N0Zml4
KTsKLX0KLQotc3RhdGljIENTdHJpbmcgcmVnZXhwTmFtZShpbnQgcmUsIFJlZ0V4cCogcmVnZXhw
KQotewotICAgIHJldHVybiB0b0NTdHJpbmcocmVnZXhwVG9Tb3VyY2VTdHJpbmcocmVnZXhwKSwg
IihAcmUiLCByZSwgIikiKTsKLX0KLQotTkVWRVJfSU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiBk
ZWJ1Z0hvb2tOYW1lKGludCBkZWJ1Z0hvb2tUeXBlKQotewotICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8RGVidWdIb29rVHlwZT4oZGVidWdIb29rVHlwZSkpIHsKLSAgICAgICAgY2FzZSBEaWRFbnRl
ckNhbGxGcmFtZToKLSAgICAgICAgICAgIHJldHVybiAiZGlkRW50ZXJDYWxsRnJhbWUiOwotICAg
ICAgICBjYXNlIFdpbGxMZWF2ZUNhbGxGcmFtZToKLSAgICAgICAgICAgIHJldHVybiAid2lsbExl
YXZlQ2FsbEZyYW1lIjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVudDoKLSAgICAg
ICAgICAgIHJldHVybiAid2lsbEV4ZWN1dGVTdGF0ZW1lbnQiOwotICAgICAgICBjYXNlIFdpbGxF
eGVjdXRlRXhwcmVzc2lvbjoKLSAgICAgICAgICAgIHJldHVybiAid2lsbEV4ZWN1dGVFeHByZXNz
aW9uIjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06Ci0gICAgICAgICAgICByZXR1
cm4gIndpbGxFeGVjdXRlUHJvZ3JhbSI7Ci0gICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06
Ci0gICAgICAgICAgICByZXR1cm4gImRpZEV4ZWN1dGVQcm9ncmFtIjsKLSAgICAgICAgY2FzZSBE
aWRSZWFjaEJyZWFrcG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gImRpZFJlYWNoQnJlYWtwb2lu
dCI7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gIiI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mIG91
dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQs
IGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotCi0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OnByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBl
eGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9w
KQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOwotICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OnByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBpbnQgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
IGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywgJWQoLT4l
ZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7
Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBF
eGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCkKLXsK
LSAgICBjb25zdCBjaGFyKiBvcDsKLSAgICBzd2l0Y2ggKGV4ZWMtPmludGVycHJldGVyKCktPmdl
dE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKLSAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAg
ICAgb3AgPSAiZ2V0X2J5X2lkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9nZXRfYnlf
aWRfcHJvdG9fbG9hZDoKLSAgICAgICAgb3AgPSAiZ2V0X2J5X2lkX3Byb3RvX2xvYWQiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDoKLSAgICAgICAgb3AgPSAi
Z2V0X2J5X2lkX3Vuc2V0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9nZXRfYXJyYXlf
bGVuZ3RoOgotICAgICAgICBvcCA9ICJhcnJheV9sZW5ndGgiOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIENP
TVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQotICAgICAgICBvcCA9IDA7
Ci0jZW5kaWYKLSAgICB9Ci0gICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOwot
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgp
KTsKLSAgICBpdCArPSA0OyAvLyBJbmNyZW1lbnQgdXAgdG8gdGhlIHZhbHVlIHByb2ZpbGVyLgot
fQotCi1zdGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNo
YXIqIG5hbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
LXsKLSAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG91dC5w
cmludGYoIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOwotICAgIAotICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGlkZW50LmltcGwoKSk7Ci0g
ICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICBvdXQucHJpbnRmKCIgKG9m
ZnNldCA9ICVkKSIsIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBDaGFpbihQcmludFN0
cmVhbSYgb3V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGNvbnN0IElkZW50aWZpZXImIGlkZW50
KQotewotICAgIG91dC5wcmludGYoImNoYWluID0gJXA6IFsiLCBjaGFpbik7Ci0gICAgYm9vbCBm
aXJzdCA9IHRydWU7Ci0gICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogY3VycmVudFN0
cnVjdHVyZSA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgICAqY3VycmVudFN0cnVjdHVyZTsKLSAg
ICAgICAgICsrY3VycmVudFN0cnVjdHVyZSkgewotICAgICAgICBpZiAoZmlyc3QpCi0gICAgICAg
ICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnRm
KCIsICIpOwotICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGN1cnJlbnRTdHJ1
Y3R1cmUtPmdldCgpLCBpZGVudCk7Ci0gICAgfQotICAgIG91dC5wcmludGYoIl0iKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQs
IEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQot
ewotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkg
KyBsb2NhdGlvbjsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7
IC8vIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25m
aWd1cmF0aW9ucy4KLSAgICAKLSAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2Rl
SUQoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9hcnJheV9sZW5ndGgpCi0gICAg
ICAgIG91dC5wcmludGYoIiBsbGludChhcnJheV9sZW5ndGgpIik7Ci0gICAgZWxzZSBpZiAoU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEKSB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KHN0cnVjdHVyZUlEKTsKLSAgICAgICAgb3V0LnByaW50ZigiIGxsaW50KCIpOwotICAg
ICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0cnVjdHVyZSwgaWRlbnQpOwotICAg
ICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5n
ZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xvYWQpCi0gICAgICAgICAgICBvdXQucHJpbnRmKCIgcHJvdG8oJXApIiwgaW5zdHJ1Y3Rpb25b
Nl0udS5wb2ludGVyKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YlB0ciA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7Ci0g
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdHViUHRyOwotICAgICAgICBp
ZiAoc3R1YkluZm8ucmVzZXRCeUdDKQotICAgICAgICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5
IEdDKSIpOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgICAg
ICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6
OkdldEJ5SWRTZWxmOgotICAgICAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOwotICAgICAgICAg
ICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1
YjoKLSAgICAgICAgICAgIG91dC5wcmludGYoInN0dWIiKTsKLSAgICAgICAgICAgIHN0dWIgPSBz
dHViSW5mby51LnN0dWI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWNoZVR5
cGU6OlVuc2V0OgotICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoYmFz
ZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAgICAg
IGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0dWIpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwg
KnN0dWIpOwotCi0gICAgICAgIG91dC5wcmludGYoIikiKTsKLSAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5
SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJ
bmZvTWFwJiBtYXApCi17Ci0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKSArIGxvY2F0aW9uOwotCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBpZGVudGlmaWVyKGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgCi0gICAgVU5VU0VE
X1BBUkFNKGlkZW50KTsgLy8gdGVsbCB0aGUgY29tcGlsZXIgdG8gc2h1dCB1cCBpbiBjZXJ0YWlu
IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zLgotCi0gICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0
aW9uWzhdLnUucHV0QnlJZEZsYWdzKTsKLSAgICAKLSAgICBpZiAoU3RydWN0dXJlSUQgc3RydWN0
dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEKSB7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVy
ZUlEKTsKLSAgICAgICAgb3V0LnByaW50KCIgbGxpbnQoIik7Ci0gICAgICAgIGlmIChTdHJ1Y3R1
cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQpIHsKLSAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAicHJldiIsIHN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgb3V0LnByaW50KCIs
ICIpOwotICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgbmV3U3RydWN0dXJl
LCBpZGVudCk7Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1
Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKSkgewotICAgICAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGR1bXBTdHJ1Y3R1
cmUob3V0LCAic3RydWN0Iiwgc3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAgIG91dC5wcmludCgi
KSIpOwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViUHRyID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkpIHsKLSAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0dWJQdHI7Ci0gICAgICAgIGlmIChzdHViSW5m
by5yZXNldEJ5R0MpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAoUmVzZXQgQnkgR0MpIik7Ci0g
ICAgICAgIAotICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwotICAgICAgICAKLSAgICAgICAg
c3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1
dEJ5SWRSZXBsYWNlOgotICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKLSAgICAg
ICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1YkluZm8udS5ieUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgICAgIG91dC5wcmludCgic3R1
YiwgIiwgKnN0dWJJbmZvLnUuc3R1Yik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJ1
bnNldCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgb3V0LnByaW50ZigiKSIpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKG1hcCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFBy
aW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0
cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2Rl
LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkK
LXsKLSAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IGZ1bmMgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICBpbnQgYXJnQ291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnQocmVn
aXN0ZXJOYW1lKGRzdCksICIsICIsIHJlZ2lzdGVyTmFtZShmdW5jKSwgIiwgIiwgYXJnQ291bnQs
ICIsICIsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICBvdXQucHJpbnQoIiAodGhpcyBhdCAiLCB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCAtcmVnaXN0ZXJPZmZzZXQpLCAiKSIpOwotICAgIGlm
IChjYWNoZUR1bXBNb2RlID09IER1bXBDYWNoZXMpIHsKLSAgICAgICAgTExJbnRDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGl0WzFdLnUuY2FsbExpbmtJbmZvOwotICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSkgewotICAgICAgICAgICAgb3V0LnByaW50ZigKLSAg
ICAgICAgICAgICAgICAiIGxsaW50KCVwLCBleGVjICVwKSIsCi0gICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKSwKLSAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmxhc3RTZWVuQ2FsbGVlLT5leGVjdXRhYmxlKCkpOwotICAgICAgICB9Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogaW5mbyA9IG1hcC5nZXQoQ29kZU9y
aWdpbihsb2NhdGlvbikpKSB7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBpbmZv
LT5sYXN0U2VlbkNhbGxlZSgpOwotICAgICAgICAgICAgaWYgKHRhcmdldCkKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFyZ2V0LT5leGVj
dXRhYmxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaml0VHlwZSgpICE9
IEpJVENvZGU6OkZUTEpJVCkKLSAgICAgICAgICAgIG91dC5wcmludCgiIHN0YXR1cygiLCBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwgIikiKTsKLSNlbHNl
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi0gICAgfQotICAgICsraXQ7Ci0g
ICAgKytpdDsKLSAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2Zp
bGluZyk7Ci0gICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91
dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQs
IGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9w
KTsKLSAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7Ci0gICAgaXQgKz0gNTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoKQot
ewotICAgIGR1bXBTb3VyY2UoV1RGOjpkYXRhRmlsZSgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7Ci0gICAgaWYgKGV4ZWN1dGFibGUt
PmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkpIHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOwotICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCi0gICAgICAgICAgICBmdW5jdGlv
bkV4ZWN1dGFibGUtPnBhcmFtZXRlcnNTdGFydE9mZnNldCgpLAotICAgICAgICAgICAgZnVuY3Rp
b25FeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgKyAxKTsgLy8gVHlwZSBwcm9m
aWxpbmcgZW5kIG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30nLgotICAgICAg
ICAKLSAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiAiLCBpbmZlcnJlZE5hbWUoKSwgc291cmNl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQucHJpbnQoZXhlY3V0YWJsZS0+c291
cmNlKCkudmlldygpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgpCi17Ci0g
ICAgZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
dW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICAvLyBXZSBvbmx5IHVzZSB0aGUg
RXhlY1N0YXRlKiBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgbGVhZCB0byBKUyBleGVj
dXRpb24sCi0gICAgLy8gbGlrZSBjb252ZXJ0aW5nIGEgSlNTdHJpbmcgdG8gYSBTdHJpbmcuIEhl
bmNlIHRoZSBnbG9iYWxFeGVjIGlzIGFwcHJvcHJpYXRlLgotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgCi0gICAgc2l6ZV90IGluc3RydWN0
aW9uQ291bnQgPSAwOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNv
ZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQotICAgICAgICArK2luc3RydWN0aW9u
Q291bnQ7Ci0KLSAgICBvdXQucHJpbnQoKnRoaXMpOwotICAgIG91dC5wcmludGYoCi0gICAgICAg
ICI6ICVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5dGVzOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNh
bGxlZSByZWdpc3RlcihzKTsgJWQgdmFyaWFibGUocykiLAotICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAotICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rp
b24pKSwKLSAgICAgICAgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZUxvY2FscywgbV9udW1W
YXJzKTsKLSAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgc2NvcGVSZWdpc3RlcigpKTsKLSAg
ICBvdXQucHJpbnRmKCJcbiIpOwotICAgIAotICAgIFN0dWJJbmZvTWFwIHN0dWJJbmZvczsKLSAg
ICBDYWxsTGlua0luZm9NYXAgY2FsbExpbmtJbmZvczsKLSAgICBnZXRTdHViSW5mb01hcChzdHVi
SW5mb3MpOwotICAgIGdldENhbGxMaW5rSW5mb01hcChjYWxsTGlua0luZm9zKTsKLSAgICAKLSAg
ICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAg
IGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5lbmQoKTsKLSAgICBmb3Ig
KGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGR1bXBCeXRlY29kZShvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgc3R1YkluZm9zLCBjYWxsTGlua0lu
Zm9zKTsKLSAgICAKLSAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIG91
dC5wcmludGYoIlxuSWRlbnRpZmllcnM6XG4iKTsKLSAgICAgICAgc2l6ZV90IGkgPSAwOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgIGlkJXUgPSAlc1xuIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGkpLCBpZGVudGlmaWVyKGkpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpICE9IG51bWJlck9mSWRlbnRp
ZmllcnMoKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NvbnN0YW50UmVnaXN0ZXJzLmlzRW1wdHko
KSkgewotICAgICAgICBvdXQucHJpbnRmKCJcbkNvbnN0YW50czpcbiIpOwotICAgICAgICBzaXpl
X3QgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHN3aXRj
aCAobV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKLSAgICAgICAgICAg
IGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6Ci0gICAgICAgICAgICAgICAg
c291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgZG91
YmxlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgotICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246Ok90aGVyOgotICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2Ny
aXB0aW9uID0gIiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaSksIHRvQ1N0cmluZyhtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCksIHNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICsraTsKLSAg
ICAgICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygp
KSB7Ci0gICAgICAgIG91dC5wcmludGYoIlxubV9yZWdleHBzOlxuIik7Ci0gICAgICAgIHNpemVf
dCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50ZigiICByZSV1ID0g
JXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV91
bmxpbmtlZENvZGUtPnJlZ2V4cChpKSkuZGF0YSgpKTsKLSAgICAgICAgICAgICsraTsKLSAgICAg
ICAgfSB3aGlsZSAoaSA8IGNvdW50KTsKLSAgICB9Ci0KLSAgICBkdW1wRXhjZXB0aW9uSGFuZGxl
cnMob3V0KTsKLSAgICAKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJTd2l0Y2ggSnVt
cCBUYWJsZXM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7Ci0gICAgICAgICAgICBpbnQg
ZW50cnkgPSAwOwotICAgICAgICAgICAgVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0uYnJhbmNoT2Zmc2V0cy5lbmQo
KTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytlbnRyeSkgewotICAgICAgICAgICAgICAgIGlmICgh
Kml0ZXIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG91
dC5wcmludGYoIlx0XHQlNGQgPT4gJTA0ZFxuIiwgZW50cnkgKyBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXNbaV0ubWluLCAqaXRlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIgICAgICB9XG4iKTsKLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGls
ZSAoaSA8IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJcblN0cmluZyBTd2l0Y2gg
SnVtcCBUYWJsZXM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7Ci0gICAgICAgICAgICBT
dHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7
Ci0gICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
aV0ub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIGl0ZXItPmtleS0+dXRmOCgp
LmRhdGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiAgICAgIH1cbiIpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpIDwg
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7Ci0gICAgfQotCi0g
ICAgb3V0LnByaW50ZigiXG4iKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBFeGNlcHRpb25I
YW5kbGVycyhQcmludFN0cmVhbSYgb3V0KQotewotICAgIGlmIChtX3JhcmVEYXRhICYmICFtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJp
bnRmKCJcbkV4Y2VwdGlvbiBIYW5kbGVyczpcbiIpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgb3V0LnByaW50ZigiXHQg
JWQ6IHsgc3RhcnQ6IFslNGRdIGVuZDogWyU0ZF0gdGFyZ2V0OiBbJTRkXSB9ICVzXG4iLAotICAg
ICAgICAgICAgICAgIGkgKyAxLCBoYW5kbGVyLnN0YXJ0LCBoYW5kbGVyLmVuZCwgaGFuZGxlci50
YXJnZXQsIGhhbmRsZXIudHlwZU5hbWUoKSk7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0g
d2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSk7Ci0gICAg
fQotfQotCi12b2lkIENvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmlsaW5nKFByaW50U3RyZWFtJiBv
dXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAgaWYgKGhhc1ByaW50ZWRQcm9m
aWxpbmcpIHsKLSAgICAgICAgb3V0LnByaW50KCI7ICIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIG91dC5wcmludCgiICAgICIpOwotICAgIGhhc1ByaW50ZWRQcm9maWxpbmcg
PSB0cnVlOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAg
ICArK2l0OwotICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5wcm9maWxlLT5icmllZkRl
c2NyaXB0aW9uKGxvY2tlcik7Ci0gICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwotICAgIG91dC5wcmludChkZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
dW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBp
dCwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIAotICAgICsraXQ7Ci0gICAgaWYgKCFpdC0+dS5hcnJheVBy
b2ZpbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUu
YXJyYXlQcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKGxvY2tlciwgdGhpcyk7Ci0gICAgaWYgKCFk
ZXNjcmlwdGlvbi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJlZ2luRHVtcFByb2Zp
bGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIG91dC5wcmludChkZXNjcmlwdGlv
bik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSwgYm9vbCYg
aGFzUHJpbnRlZFByb2ZpbGluZykKLXsKLSAgICBpZiAoIXByb2ZpbGUgfHwgIXByb2ZpbGUtPm1f
Y291bnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwg
aGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgb3V0LnByaW50KG5hbWUsIHByb2ZpbGUtPm1fY291
bnRlcik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQXJpdGhQcm9maWxlKFByaW50U3RyZWFt
JiBvdXQsIEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykK
LXsKLSAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBiZWdpbkR1
bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICBvdXQucHJpbnQoInJl
c3VsdHM6ICIsICpwcm9maWxlKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50TG9jYXRpb25B
bmRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IElu
c3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKQotewotICAgIG91dC5wcmludGYoIlslNGRdICUt
MTdzICIsIGxvY2F0aW9uLCBvcCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9u
T3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQg
b3BlcmFuZCkKLXsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShvcGVyYW5kKS5kYXRh
KCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAotICAgIFByaW50U3RyZWFt
JiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJ
bnN0cnVjdGlvbiomIGl0LAotICAgIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0
IENhbGxMaW5rSW5mb01hcCYgY2FsbExpbmtJbmZvcykKLXsKLSAgICBpbnQgbG9jYXRpb24gPSBp
dCAtIGJlZ2luOwotICAgIGJvb2wgaGFzUHJpbnRlZFByb2ZpbGluZyA9IGZhbHNlOwotICAgIE9w
Y29kZUlEIG9wY29kZSA9IGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9w
Y29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgY2FzZSBvcF9lbnRlcjogewot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
ZW50ZXIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImdldF9zY29wZSIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6IHsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVf
c2NvcGVkX2FyZ3VtZW50czogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50
czogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfY2xv
bmVkX2FyZ3VtZW50cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2FyZ3VtZW50X2NvdW50OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFyZ3VtZW50X2NvdW50IiwgcjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50T2Zmc2V0
ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfcmVzdCIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1lbnRzT2Zmc2V0
OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9yZXN0X2xlbmd0aCIpOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJndW1lbnRPZmZzZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczog
ewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZmVycmVk
SW5saW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGNhY2hlZEZ1bmN0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfdGhpcyIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAldSwgJXUiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHksIGNh
Y2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfdG9fdGhpczogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJ0b190aGlzIiwgcjApOwotICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSAoKytpdCktPnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgY2FjaGUoc3RydWN0ID0gIiwg
UmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICAgICAgb3V0LnByaW50KCIsICIs
ICgrK2l0KS0+dS50b1RoaXNTdGF0dXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9jaGVja190ZHo6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVy
YW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfY2hlY2tfdGR6IiwgcjApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19vYmpl
Y3QiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAldSIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKLSAgICAgICAgICAgICsraXQ7IC8vIFNr
aXAgb2JqZWN0IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJh
eSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShk
c3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3YpLmRhdGEoKSwgYXJnYyk7Ci0gICAgICAgICAg
ICArK2l0OyAvLyBTa2lwIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogewot
ICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGxlbmd0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5X3dpdGhfc2l6ZSIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUobGVuZ3RoKS5kYXRhKCkpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBh
cnJheSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6IHsKLSAgICAgICAgICAgIGludCBkc3Qg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Fy
cmF5X2J1ZmZlciIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlZCIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7Ci0gICAgICAgICAgICArK2l0OyAvLyBT
a2lwIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcmUwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJuZXdfcmVnZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQp
bV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKQotICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiVzIiwgcmVnZXhwTmFtZShyZTAsIHJlZ2V4cChyZTApKS5kYXRhKCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludGYoImJhZF9yZWdleHAoJWQpIiwg
cmUwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbW92
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibW92Iik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
cm9maWxlX3R5cGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICArK2l0Owot
ICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX3Byb2ZpbGVfdHlwZSIpOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OiB7Ci0gICAg
ICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9ICgrK2l0KS0+
dS5iYXNpY0Jsb2NrTG9jYXRpb247Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwcm9maWxlX2NvbnRyb2xfZmxvdyIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiWyVkLCAlZF0iLCBiYXNpY0Jsb2NrTG9jYXRpb24tPnN0YXJ0T2Zmc2V0
KCksIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAgIHByaW50VW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5vdCIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcTogewotICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKLSAgICAgICAgICAgIHByaW50
VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxX251bGwiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxOiB7Ci0gICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7Ci0gICAgICAg
ICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXFfbnVsbCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdHJpY3RlcTog
ewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN0
cmljdGVxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X25zdHJpY3RlcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm5zdHJpY3RlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9sZXNzOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibGVzcyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsZXNzZXEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogewotICAgICAgICAgICAgcHJpbnRCaW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXIiKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOiB7Ci0gICAgICAgICAg
ICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ3JlYXRlcmVxIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luYzogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbmMi
LCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Rl
YzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJkZWMiLCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3RvX251bWJlcjogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAidG9fbnVtYmVyIik7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxp
bmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX3N0cmluZzogewotICAgICAgICAgICAgcHJpbnRV
bmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fc3RyaW5nIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lZ2F0ZTogewotICAgICAgICAg
ICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVnYXRlIik7Ci0gICAg
ICAgICAgICArK2l0OyAvLyBvcF9uZWdhdGUgaGFzIGFuIGV4dHJhIG9wZXJhbmQgZm9yIHRoZSBB
cml0aFByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2FkZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImFkZCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibXVsIik7Ci0gICAgICAgICAgICArK2l0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kaXY6IHsKLSAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkaXYiKTsKLSAg
ICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX21vZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm1vZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wb3c6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJwb3ciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAic3ViIik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKLSAgICAgICAgICAgIHByaW50
QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsc2hpZnQiKTsKLSAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7
Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicnNo
aWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Vy
c2hpZnQ6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJ1cnNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2JpdGFuZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImJpdGFuZCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Ci0gICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYml0eG9yIik7Ci0gICAgICAg
ICAgICArK2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9iaXRvcjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImJpdG9yIik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOiB7Ci0gICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvdmVycmlkZXNfaGFzX2luc3RhbmNlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluc3RhbmNlb2Yi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZl9jdXN0b206IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMyA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiaW5zdGFuY2VvZl9jdXN0b20iKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIzKS5kYXRhKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF91bnNpZ25l
ZDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
dW5zaWduZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfdHlwZW9mOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJ0eXBlb2YiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfaXNfZW1wdHk6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImlzX2VtcHR5Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDogewotICAgICAgICAgICAgcHJpbnRVbmFy
eU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfdW5kZWZpbmVkIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2Jvb2xlYW46IHsKLSAgICAg
ICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2Jvb2xlYW4i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfbnVt
YmVyOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJpc19udW1iZXIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgdHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfY2VsbF93aXRoX3R5cGUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHR5cGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKLSAgICAgICAgICAg
IHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVjdCIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3Jf
bnVsbDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiaXNfb2JqZWN0X29yX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2Z1bmN0aW9uIik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luOiB7Ci0gICAgICAgICAgICBwcmludEJp
bmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW4iKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDogewotICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
InRyeV9nZXRfYnlfaWQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShp
ZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2Zp
bGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9wcm90b19sb2FkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDoKLSAg
ICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBwcmludEdldEJ5
SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCk7Ci0gICAgICAgICAgICBwcmludEdldEJ5SWRD
YWNoZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBzdHViSW5mb3MpOwotICAgICAgICAgICAg
ZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90
aGlzOiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJnZXRfYnlfaWRfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
aWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbF93aXRoX3RoaXMiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIzKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwg
aXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIHByaW50UHV0QnlJZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkIik7Ci0gICAgICAgICAgICBwcmlu
dFB1dEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGxvY2F0aW9uLCBzdHViSW5mb3MpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlz
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJw
dXRfYnlfaWRfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
aWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0
YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbF93aXRoX3RoaXM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMyA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAicHV0X2J5X3ZhbF93aXRoX3RoaXMiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIz
KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9wdXRfZ2V0dGVyX2J5X2lkOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX2J5X2lkIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3NldHRl
cl9ieV9pZDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAicHV0X3NldHRlcl9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
LCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmll
cihpZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBuMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5k
YXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRh
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRf
Z2V0dGVyX2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJwdXRfZ2V0dGVyX2J5X3ZhbCIpOwotICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOiB7Ci0gICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9zZXR0ZXJf
YnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgbjAsIHJlZ2lzdGVy
TmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVmaW5lX2RhdGFfcHJvcGVydHkiKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIzKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHI0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMykuZGF0YSgpLCByZWdpc3Rlck5hbWUocjQpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9ieV9pZDogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImRlbF9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaWROYW1l
KGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfdmFs
Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV92YWwiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAg
IGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgInB1dF9ieV92YWxfZGlyZWN0Iik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQXJy
YXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsKLSAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImRlbF9ieV92YWwiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X2J5X2luZGV4OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pbmRleCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICV1LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXA6IHsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImptcCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJWQoLT4l
ZCkiLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfanRydWU6IHsKLSAgICAgICAgICAgIHByaW50Q29uZGl0
aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImp0cnVlIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pmYWxzZTogewotICAg
ICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0
aW9uLCAiamZhbHNlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2plcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQs
IGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqZXFfbnVsbCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKLSAgICAgICAgICAg
IHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpu
ZXFfbnVsbCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9qbmVxX3B0cjogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIgPSAoKytpdCktPnUuc3BlY2lhbFBv
aW50ZXI7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmVx
X3B0ciIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkICglcCksICVkKC0+JWQpIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHBvaW50ZXIsIG1fZ2xvYmFsT2JqZWN0LT5hY3R1YWxQ
b2ludGVyRm9yKHBvaW50ZXIpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAg
ICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2psZXNzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNl
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamxlc3MiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7Ci0gICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
amxlc3NlcSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBs
b2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2pncmVhdGVyOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamdyZWF0ZXIiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVx
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiamdyZWF0ZXJlcSIpOwotICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pubGVzczogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpu
bGVzcyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2Nh
dGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2pubGVzc2VxOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5sZXNzZXEiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6IHsK
LSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJqbmdyZWF0ZXIiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpu
Z3JlYXRlcmVxIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQs
IGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsb29wX2hpbnQiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfd2F0Y2hkb2c6IHsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIndhdGNoZG9nIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJsb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxvZ19zaGFkb3dfY2hpY2tlbl90YWlsIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0gICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAic3dpdGNoX2ltbSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJWQsICVk
KC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVs
dFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjogewot
ICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRjaF9jaGFyIik7
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCksICVzIiwgdGFibGVJbmRleCwg
ZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2Ny
dXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGludCB0YWJsZUlu
ZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfc3RyaW5nIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlZCwgJWQoLT4lZCksICVzIiwgdGFibGVJbmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRp
b24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19m
dW5jOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJuZXdfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIGYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
bmV3X2dlbmVyYXRvcl9mdW5jOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmMiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOiB7Ci0gICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdf
YXN5bmNfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7
Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJuZXdfZnVuY19leHAiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBmMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19nZW5lcmF0b3JfZnVuY19leHAi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAibmV3X2FzeW5jX2Z1bmNfZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9z
ZXRfZnVuY3Rpb25fbmFtZTogewotICAgICAgICAgICAgaW50IGZ1bmNSZWcgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBuYW1lUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJz
ZXRfZnVuY3Rpb25fbmFtZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKGZ1bmNSZWcpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKG5hbWVSZWcpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhbGw6IHsK
LSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbCIs
IER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6IHsKLSAg
ICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGFpbF9jYWxs
IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogewot
ICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsX2V2
YWwiLCBEb250RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgot
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50czogewotICAgICAgICAgICAgaW50IHJlc3VsdCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNhbGxlZSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGZpcnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
dmFyQXJnT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICArK2l0OwotICAg
ICAgICAgICAgY29uc3QgY2hhciogb3BOYW1lOwotICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBv
cF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gImNhbGxfdmFyYXJncyI7
Ci0gICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCi0g
ICAgICAgICAgICAgICAgb3BOYW1lID0gImNvbnN0cnVjdF92YXJhcmdzIjsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKLSAgICAgICAgICAgICAg
ICBvcE5hbWUgPSAidGFpbF9jYWxsX3ZhcmFyZ3MiOwotICAgICAgICAgICAgZWxzZSBpZiAob3Bj
b2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBv
cE5hbWUgPSAidGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzIjsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wTmFtZSk7
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcywgJWQsICVkIiwgcmVnaXN0
ZXJOYW1lKHJlc3VsdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoY2FsbGVlKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZSh0aGlzVmFsdWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3VtZW50cykuZGF0YSgp
LCBmaXJzdEZyZWVSZWdpc3RlciwgdmFyQXJnT2Zmc2V0KTsKLSAgICAgICAgICAgIGR1bXBWYWx1
ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9yZXQ6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5k
UmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmV0IiwgcjApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsK
LSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY29uc3Ry
dWN0IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N0cmNhdDogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBjb3VudCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAic3RyY2F0Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVk
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBjb3Vu
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX3By
aW1pdGl2ZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX3ByaW1pdGl2ZSIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBpbnQg
ZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2Up
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9lbnVtZXJh
YmxlX2xlbmd0aCkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJheVByb2ZpbGU7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJv
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
LCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgYXJyYXlQcm9maWxlKTsK
LSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkp
IC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBl
bnVtZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSIp
OwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUo
ZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9w
ZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpIC0g
MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaGFzX2dl
bmVyaWNfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShk
c3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3Bl
cnR5TmFtZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFz
X2dlbmVyaWNfcHJvcGVydHkpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogewotICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBpbmRleCA9IGl0WzRdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBlbnVt
ZXJhdG9yID0gaXRbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9m
aWxlID0gaXRbNl0udS5wcm9maWxlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2RpcmVjdF9wbmFtZSIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5
TmFtZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVu
dW1lcmF0b3IpLmRhdGEoKSwgcHJvZmlsZSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVO
R1RIKG9wX2dldF9kaXJlY3RfcG5hbWUpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjogewotICAgICAg
ICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0g
aXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOiB7Ci0gICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGVudW1l
cmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOwot
ICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9w
bmFtZSkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RF
X0xFTkdUSChvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpIC0gMTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7Ci0gICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGluZGV4
ID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfdG9f
aW5kZXhfc3RyaW5nKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG5ld1Njb3BlID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJw
dXNoX3dpdGhfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuZXdTY29wZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoY3VycmVudFNjb3BlKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOiB7Ci0gICAgICAgICAg
ICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcGFyZW50U2Nv
cGUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9wYXJlbnRfc2NvcGUiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHBhcmVudFNjb3BlKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewotICAgICAgICAg
ICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjb3BlID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc3ltYm9sVGFibGUgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbml0aWFsVmFsdWUgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50Iik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzLCAlcyIsIAotICAgICAgICAgICAgICAgIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzeW1ib2xU
YWJsZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5pdGlhbFZhbHVlKS5kYXRhKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYXRjaDogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImNhdGNoIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90aHJvdzogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0
aHJvdyIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7Ci0gICAgICAgICAgICBpbnQgazAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIEVycm9yVHlwZSBrMSA9IHN0YXRpY19jYXN0PEVycm9yVHlw
ZT4oKCsraXQpLT51LnVuc2lnbmVkVmFsdWUpOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3dfc3RhdGljX2Vycm9yIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgY29uc3RhbnROYW1lKGswKS5kYXRhKCkpOwotICAg
ICAgICAgICAgb3V0LnByaW50KGsxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGludCBkZWJ1Z0hvb2tUeXBlID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaGFzQnJlYWtwb2ludEZsYWcgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JWQiLCBkZWJ1Z0hvb2tOYW1lKGRlYnVnSG9va1R5cGUpLCBoYXNCcmVha3BvaW50RmxhZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Fzc2VydDogewot
ICAgICAgICAgICAgaW50IGNvbmRpdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGxpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFzc2VydCIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVkIiwgcmVnaXN0ZXJOYW1lKGNvbmRpdGlvbikuZGF0YSgpLCBsaW5l
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW5kOiB7
Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImVuZCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgc2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KCgrK2l0KS0+dS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGludCBkZXB0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgdm9pZCogcG9pbnRlciA9ICgrK2l0KS0+dS5wb2ludGVyOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9zY29wZSIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgPCVzPiwgJWQsICVwIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZVR5cGVOYW1lKHJlc29sdmVUeXBlKSwg
ZGVwdGgsIHBvaW50ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oKCsraXQpLT51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgKytpdDsgLy8gU3RydWN0dXJlCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9ICgrK2l0KS0+
dS5vcGVyYW5kOyAvLyBPcGVyYW5kCi0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9zY29wZSIpOwotICAgICAgICAgICAgb3V0
LnByaW50KHJlZ2lzdGVyTmFtZShyMCksICIsICIsIHJlZ2lzdGVyTmFtZShyMSkpOwotICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFYKQotICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgZ2V0UHV0SW5mby5vcGVyYW5kKCksICI8
IiwgcmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2
ZVR5cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSksICJ8IiwgaW5pdGlhbGl6YXRpb25N
b2RlTmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSwgIj4sICIsIG9wZXJhbmQp
OwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
dXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBHZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKLSAgICAgICAgICAgICsraXQ7IC8v
IFN0cnVjdHVyZQotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsg
Ly8gT3BlcmFuZAotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAicHV0X3RvX3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQocmVnaXN0
ZXJOYW1lKHIwKSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlkMCkg
PT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIGFub255bW91cyIpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCByZWdp
c3Rlck5hbWUocjEpLCAiLCAiLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSwgIjwiLCByZXNvbHZlTW9k
ZU5hbWUoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpKSwgInwiLCByZXNvbHZlVHlwZU5hbWUoZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpKSwgInwiLCBpbml0aWFsaXphdGlvbk1vZGVOYW1lKGdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLCAiPiwgPHN0cnVjdHVyZT4sICIsIG9wZXJhbmQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZnJv
bV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9hcmd1bWVudHMiKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQ
cm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNl
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfdG9fYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIG9mZnNldCwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgZHVtcFJhcmVDYXNlUHJvZmlsZShvdXQsICJyYXJlIGNhc2U6ICIsIHJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAg
ewotICAgICAgICBkdW1wQXJpdGhQcm9maWxlKG91dCwgYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQobG9jYXRpb24pLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB9Ci0gICAgCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgVmVjdG9yPERGRzo6RnJlcXVlbnRFeGl0U2l0ZT4gZXhpdFNp
dGVzID0gZXhpdFByb2ZpbGUoKS5leGl0U2l0ZXNGb3IobG9jYXRpb24pOwotICAgIGlmICghZXhp
dFNpdGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnQoIiAhISBmcmVxdWVudCBleGl0
czogIik7Ci0gICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4aXRTaXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgZXhpdFNpdGVzW2ldLmtpbmQoKSwgIiAiLCBleGl0U2l0ZXNbaV0uaml0VHlwZSgp
KTsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICBVTlVTRURfUEFSQU0obG9j
YXRpb24pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgIG91dC5wcmludCgiXG4iKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKLSAgICBQcmludFN0cmVhbSYgb3V0
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKLSAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1Yklu
Zm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCi17Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBjb25zdCBJbnN0
cnVjdGlvbiogaXQgPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQ7Ci0g
ICAgZHVtcEJ5dGVjb2RlKG91dCwgZXhlYywgaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgaXQsIHN0
dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Ci19Ci0KLSNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZF
Q1RPUihtYWNybykgXAotICAgIG1hY3JvKGluc3RydWN0aW9ucykgXAotICAgIG1hY3JvKGNhbGxM
aW5rSW5mb3MpIFwKLSAgICBtYWNybyhsaW5rZWRDYWxsZXJMaXN0KSBcCi0gICAgbWFjcm8oaWRl
bnRpZmllcnMpIFwKLSAgICBtYWNybyhmdW5jdGlvbkV4cHJlc3Npb25zKSBcCi0gICAgbWFjcm8o
Y29uc3RhbnRSZWdpc3RlcnMpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9SQVJF
X0RBVEEobWFjcm8pIFwKLSAgICBtYWNybyhyZWdleHBzKSBcCi0gICAgbWFjcm8oZnVuY3Rpb25z
KSBcCi0gICAgbWFjcm8oZXhjZXB0aW9uSGFuZGxlcnMpIFwKLSAgICBtYWNybyhzd2l0Y2hKdW1w
VGFibGVzKSBcCi0gICAgbWFjcm8oc3RyaW5nU3dpdGNoSnVtcFRhYmxlcykgXAotICAgIG1hY3Jv
KGV2YWxDb2RlQ2FjaGUpIFwKLSAgICBtYWNybyhleHByZXNzaW9uSW5mbykgXAotICAgIG1hY3Jv
KGxpbmVJbmZvKSBcCi0gICAgbWFjcm8oY2FsbFJldHVybkluZGV4VmVjdG9yKQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBWZWN0b3I8VD4m
IHZlY3RvcikKLXsKLSAgICByZXR1cm4gdmVjdG9yLmNhcGFjaXR5KCkgKiBzaXplb2YoVCk7Ci19
Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFB1dFRvU2NvcGVGaXJlRGV0YWlsIDogcHVibGljIEZp
cmVEZXRhaWwgewotcHVibGljOgotICAgIFB1dFRvU2NvcGVGaXJlRGV0YWlsKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9pZGVudChpZGVudCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgb3V0LnByaW50KCJMaW5raW5nIHB1dF90b19zY29wZSBpbiAiLCBGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wKGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpKSwgIiBmb3IgIiwgbV9pZGVudCk7Ci0gICAgfQotICAgIAotcHJpdmF0
ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIGNvbnN0IElkZW50aWZpZXImIG1f
aWRlbnQ7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBD
b2RlQmxvY2smIG90aGVyKQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQotICAgICwgbV9n
bG9iYWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCi0gICAgLCBtX251bUNhbGxlZUxvY2Fs
cyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKLSAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZh
cnMpCi0gICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQotI2VuZGlmCi0gICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQotICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRo
RlRMKGZhbHNlKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikK
LSAgICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQotICAgICwgbV9jb2Rl
VHlwZShvdGhlci5tX2NvZGVUeXBlKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0s
IHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQotICAgICwgbV9oYXNEZWJ1Z2dlclN0
YXRlbWVudChmYWxzZSkKLSAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVk
KQotICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90
aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQotICAgICwgbV92
bShvdGhlci5tX3ZtKQotICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMp
Ci0gICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKLSAgICAsIG1fc2Nv
cGVSZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0ZXIpCi0gICAgLCBtX2hhc2gob3RoZXIubV9o
YXNoKQotICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCi0gICAgLCBtX3NvdXJjZU9mZnNl
dChvdGhlci5tX3NvdXJjZU9mZnNldCkKLSAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KG90
aGVyLm1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhv
dGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQotICAgICwgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCi0g
ICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQotICAgICwgbV9mdW5j
dGlvbkV4cHJzKG90aGVyLm1fZnVuY3Rpb25FeHBycykKLSAgICAsIG1fb3NyRXhpdENvdW50ZXIo
MCkKLSAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCi0gICAgLCBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKDApCi0gICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjpub3coKSkKLXsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5z
dG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0KLSAgICBBU1NFUlQoaGVh
cCgpLT5pc0RlZmVycmVkKCkpOwotICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgp
KTsKLQotICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFn
LCBDb2RlQmxvY2smIG90aGVyKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQot
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCi0gICAg
aWYgKG90aGVyLm1fcmFyZURhdGEpIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICAKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyA9
IG90aGVyLm1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0gICAgICAgIG1fcmFyZURh
dGEtPm1fY29uc3RhbnRCdWZmZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZl
cnM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOwotICAgIH0KLSAgICAKLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOwot
fQotCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKLSAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQotICAgICwg
bV9nbG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBzY29wZS0+
Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9j
ay0+bV9udW1DYWxsZWVMb2NhbHMpCi0gICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2st
Pm1fbnVtVmFycykKLSAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2
ZWxOb3RTZXQpCi0jZW5kaWYKLSAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQot
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSkKLSAgICAsIG1faXNTdHJpY3RNb2RlKHVubGlua2VkQ29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1fY29kZVR5cGUodW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkpCi0gICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwg
dGhpcywgdW5saW5rZWRDb2RlQmxvY2spCi0gICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZh
bHNlKQotICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCi0gICAgLCBt
X251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVj
dC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV92bSh1bmxpbmtlZENvZGVC
bG9jay0+dm0oKSkKLSAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT50aGlz
UmVnaXN0ZXIoKSkKLSAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+c2Nv
cGVSZWdpc3RlcigpKQotICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCi0gICAgLCBtX3Nv
dXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCi0gICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgLCBtX29zckV4aXRDb3VudGVyKDApCi0gICAgLCBt
X29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQotICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigwKQotICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2Us
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotCi0gICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZl
cnJlZCgpKTsKLSAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7Ci0KLSAgICBB
U1NFUlQobV9zb3VyY2UpOwotICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgIEpTU2NvcGUqIHNjb3BlKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5j
b250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBv
d25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCBvd25lckV4ZWN1dGFi
bGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0KLSAgICBzZXRDb25zdGFudFJlZ2lzdGVy
cyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSwgdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpKTsKLSAgICBpZiAodW5saW5r
ZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50
SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1RpbWVDb25zdGFudENvdW50OyBpKyspIHsKLSAg
ICAgICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0gc3RhdGljX2Nhc3Q8TGlua1RpbWVDb25zdGFu
dD4oaSk7Ci0gICAgICAgIGlmICh1bnNpZ25lZCByZWdpc3RlckluZGV4ID0gdW5saW5rZWRDb2Rl
QmxvY2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKQotICAgICAgICAg
ICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIG1f
Z2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNsb25lZCBzeW1ib2wgdGFibGUgZm9yIHRoZSBt
b2R1bGUgZW52aXJvbm1lbnQgc2luY2Ugd2UgbmVlZCB0byBpbnN0YW50aWF0ZQotICAgIC8vIHRo
ZSBtb2R1bGUgZW52aXJvbm1lbnRzIGJlZm9yZSBsaW5raW5nIHRoZSBjb2RlIGJsb2NrLiBXZSBy
ZXBsYWNlIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlIHdpdGggdGhlIGFscmVhZHkgY2xvbmVkIG9u
ZS4KLSAgICBpZiAoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKSkgewotICAgICAgICBTeW1ib2xUYWJsZSogY2xv
bmVkU3ltYm9sVGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUpLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCk7Ci0gICAgICAgIGlmICht
X3ZtLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICBjbG9uZWRTeW1i
b2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKLSAgICAgICAgfQotICAg
ICAgICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRT
eW1ib2xUYWJsZSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUgPSB2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCk7Ci0gICAgbV9mdW5jdGlvbkRlY2xzID0gUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxG
dW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCkpOwotICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7Ci0gICAgICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUpCi0gICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9u
RGVjbHNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0s
IG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKLSAgICB9Ci0KLSAgICBtX2Z1bmN0aW9uRXhw
cnMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+KHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7Ci0gICAgZm9yIChzaXpl
X3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihp
KTsKLSAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKLSAg
ICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVk
UmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxp
bmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIHRo
aXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3Vy
Y2UoKSkpOwotICAgIH0KLQotICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURhdGEo
KSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIGlmIChz
aXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXJDb3VudCgpKSB7
Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5ncm93KGNvdW50KTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpDb25zdGFudEJ1ZmZlciYgYnVmZmVy
ID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGkpOwotICAgICAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2ldID0gYnVmZmVyOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVubGlua2VkQ29kZUJsb2Nr
LT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSNpZiBFTkFCTEUoSklU
KQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsKLSNlbHNlCi0gICAgICAg
ICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRl
cmF0b3IgcHRyID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5v
ZmZzZXRUYWJsZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdW5saW5rZWRDb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRUYWJsZS5lbmQoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKDsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgT2Zm
c2V0TG9jYXRpb24gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYnJhbmNoT2Zm
c2V0ID0gcHRyLT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5hZGQocHRyLT5r
ZXksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlN3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzLmdyb3coY291bnQpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHNvdXJjZVRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShpKTsKLSAg
ICAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1tpXTsKLSAgICAgICAgICAgICAgICBkZXN0VGFibGUuYnJhbmNoT2Zm
c2V0cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7Ci0gICAgICAgICAgICAgICAgZGVzdFRh
YmxlLm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIEFsbG9jYXRlIG1ldGFkYXRhIGJ1ZmZlcnMgZm9yIHRoZSBieXRlY29kZQot
ICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkxMaW50Q2Fs
bExpbmtJbmZvcygpKQotICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcyA9IFJlZkNvdW50ZWRB
cnJheTxMTEludENhbGxMaW5rSW5mbz4oc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXplID0gdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygpKQotICAgICAgICBtX2FycmF5
UHJvZmlsZXMuZ3JvdyhzaXplKTsKLSAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygpKQotICAgICAgICBtX2FycmF5
QWxsb2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PEFycmF5QWxsb2NhdGlvblByb2Zp
bGU+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSkKLSAgICAgICAgbV92YWx1ZVByb2ZpbGVzID0gUmVmQ291bnRl
ZEFycmF5PFZhbHVlUHJvZmlsZT4oc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzKCkpCi0gICAgICAg
IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlPihzaXplKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc2V0Q2FsbGVlU2F2
ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7Ci0jZW5kaWYKLQotICAgIC8vIENvcHkgYW5kIHRyYW5zbGF0ZSB0aGUgVW5saW5rZWRJbnN0
cnVjdGlvbnMKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmNvdW50KCk7Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVh
bTo6UmVhZGVyIGluc3RydWN0aW9uUmVhZGVyKHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSk7Ci0KLSAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNlZCBtb2R1bGUg
ZW52aXJvbm1lbnRzLgotICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+IHN0cm9uZ2x5
UmVmZXJlbmNlZE1vZHVsZUVudmlyb25tZW50czsKLQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0
cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQpOwotCi0gICAgdW5zaWduZWQg
dmFsdWVQcm9maWxlQ291bnQgPSAwOwotICAgIGF1dG8gbGlua1ZhbHVlUHJvZmlsZSA9IFsmXSh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgb3BMZW5ndGgpIHsKLSAgICAgICAgdW5z
aWduZWQgdmFsdWVQcm9maWxlSW5kZXggPSB2YWx1ZVByb2ZpbGVDb3VudCsrOwotICAgICAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3ZhbHVlUHJvZmlsZUluZGV4
XTsKLSAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOwotICAg
ICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAg
IGluc3RydWN0aW9uc1tieXRlY29kZU9mZnNldCArIG9wTGVuZ3RoIC0gMV0gPSBwcm9maWxlOwot
ICAgIH07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhaW5zdHJ1Y3Rpb25SZWFkZXIuYXRF
bmQoKTsgKSB7Ci0gICAgICAgIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb24qIHBjID0gaW5zdHJ1
Y3Rpb25SZWFkZXIubmV4dCgpOwotCi0gICAgICAgIHVuc2lnbmVkIG9wTGVuZ3RoID0gb3Bjb2Rl
TGVuZ3RoKHBjWzBdLnUub3Bjb2RlKTsKLQotICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSB2bS5p
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKHBjWzBdLnUub3Bjb2RlKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDE7IGogPCBvcExlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoc2l6ZW9mKGlu
dDMyX3QpICE9IHNpemVvZihpbnRwdHJfdCkpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBqXS51LnBvaW50ZXIgPSAwOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51
Lm9wZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChw
Y1swXS51Lm9wY29kZSkgewotICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7
Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0g
PSBBcnJheVByb2ZpbGUoaSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5n
dGggLSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAg
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzOgotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgot
ICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAgIGludCBhcnJheVByb2Zp
bGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgbV9hcnJh
eVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKLQotICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1th
cnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6Ci0gICAgICAgIGNhc2Ug
b3BfdHJ5X2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoK
LSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6Ci0gICAgICAgIGNhc2Ugb3BfdG9f
bnVtYmVyOiB7Ci0gICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDog
ewotICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhd
ID0gQXJyYXlQcm9maWxlKGkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0
aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7
Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0g
PSBBcnJheVByb2ZpbGUoaSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3Ro
IC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6Ci0gICAgICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKLSAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0
aF9zaXplOiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUluZGV4ID0g
cGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlc1thcnJheUFsbG9jYXRp
b25Qcm9maWxlSW5kZXhdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OiB7Ci0gICAgICAgICAgICBpbnQgb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlID0gJm1fb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVzW29iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXhdOwotICAgICAg
ICAgICAgaW50IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tvcExlbmd0aCAtIDJdLnUub3Bl
cmFuZDsKLQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS0+aW5pdGlhbGl6ZSh2bSwKLSAgICAgICAgICAgICAgICB0aGlzLCBtX2dsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhc2Ug
b3BfdGFpbF9jYWxsOgotICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogewotICAgICAgICAgICAg
bGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9m
aWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJy
YXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2Fy
cmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0gPSAmbV9s
bGludENhbGxMaW5rSW5mb3NbcGNbNV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjWzVdLnUub3BlcmFuZF07
Ci0gICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0g
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlVHlwZT4ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5
cGUgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGgg
PSBwY1s1XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6
OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3Bl
RGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdElu
aXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5k
ID0gb3AudHlwZTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5kID0g
b3AuZGVwdGg7Ci0gICAgICAgICAgICBpZiAob3AubGV4aWNhbEVudmlyb25tZW50KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEtlZXAgdGhlIGxpbmtlZCBtb2R1bGUgZW52aXJvbm1lbnQgc3Ryb25nbHkgcmVmZXJl
bmNlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ2x5UmVmZXJlbmNlZE1vZHVsZUVu
dmlyb25tZW50cy5hZGQoanNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihvcC5sZXhpY2FsRW52
aXJvbm1lbnQpKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3Rh
bnQob3AubGV4aWNhbEVudmlyb25tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVu
dC0+c3ltYm9sVGFibGUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG9wLnR5cGUsIHRo
aXMpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KHZt
LCB0aGlzLCBjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKLSAg
ICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOwotCi0gICAgICAgICAgICAv
LyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgR2V0UHV0SW5mbywgU3RydWN0dXJlLCBP
cGVyYW5kCi0KLSAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1XS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUucG9pbnRlciA9IG51bGxwdHI7
Ci0KLSAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSk7Ci0gICAgICAgICAgICBpZiAoZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNF0gPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xv
c3VyZVZhciwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFuZCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCBnZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRp
b24pOwotCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1
dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50eXBlLCBnZXRQdXRJbmZvLmluaXRp
YWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3AudHlwZSA9PSBN
b2R1bGVWYXIpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQg
PSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3VyZVZhciwgZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9w
LnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG9wLm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewotICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3Bl
IHNjb3BlLCBpZCwgdmFsdWUsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAotICAgICAg
ICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhwY1s0XS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1
cmVWYXIpIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9w
ZXJ0eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCi0gICAgICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNbNV0udS5vcGVy
YW5kOwotICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nh
c3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0g
c3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwotICAgICAgICAg
ICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOwotICAgICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndh
dGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUucG9pbnRlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBSZXNvbHZl
T3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIFB1dCwgZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpLCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKLQotICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8u
cmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSku
b3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5
cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2Jh
bExleGljYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2lu
dFNldCA9IG9wLndhdGNocG9pbnRTZXQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcC50eXBlID09
IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykgewotICAgICAgICAgICAgICAgIGlmIChvcC53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAg
ICAgICAgICBvcC53YXRjaHBvaW50U2V0LT5pbnZhbGlkYXRlKHZtLCBQdXRUb1Njb3BlRmlyZURl
dGFpbCh0aGlzLCBpZGVudCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQodm0s
IHRoaXMsIG9wLnN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUu
cG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwotCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS50eXBlUHJvZmlsZXIoKSk7Ci0gICAgICAg
ICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3Byb2ZpbGVfdHlw
ZSByZWdUb1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZl
VHlwZT8KLSAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0
aCAtIDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKLSAgICAg
ICAgICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRCA9IDA7Ci0gICAgICAgICAg
ICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxk
QW5hbHl6ZSA9IG1fdW5saW5rZWRDb2RlLT50eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5
dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7Ci0g
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBQcm9maWxlVHlwZUJ5dGVjb2RlRmxhZyBmbGFnID0gc3RhdGljX2Nh
c3Q8UHJvZmlsZVR5cGVCeXRlY29kZUZsYWc+KHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKGZsYWcpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUNsb3N1cmVW
YXI6IHsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRo
ID0gcGNbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBz
dGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4ocGNbNV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAg
ICAvLyBFdmVuIHRob3VnaCB0eXBlIHByb2ZpbGluZyBtYXkgYmUgcHJvZmlsaW5nIGVpdGhlciBh
IEdldCBvciBhIFB1dCwgd2UgY2FuIGFsd2F5cyBjbGFpbSBhIEdldCBiZWNhdXNlCi0gICAgICAg
ICAgICAgICAgLy8gd2UncmUgYWJzdHJhY3RseSAicmVhZCJpbmcgZnJvbSBhIEpTU2NvcGUuCi0g
ICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1f
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50
LCBHZXQsIHR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOwotCi0g
ICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhciB8fCBvcC50eXBlID09IE1v
ZHVsZVZhcikKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5sZXhpY2FsRW52
aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3AudHlw
ZSA9PSBHbG9iYWxWYXIpCi0gICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gbV9nbG9i
YWxPYmplY3QuZ2V0KCktPnN5bWJvbFRhYmxlKCk7Ci0KLSAgICAgICAgICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogaW1wbCA9IChvcC50eXBlID09IE1vZHVsZVZhcikgPyBvcC5pbXBvcnRlZE5h
bWUuZ2V0KCkgOiBpZGVudC5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRhYmxl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNj
b3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90
IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCi0gICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpbXBsLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQg
PSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0p
OwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJp
YWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0czsKLQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVj
b2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5k
ZXggPSBwY1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmll
cihwY1s0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIC8vIElmIG91ciBw
YXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQg
d2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KLSAgICAgICAgICAgICAg
ICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9j
a2VyLCBpZGVudC5pbXBsKCksIHZtKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0g
c3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwo
KSwgdm0pOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEOiAKLSAgICAg
ICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQ6IHsKLSAgICAg
ICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0
czsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50OiB7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3duZXJFeGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0
YWJsZSgpKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPnJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsK
LSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyUmV0dXJuU3Rh
dGVtZW50OwotICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQW5hbHl6ZSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBCZWNhdXNlIGEgcmV0dXJuIHN0YXRlbWVudCBjYW4gYmUgYWRkZWQgaW1w
bGljaXRseSB0byByZXR1cm4gdW5kZWZpbmVkIGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZXNlIG5vZGVzIGRvbid0IGVtaXQgZXhwcmVzc2lv
biByYW5nZXMgYmVjYXVzZSB0aGV5IGFyZW4ndCBpbiB0aGUgYWN0dWFsIHNvdXJjZSB0ZXh0IG9m
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyJ3MgcHJvZ3JhbSwgZ2l2ZSB0aGUgdHlw
ZSBwcm9maWxlciBzb21lIHJhbmdlIHRvIGlkZW50aWZ5IHRoZXNlIHJldHVybiBzdGF0ZW1lbnRz
LgotICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoZSB0ZXh0IG9mZnNldCB0aGF0
IGlzIHVzZWQgYXMgaWRlbnRpZmljYXRpb24gaXMgImYiIGluIHRoZSBmdW5jdGlvbiBrZXl3b3Jk
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpcyBzdG9yZWQgb24gVHlwZUxvY2F0aW9uJ3Mg
bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgbWVtYmVyIHZhcmlhYmxl
LgotICAgICAgICAgICAgICAgICAgICBkaXZvdFN0YXJ0ID0gZGl2b3RFbmQgPSBvd25lckV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwotICAgICAgICAgICAgICAgICAgICBz
aG91bGRBbmFseXplID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6
cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bS50eXBlUHJvZmlsZXIo
KS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQs
Ci0gICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsKLSAgICAgICAgICAgIFR5cGVMb2NhdGlv
biogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7Ci0gICAgICAgICAgICBib29sIGlzTmV3
TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwotCi0gICAgICAgICAgICBpZiAoZmxhZyA9
PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQpCi0gICAgICAgICAg
ICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50
ID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKLQotICAgICAg
ICAgICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlvbikKLSAgICAgICAgICAgICAg
ICB2bS50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOwotCi0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDJdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9kZWJ1ZzogewotICAg
ICAgICAgICAgaWYgKHBjWzFdLnUuaW5kZXggPT0gRGlkUmVhY2hCcmVha3BvaW50KQotICAgICAg
ICAgICAgICAgIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7Ci0gICAgICAg
ICAgICBpbnQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBpbnN0cnVjdGlvbnNbaSArIDNdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID49IDApOwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9PSBudW1QYXJhbWV0ZXJzKCkgLSAx
LCAiV2UgYXNzdW1lIHRoYXQgdGhpcyBpcyB0cnVlIHdoZW4gcmVtYXRlcmlhbGl6aW5nIHRoZSBy
ZXN0IHBhcmFtZXRlciBkdXJpbmcgT1NSIGV4aXQgaW4gdGhlIEZUTCBKSVQuIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpICs9IG9wTGVuZ3RoOwotICAgIH0KLQotICAgIGlm
ICh2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgIGluc2VydEJhc2ljQmxvY2tCb3Vu
ZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihpbnN0cnVjdGlvbnMpOwotCi0gICAgbV9pbnN0
cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3RydWN0aW9ucyk7Ci0KLSAgICAvLyBTZXQgb3B0aW1pemF0
aW9uIHRocmVzaG9sZHMgb25seSBhZnRlciBtX2luc3RydWN0aW9ucyBpcyBpbml0aWFsaXplZCwg
c2luY2UgdGhlc2UKLSAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFy
ZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKLSAgICAvLyBpbnN0cnVj
dGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCku
Ci0gICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7Ci0KLSAg
ICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3Mg
aGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKLSAgICAvLyBzeW5jaHJvbm91c2x5LgotICAgIGlm
IChPcHRpb25zOjphbHdheXNDb21wdXRlSGFzaCgpKQotICAgICAgICBoYXNoKCk7Ci0KLSAgICBp
ZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQotICAgICAgICBkdW1wQnl0ZWNv
ZGUoKTsKLSAgICAKLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOwotICAgIGhl
YXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICog
c2l6ZW9mKEluc3RydWN0aW9uKSk7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi1Db2Rl
QmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdC0+dm0oKSwgdGhpcywgZ2xvYmFsT2JqZWN0KQotICAgICwgbV9udW1DYWxsZWVM
b2NhbHMoMCkKLSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQoZmFsc2UpCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUo
REZHOjpDYW5ub3RDb21waWxlKQotI2VuZGlmCi0gICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlv
bihmYWxzZSkKLSAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQotICAgICwgbV9o
YXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKGZhbHNl
KQotICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpCi0gICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9u
Q29kZSkKLSAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCi0gICAgLCBtX3N0ZXBw
aW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKLSAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkK
LSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25l
ckV4ZWN1dGFibGUpCi0gICAgLCBtX3ZtKHZtKQotICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQot
ICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKLSAgICAsIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoMCkKLSAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVh
ZHlfY2xvY2s6Om5vdygpKQotewotICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0KLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOwotfQotI2VuZGlmCi0K
LUNvZGVCbG9jazo6fkNvZGVCbG9jaygpCi17Ci0gICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcikKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0
cnVjdGlvbih0aGlzKTsKLQotICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6
ZSgpID09IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPnNldERp
ZE9wdGltaXplKEZhbHNlVHJpU3RhdGUpOwotCi0jaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJP
RklMRSkKLSAgICBkdW1wVmFsdWVQcm9maWxlcygpOwotI2VuZGlmCi0KLSAgICAvLyBXZSBtYXkg
YmUgZGVzdHJveWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVyIHRvIHVzIGFyZSBk
ZXN0cm95ZWQuCi0gICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2NrcyBiZWNvbWUgdW5y
ZWFjaGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKLSAgICAvLyBpcyBubyBndWFyYW50ZWUg
YWJvdXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBkZXN0cm95ZWQuCi0g
ICAgLy8gU28sIGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywgYW5kIGdldCBkZXN0
cm95ZWQgYmVmb3JlIHRoZQotICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhhdmUgY2FsbHMgaW50
byB1cywgdGhlbiB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCi0gICAgLy8gZGVzdHJ1Y3RvciB3
aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlua2Vk
IGxpc3QuCi0gICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIC8vIE5vdGUgdGhh
dCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2Nr
cycKLSAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1
dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbwotICAgIC8vIGRlc3RydWN0b3JzLgotCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwotICAgICAgICBzdHViLT5hYm91dFRvRGllKCk7Ci0g
ICAgICAgIHN0dWItPmRlcmVmKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQotewotICAgIEFT
U0VSVChjb25zdGFudHMuc2l6ZSgpID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bi5zaXplKCkpOwotICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7Ci0gICAgbV9j
b25zdGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgYm9vbCBoYXNUeXBlUHJv
ZmlsZXIgPSAhIW1fdm0tPnR5cGVQcm9maWxlcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ld
LmdldCgpOwotCi0gICAgICAgIGlmICghY29uc3RhbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJs
ZSo+KGNvbnN0YW50KSkgewotICAgICAgICAgICAgICAgIGlmIChoYXNUeXBlUHJvZmlsZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9y
VHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIFN5bWJvbFRhYmxlKiBjbG9uZSA9IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92
bSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KSkKLSAgICAgICAgICAgICAgICAgICAgY2xvbmUtPnNldFJhcmVEYXRhQ29kZUJsb2NrKHRoaXMp
OwotCi0gICAgICAgICAgICAgICAgY29uc3RhbnQgPSBjbG9uZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCB0aGlz
LCBjb25zdGFudCk7Ci0gICAgfQotCi0gICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCi17
Ci0gICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVybmF0aXZlKTsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKQotewotICAgIG1fbnVt
UGFyYW1ldGVycyA9IG5ld1ZhbHVlOwotCi0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgPSBS
ZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPihuZXdWYWx1ZSk7Ci19Ci0KLXZvaWQgRXZhbENv
ZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgRXZh
bENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwotICAgIGZvciAoRXZh
bENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7
ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7Ci19Ci0KLUNvZGVC
bG9jayogQ29kZUJsb2NrOjpzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpCi17Ci0jaWYgRU5B
QkxFKEZUTF9KSVQpCi0gICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZn
KCk7Ci0gICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2soKTsKLSNlbHNlIC8vIEVOQUJM
RShGVExfSklUKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotfQot
Ci12b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgYm9vbCBzZXRCeU1lID0gIW1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNo
YW5nZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7Ci0gICAgaWYgKCFzZXRCeU1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKLSAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1
bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmluZwotICAgIC8vIGFu
ZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVh
c3Qgb25lIG9mIHRob3NlIHRoaW5ncwotICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRv
IDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKLSAg
ICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KLSAgICB2aXNp
dG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7
Ci0KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBqZXR0aXNvbiBvdXJzZWx2ZXMgd2UnbGwgaW5zdGFs
bCBvdXIgYWx0ZXJuYXRpdmUsIHNvIG1ha2Ugc3VyZSB0aGF0IGl0Ci0gICAgLy8gc3Vydml2ZXMg
R0MgZXZlbiBpZiB3ZSBkb24ndC4KLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7
Ci0gICAgCi0gICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ugd2VhayByZWZl
cmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IKLSAgICAvLyBqZXR0aXNvbmlu
ZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBsaXZlIGJhc2Vk
IG9uIHNvbWUKLSAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNlIHRvIHJlZ2lz
dGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIoJm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAvLyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25l
ciBleGVjdXRhYmxlIGlzIGxpdmUsCi0gICAgLy8gYnV0IHdlJ3JlIG5vdCB5ZXQgbGl2ZSBmb3Ig
c3VyZSBpbiBhbm90aGVyIHNlbnNlOiB3ZSBtYXkgeWV0IGRlY2lkZSB0aGF0IHRoaXMKLSAgICAv
LyBjb2RlIGJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGJhc2VkIG9uIGl0cyBvdXRnb2luZyB3
ZWFrIHJlZmVyZW5jZXMgYmVpbmcKLSAgICAvLyBzdGFsZS4gU2V0IGEgZmxhZyB0byBpbmRpY2F0
ZSB0aGF0IHdlJ3JlIHN0aWxsIGFzc3VtaW5nIHRoYXQgd2UncmUgZGVhZCwgYW5kCi0gICAgLy8g
cGVyZm9ybSBvbmUgcm91bmQgb2YgZGV0ZXJtaW5pbmcgaWYgd2UncmUgbGl2ZS4gVGhlIEdDIG1h
eSBkZXRlcm1pbmUsIGJhc2VkIG9uCi0gICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcgYWRkaXRpb25h
bCBvYmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IKLSAgICAvLyBv
dGhlciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdhaW47IGl0IHdp
bGwgbm90aWZ5IHVzIG9mIHRoaXMKLSAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5nIGhhcnZlc3RX
ZWFrUmVmZXJlbmNlcygpLgotCi0gICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0g
ZmFsc2U7Ci0gICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0KLSAgICBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsKLSAgICBkZXRl
cm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLX0KLQot
c2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgQ29k
ZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwotICAgIHNpemVf
dCBleHRyYU1lbW9yeUFsbG9jYXRlZCA9IHRoaXNPYmplY3QtPm1faW5zdHJ1Y3Rpb25zLnNpemUo
KSAqIHNpemVvZihJbnN0cnVjdGlvbik7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1faml0Q29kZSkK
LSAgICAgICAgZXh0cmFNZW1vcnlBbGxvY2F0ZWQgKz0gdGhpc09iamVjdC0+bV9qaXRDb2RlLT5z
aXplKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBleHRyYU1lbW9y
eUFsbG9jYXRlZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKLSAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwot
fQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25h
bCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQgamV0dGlzb25p
bmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0
aG9zZSB0aGluZ3MKLSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBh
ZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAgLy8gZmlndXJl
cyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNv
bmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotCi0gICAgaWYg
KENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCi0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIob3RoZXJCbG9j
ayk7Ci0KLSAgICBpZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChtX2ppdENvZGUtPnNpemUoKSk7Ci0gICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNp
emUoKSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVj
dGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNv
dW50KCkpOwotCi0gICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7Ci0g
ICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwotCi0gICAgbV9hbGxUcmFu
c2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7Ci0gICAgcHJvcGFnYXRlVHJhbnNpdGlvbnMo
dmlzaXRvcik7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkKLXsK
LSAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29k
ZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgotICAgIC8vIHRoZWlyIHdl
YWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0
cwotICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQn
cyBsaXZlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENvZGVC
bG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQotewotICAgIGlmICghSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHRoaXMpOwotfQotCi1zdGF0aWMgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKLXsK
LSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRWFnZXJDb2RlQmxvY2tKZXR0aXNvblRpbWlu
ZygpKSkgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2FzZSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoMTApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAgKyAyMCk7Ci0gICAgICAg
IGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMoNDApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEyMCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICBjYXNlIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25k
cyg1KSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgLy8gRWZmZWN0
aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKLSAgICAg
ICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAgICAgcmV0dXJu
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0
ZDo6Y2hyb25vOjpzZWNvbmRzKDUgKyAxMCkpOwotICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgot
ICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoMjApKTsKLSAgICBjYXNlIEpJVENvZGU6
OkZUTEpJVDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDYwKSk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwot
ICAgIH0KLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKQot
ewotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBp
ZiAodGltZVNpbmNlQ3JlYXRpb24oKSA8IHRpbWVUb0xpdmUoaml0VHlwZSgpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQotewotICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9y
aWdpbiAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmln
aW4uZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKLQotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLQotICAgIGlmICht
X2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOwotICAgICAgICAKLSAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKLSAgICBpZiAoaml0VHlwZSgpID09IEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25zW2ldXTsKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSkgewotICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
aWQ6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGluc3Ry
dWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3
U3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAg
ICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
Ci0gICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
bmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkp
IHsKLSAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0g
bV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICAgICBhbGxBcmVN
YXJrZWRTb0ZhciAmPSAoKml0ZXIpLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKLSAg
ICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKLSAgICAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgICAg
ICBmb3IgKGF1dG8mIHdlYWtSZWZlcmVuY2UgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZl
cmVuY2VzKQotICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gd2Vha1JlZmVyZW5jZS0+
bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0pKSB7
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGluZ3MgYXJlIGxp
dmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9u
IGlzIGFsc28gbGl2ZToKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIC0g
VGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ugb3RoZXJ3
aXNlCi0gICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBvdXJzZWx2
ZXMuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAtIFRoZSBjb2RlIG9y
aWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZyb20KLSAgICAg
ICAgICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUgbm90IHJlbGV2
YW50IGlmIHRoZSB1c2VyJ3MKLSAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0aGF0IGlzIHJl
cXVpcmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCi0gICAgICAgICAgICAg
ICAgLy8gICBsaXZlLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gLSBU
aGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVja3MgaWYgc29t
ZQotICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUgc291cmNlLCBh
bmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgICAgIC8vICAgSGVuY2Ug
dGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJlIGxpdmUuCi0g
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNob3J0LWNpcmN1
aXQgdGhlIGxpdmVuZXNzIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaGFybWxlc3MKLSAgICAgICAgICAg
ICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2JqZWN0IGFuZCBwcm90b3R5cGUgYXJl
IGJvdGggYWxyZWFkeQotICAgICAgICAgICAgICAgIC8vIGxpdmUpLgotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25z
W2ldLm1fdG8pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYWxsQXJlTWFy
a2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICAKLSAgICBpZiAoYWxsQXJlTWFya2VkU29GYXIpCi0gICAgICAgIG1fYWxsVHJh
bnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkZXRl
cm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gQ2hlY2sgaWYgd2Ug
aGF2ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8uCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgIGlmIChkZmdDb21tb24tPmxpdmVu
ZXNzSGFzQmVlblByb3ZlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIE5vdyBjaGVj
ayBhbGwgb2Ygb3VyIHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJlIGxpdmUsIHRo
ZW4gd2UKLSAgICAvLyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2NhbiBvdXIgc3Ry
b25nIHJlZmVyZW5jZXMuIElmIGF0IGVuZCBvZgotICAgIC8vIEdDIHdlIHN0aWxsIGhhdmUgbm90
IHByb3ZlZCBsaXZlbmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3QuCi0gICAgYm9v
bCBhbGxBcmVMaXZlU29GYXIgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQo
KSkpIHsKLSAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVm
ZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkg
ewotICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8v
IElmIHNvbWUgd2VhayByZWZlcmVuY2VzIGFyZSBkZWFkLCB0aGVuIHRoaXMgZml4cG9pbnQgaXRl
cmF0aW9uIHdhcwotICAgIC8vIHVuc3VjY2Vzc2Z1bC4KLSAgICBpZiAoIWFsbEFyZUxpdmVTb0Zh
cikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEFsbCB3ZWFrIHJlZmVyZW5jZXMgYXJl
IGxpdmUuIFJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHNvIHdlIGRvbid0Ci0gICAgLy8gY29tZSBi
YWNrIGhlcmUgYWdhaW4sIGFuZCBzY2FuIHRoZSBzdHJvbmcgcmVmZXJlbmNlcy4KLSAgICBkZmdD
b21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0gICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKLX0KLQotdm9pZCBDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPQotICAgICAgICBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCi0gICAgICAgICAgICBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV93
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKSk7Ci0KLSAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOwotICAgIGNvZGVCbG9jay0+ZGV0ZXJtaW5lTGl2ZW5lc3ModmlzaXRv
cik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9IExMSW50
OjpnZXRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKLSAgICBpbnN0cnVjdGlvbls0XS51LnBvaW50ZXIg
PSBudWxscHRyOwotICAgIGluc3RydWN0aW9uWzVdLnUucG9pbnRlciA9IG51bGxwdHI7Ci0gICAg
aW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICBpZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCi0g
ICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
bV92bS0+aW50ZXJwcmV0ZXI7Ci0gICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMoKTsKLSAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBJbnN0cnVjdGlvbiog
Y3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnNbaV1dOwotICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0
cnVjdGlvblswXS51Lm9wY29kZSkpIHsKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6Ci0gICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX3Vuc2V0OiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGN1
ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVj
dHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChvbGRTdHJ1Y3R1cmVJRCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xl
YXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzLlxuIik7Ci0gICAgICAgICAgICBjbGVhckxMSW50
R2V0QnlJZENhY2hlKGN1ckluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJ
RCBvbGRTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAg
ICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzZdLnUu
c3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBjdXJJbnN0
cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xk
U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFuZXdTdHJ1Y3R1
cmVJRCB8fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
bmV3U3RydWN0dXJlSUQpKSkgJiYKLSAgICAgICAgICAgICAgICAoIWNoYWluIHx8IEhlYXA6Omlz
TWFya2VkKGNoYWluKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmlu
ZyBMTEludCBwdXQgdHJhbnNpdGlvbi5cbiIpOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25b
NF0udS5zdHJ1Y3R1cmVJRCA9IDA7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQgPSAwOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRCA9
IDA7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmNsZWFy
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9h
cnJheV9sZW5ndGg6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF90b190aGlz
OgotICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZSB8fCBIZWFw
Ojppc01hcmtlZChjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190aGlzIHdpdGggc3Ry
dWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpOwotICAg
ICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAg
ICAgIGN1ckluc3RydWN0aW9uWzNdLnUudG9UaGlzU3RhdHVzID0gbWVyZ2UoCi0gICAgICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMsIFRvVGhpc0NsZWFyZWRCeUdD
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IGN1ckluc3RydWN0aW9uWzRdLnUu
anNDZWxsOwotICAgICAgICAgICAgaWYgKCFjYWNoZVdyaXRlQmFycmllciB8fCBjYWNoZVdyaXRl
QmFycmllci51bnZhbGlkYXRlZEdldCgpID09IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2Jq
ZWN0cygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNDZWxsKiBjYWNo
ZWRGdW5jdGlvbiA9IGNhY2hlV3JpdGVCYXJyaWVyLmdldCgpOwotICAgICAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKGNhY2hlZEZ1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIExMSW50IGNyZWF0ZV90aGlzIHdpdGggY2FjaGVkIGNhbGxlZSAlcC5c
biIsIGNhY2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGNhY2hlV3JpdGVCYXJyaWVyLmNsZWFy
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6IHsKLSAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGlzIGlzbid0IHN0cmljdGx5
IG5lY2Vzc2FyeS4gQW55IHN5bWJvbCB0YWJsZXMgdGhhdCB0aGlzIHdpbGwgcmVmZXIgdG8KLSAg
ICAgICAgICAgIC8vIGFyZSBmb3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVmZXIgdG8gdGhv
c2UgZnVuY3Rpb25zIHN0cm9uZ2x5LCBhbmQgdGhleSByZWZlcgotICAgICAgICAgICAgLy8gdG8g
dGhlIHN5bWJvbCB0YWJsZSBzdHJvbmdseS4gQnV0IGl0J3MgbmljZSB0byBiZSBvbiB0aGUgc2Fm
ZSBzaWRlLgotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJv
bFRhYmxlID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zeW1ib2xUYWJsZTsKLSAgICAgICAgICAgIGlm
ICghc3ltYm9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1ib2xUYWJsZSAl
cC5cbiIsIHN5bWJvbFRhYmxlLmdldCgpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmNsZWFy
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9m
cm9tX3Njb3BlOgotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewotICAgICAgICAgICAg
R2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJJbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9i
YWxWYXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgCi0gICAgICAgICAgICAgICAgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
ID09IExvY2FsQ2xvc3VyZVZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4mIHN0cnVjdHVyZSA9IGN1ckluc3Ry
dWN0aW9uWzVdLnUuc3RydWN0dXJlOwotICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgSGVh
cDo6aXNNYXJrZWQoc3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIHNjb3BlIGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIHN0cnVj
dHVyZS5nZXQoKSk7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVjdGlvblswXS51
Lm9wY29kZSk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChvcGNvZGVJ
RCwgZmFsc2UsICJVbmhhbmRsZWQgb3Bjb2RlIGluIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHksICVzKCVkKSBhdCBiYyAldSIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgb3Bjb2Rl
SUQsIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFdlIGNhbid0IGp1c3QgcmVtb3ZlIGFsbCB0aGUgc2V0cyB3aGVuIHdlIGNsZWFyIHRo
ZSBjYWNoZXMgc2luY2Ugd2UgbWlnaHQgaGF2ZSBjcmVhdGVkIGEgd2F0Y2hwb2ludCBzZXQKLSAg
ICAvLyB0aGVuIGNsZWFyZWQgdGhlIGNhY2hlIHdpdGhvdXQgR0NpbmcgaW4gYmV0d2Vlbi4KLSAg
ICBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAucmVtb3ZlSWYoW10oY29uc3QgU3RydWN0dXJl
V2F0Y2hwb2ludE1hcDo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7Ci0gICAgICAg
IHJldHVybiAhSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpOwotICAgIH0pOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGxpbnRDYWxsTGlua0luZm9zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpICYmICFIZWFwOjpp
c01hcmtlZChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5jYWxsZWUuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcywgIlxuIik7Ci0gICAgICAgICAgICBt
X2xsaW50Q2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ISFtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJr
ZWQobV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQotICAgICAg
ICAgICAgbV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVz
KCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoYXV0byBpdGVyID0gY2FsbExpbmtJbmZv
c0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnZt
KCkpOwotCi0gICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0g
bV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICBzdHViSW5mby52aXNpdFdlYWtS
ZWZlcmVuY2VzKHRoaXMpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6VW5j
b25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91
bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
Y29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7Ci0gICAgICAg
IGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQot
ICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkgewotICAgICAg
ICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0
ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCEhY29kZUJsb2Nr
LT5qaXRDb2RlKCkpCi0gICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElubGlu
ZUNhY2hlcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCkKLXsKLSNpZiBF
TkFCTEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQotICAgICAgICB0
b0hhc2hNYXAobV9zdHViSW5mb3MsIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbiwgcmVz
dWx0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpCi17Ci0gICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBnZXRTdHViSW5mb01hcChs
b2NrZXIsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXAo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQotewot
I2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpCi0gICAg
ICAgIHRvSGFzaE1hcChtX2NhbGxMaW5rSW5mb3MsIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4s
IHJlc3VsdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwotI2VuZGlmCi19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1
bHQpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBnZXRD
YWxsTGlua0luZm9NYXAobG9ja2VyLCByZXN1bHQpOwotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0
QnlWYWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBCeVZhbEluZm9NYXAmIHJl
c3VsdCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBl
KCkpKSB7Ci0gICAgICAgIGZvciAoYXV0byogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQotICAg
ICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCks
IGJ5VmFsSW5mbyk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSNl
bmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYg
cmVzdWx0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
Z2V0QnlWYWxJbmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1T
dHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBy
ZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwotfQotCi1KSVRBZGRJQyogQ29kZUJs
b2NrOjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE11bElDKiBDb2RlQmxvY2s6
OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRk
SklUU3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVRO
ZWdJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1cm4gbV9uZWdJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLVN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgZm9yIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykgewotICAgICAgICBpZiAoc3R1YkluZm8t
PmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAgICAgIHJldHVybiBzdHViSW5mbzsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUJ5VmFsSW5mbyogQ29kZUJsb2NrOjph
ZGRCeVZhbEluZm8oKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgcmV0dXJuIG1fYnlWYWxJbmZvcy5hZGQoKTsKLX0KLQotQ2FsbExpbmtJbmZvKiBDb2Rl
QmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFkZCgpOwotfQotCi1DYWxs
TGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBpbmRleCkKLXsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdp
bigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+Y29kZU9yaWdpbigp
ID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuICppdGVyOwotICAgIH0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpOwotICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgLy8gV2UgY2Fu
IGNsZWFyIHRoZXNlIGJlY2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgaGF2ZSByZWZlcmVuY2Vz
IHRvIGFueSBzdHViIGluZm9zLCBjYWxsCi0gICAgLy8gbGluayBpbmZvcywgb3IgYnkgdmFsIGlu
Zm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0dGVtcHRzIHRvIHF1ZXJ5IHRoZXNlIGRh
dGEKLSAgICAvLyBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50IEFQSSAoZ2V0U3R1Yklu
Zm9NYXAgYW5kIGZyaWVuZHMpIHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYgd2UKLSAgICAvLyBkb24n
dCBoYXZlIEpJVCBjb2RlLgotICAgIG1fc3R1YkluZm9zLmNsZWFyKCk7Ci0gICAgbV9jYWxsTGlu
a0luZm9zLmNsZWFyKCk7Ci0gICAgbV9ieVZhbEluZm9zLmNsZWFyKCk7Ci0gICAgCi0gICAgLy8g
V2UgY2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0byB0aGVzZSBkYXRh
IHN0cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgotICAgIC8vIHRoZXJlIGlzIEpJVCBj
b2RlLgotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5jbGVhcigpOwotfQotI2VuZGlmCi0KLXZvaWQg
Q29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0byBkZWFsIHdpdGgKLSAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5n
IGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCi0gICAgLy8gZ3VhcmFudGVl
aW5nIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGV0YWlscyBvZiB0aGUgQ29kZUJsb2NrIHdlIGNvbXBp
bGVkCi0gICAgLy8gdGhlIE9TUiBleGl0IGFnYWluc3QuCi0KLSAgICB2aXNpdG9yLmFwcGVuZCgm
bV9hbHRlcm5hdGl2ZSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgaWYgKGRmZ0NvbW1v
bi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFt
ZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgfQot
ICAgIH0KLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmQoJm1f
Z2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwot
ICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7Ci0gICAgaWYgKG1fcmFyZURhdGEp
Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhtX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEo
KSwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
bV9mdW5jdGlvbkV4cHJzW2ldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25E
ZWNsc1tpXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
c1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9y
IChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQoJmJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAg
ICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKHZpc2l0b3IpOwotI2VuZGlmCi0KLSAgICB1cGRhdGVB
bGxQcmVkaWN0aW9ucygpOwotfQotCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTSh2aXNp
dG9yKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoISFkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbikKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29k
ZU9yaWdpbik7IC8vIEFsbW9zdCBjZXJ0YWlubHkgbm90IG5lY2Vzc2FyeSwgc2luY2UgdGhlIGNv
ZGUgb3JpZ2luIHNob3VsZCBhbHNvIGJlIGEgd2VhayByZWZlcmVuY2UuIEJldHRlciB0byBiZSBz
YWZlLCB0aG91Z2guCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRp
b25zW2ldLm1fZnJvbSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5z
aXRpb25zW2ldLm1fdG8pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJmRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0pOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVS
ZWZlcmVuY2VzW2ldKTsKLQotICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0g
dHJ1ZTsKLSNlbmRpZiAgICAKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0
ZXJuYXRpdmUoKQotewotI2lmIEVOQUJMRShKSVQpCi0gICAgQ29kZUJsb2NrKiByZXN1bHQgPSB0
aGlzOwotICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCi0gICAgICAgIHJlc3VsdCA9
IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAg
IFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlc3VsdC0+aml0VHlwZSgp
KSB8fCByZXN1bHQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotI2Vsc2UKLSAgICByZXR1cm4gdGhpczsKLSNlbmRpZgotfQotCi1Db2RlQmxvY2sqIENv
ZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKCFyZXN1bHQp
IHsKLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGNyZWF0aW5nIHRoZSBvcmln
aW5hbCBDb2RlQmxvY2sgZm9yIGFuIGV4ZWN1dGFibGUuCi0gICAgICAgIC8vIEFzc3VtZSB0aGF0
IHdlJ3JlIHRoZSBiYXNlbGluZSBDb2RlQmxvY2suCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQot
ICAgIHJlc3VsdCA9IHJlc3VsdC0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci0jZWxzZQotICAgIHJldHVybiB0aGlzOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUo
SklUKQotYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKLXsKLSAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Ci19Ci0KLWJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCi17Ci0gICAgcmV0dXJuIGhhc09wdGlt
aXplZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7Ci19Ci0jZW5kaWYKLQotSGFuZGxlckluZm8qIENv
ZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gaGFu
ZGxlckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhhbmRsZXIpOwotfQotCi1IYW5k
bGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVp
cmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3JhcmVEYXRhKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleCht
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsK
LX0KLQotQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpCi17Ci0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxs
U2l0ZSkpOwotICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJp
dHMoKSkpOwotICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdp
bmFsQ2FsbFNpdGUpOwotICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5hZGRVbmlx
dWVDYWxsU2l0ZUluZGV4KG9yaWdpbmFsT3JpZ2luKTsKLSNlbHNlCi0gICAgLy8gV2UgbmV2ZXIg
Y3JlYXRlIG5ldyBvbi10aGUtZmx5IGV4Y2VwdGlvbiBoYW5kbGluZwotICAgIC8vIGNhbGwgc2l0
ZXMgb3V0c2lkZSB0aGUgREZHL0ZUTCBpbmxpbmUgY2FjaGVzLgotICAgIFVOVVNFRF9QQVJBTShv
cmlnaW5hbENhbGxTaXRlKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBDYWxsU2l0ZUluZGV4KDB1KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6
cmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsKLSAgICBWZWN0b3I8SGFu
ZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVycyA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnM7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAg
ICAgIGlmIChoYW5kbGVyLnN0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIuZW5kID4gaW5kZXgpIHsK
LSAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gb3duZXJTY3JpcHRF
eGVjdXRhYmxlKCktPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci19Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6
Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17
Ci0gICAgaW50IGRpdm90OwotICAgIGludCBzdGFydE9mZnNldDsKLSAgICBpbnQgZW5kT2Zmc2V0
OwotICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgdW5zaWduZWQgY29sdW1uOwotICAgIGV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKLSAgICByZXR1cm4gY29sdW1uOwotfQotCi12
b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zm
c2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKLXsKLSAgICBtX3Vu
bGlua2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIGRp
dm90ICs9IG1fc291cmNlT2Zmc2V0OwotICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGlu
ZUNvbHVtbk9mZnNldCgpOwotICAgIGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZp
cnN0TGluZSgpOwotfQotCi1ib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1
bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBi
ZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVu
ZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOwotICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24qIGl0
ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKLSAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKLSAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2RlYnVnKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGl0
IC0gYmVnaW47Ci0gICAgICAgICAgICBpbnQgdW51c2VkOwotICAgICAgICAgICAgdW5zaWduZWQg
b3BEZWJ1Z0xpbmU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOwotICAgICAg
ICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHVu
dXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKLSAgICAg
ICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2ludDo6
dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGl0ICs9IG9wY29kZUxlbmd0
aHNbb3Bjb2RlSURdOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCi17Ci0gICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLQotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5zaHJp
bmtUb0ZpdCgpOwotICAgIAotICAgIGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7Ci0g
ICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0gICAgfSAvLyBl
bHNlIGRvbid0IHNocmluayB0aGVzZSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgcG9p
bnRlZCBwb2ludGVycyBpbnRvIHRoZXNlIHRhYmxlcy4KLX0KLQotI2lmIEVOQUJMRShKSVQpCi12
b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBD
YWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJG
cmFtZSk7Ci0gICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCi12b2lkIENv
ZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJh
bWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5n
Q2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMucHVzaChp
bmNvbWluZyk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDb2RlQmxvY2s6OnVu
bGlua0luY29taW5nQ2FsbHMoKQotewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5i
ZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5n
TExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKLSNpZiBFTkFCTEUoSklUKQotICAgIHdoaWxl
IChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAg
ICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOwotICAgIHdoaWxlICht
X2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigp
LT51bmxpbmsoKnZtKCkpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExp
bmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUp
OwotICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCi1Db2RlQmxv
Y2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBvd25lclNjcmlw
dEV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25L
aW5kKCkpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBs
YWNlbWVudCgpCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFz
c0luZm8oKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8o
KSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0
IDogQ29kZUZvckNhbGwpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFsQ29kZUJsb2NrOjpp
bmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9ncmFtQ29k
ZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9
PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygp
OwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYK
LQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLURGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlM
ZXZlbCgpCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0lu
Zm8oKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkg
ewotICAgICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgcmV0dXJuIERGRzo6
ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgICAgIHJldHVy
biBERkc6OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLSAgICB9Ci0KLSAg
ICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJu
IERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0g
UHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2Fw
YWJpbGl0eUxldmVsKHRoaXMpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5
TGV2ZWwodGhpcyk7Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKGNsYXNzSW5m
byA9PSBXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpD
YW5ub3RDb21waWxlOwotI2VuZGlmCi0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQotCi12b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29u
IHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFp
bCkKLXsKLSNpZiAhRU5BQkxFKERGR19KSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAg
IFVOVVNFRF9QQVJBTShkZXRhaWwpOwotI2VuZGlmCi0gICAgCi0gICAgQ09ERUJMT0NLX0xPR19F
VkVOVCh0aGlzLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24sICIsIGNvdW50aW5nID0g
IiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwgPSAiLCBwb2ludGVyRHVt
cChkZXRhaWwpKSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChyZWFzb24gIT0gUHJvZmlsZXI6Ok5v
dEpldHRpc29uZWQpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChERkc6OnNo
b3VsZER1bXBEaXNhc3NlbWJseSgpKSB7Ci0gICAgICAgIGRhdGFMb2coIkpldHRpc29uaW5nICIs
ICp0aGlzKTsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikKLSAgICAg
ICAgICAgIGRhdGFMb2coIiBhbmQgY291bnRpbmcgcmVvcHRpbWl6YXRpb24iKTsKLSAgICAgICAg
ZGF0YUxvZygiIGR1ZSB0byAiLCByZWFzb24pOwotICAgICAgICBpZiAoZGV0YWlsKQotICAgICAg
ICAgICAgZGF0YUxvZygiLCAiLCAqZGV0YWlsKTsKLSAgICAgICAgZGF0YUxvZygiLlxuIik7Ci0g
ICAgfQotICAgIAotICAgIGlmIChyZWFzb24gPT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFr
UmVmZXJlbmNlKSB7Ci0gICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNl
IG9mIHRoZSBmb2xsb3dpbmcgZGVhZCByZWZlcmVuY2VzOlxuIik7Ci0gICAgICAgICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24gPSBkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldOwotICAgICAgICAgICAgICAg
IEpTQ2VsbCogb3JpZ2luID0gdHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgSlNDZWxsKiBmcm9tID0gdHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgSlNDZWxsKiB0byA9IHRyYW5zaXRpb24ubV90by5nZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoKCFvcmlnaW4gfHwgSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgJiYgSGVhcDo6aXNN
YXJrZWQoZnJvbSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBUcmFuc2l0aW9uIHVuZGVyICIsIFJhd1BvaW50ZXIob3JpZ2luKSwg
IiwgIiwgUmF3UG9pbnRlcihmcm9tKSwgIiAtPiAiLCBSYXdQb2ludGVyKHRvKSwgIi5cbiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU0Nl
bGwqIHdlYWsgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwotICAgICAgICAg
ICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrKSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFdlYWsgcmVmZXJlbmNlICIsIFJh
d1BvaW50ZXIod2VhayksICIuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
QygqaGVhcCgpKTsKLSAgICAKLSAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5n
cyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9u
IHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0Ci0gICAgLy8gICAg
d2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KLSAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBj
YWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29k
ZUJsb2NrLgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxl
cjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBpZiAoUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdl
dCgpKQotICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwg
ZGV0YWlsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5k
IGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBo
YXBwZW5lZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRl
KCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAobV92bS0+
aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFya2VkKG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQotICAgICAgICBkYXRh
TG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOwotICAgIAotICAgIC8vIENv
dW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCi0g
ICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikgewotICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2ZSgpLgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3Ci0gICAgICAgIGJhc2VsaW5l
QWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlvbigpOwotICAgICAgICBpZiAoREZHOjpz
aG91bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291
bnQgcmVvcHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
d2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50
cnkgY29kZQotICAgICAgICAvLyBibG9ja3MuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoYWx0ZXJuYXRpdmUoKSkKLSAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRl
cldhcm1VcCgpOwotCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSkKLSAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQotCi0gICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdlIGRv
bid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCi0gICAgLy8gYmVj
YXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNldC4K
LSAgICBpZiAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFy
a2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
VGhpcyBhY2NvbXBsaXNoZXMgKDIpLgotICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0
YWxsQ29kZSgKLSAgICAgICAgbV9nbG9iYWxPYmplY3QtPnZtKCksIGFsdGVybmF0aXZlKCksIGNv
ZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQotICAgICAgICBkYXRhTG9nKCIg
ICAgRGlkIGluc3RhbGwgYmFzZWxpbmUgdmVyc2lvbiBvZiAiLCAqdGhpcywgIlxuIik7Ci0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLUpTR2xvYmFsT2JqZWN0KiBDb2RlQmxvY2s6Omds
b2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOwotICAg
IHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotfQotCi1jbGFzcyBSZWN1cnNpb25DaGVja0Z1bmN0b3IgewotcHVibGlj
OgotICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgZGVwdGhUb0NoZWNrKQotICAgICAgICA6IG1f
c3RhcnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQotICAgICAgICAsIG1fZGVwdGhUb0NoZWNrKGRlcHRoVG9DaGVjaykKLSAgICAgICAg
LCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFsc2UpCi0gICAgICAgICwgbV9kaWRSZWN1cnNlKGZh
bHNlKQotICAgIHsgfQotCi0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFj
a1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBDYWxsRnJhbWUqIGN1cnJl
bnRDYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKLQotICAgICAgICBpZiAoY3VycmVu
dENhbGxGcmFtZSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKQotICAgICAgICAgICAgbV9mb3VuZFN0YXJ0
Q2FsbEZyYW1lID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKSB7
Ci0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbEZyYW1lKCktPmNvZGVCbG9jaygpID09IG1f
Y29kZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgbV9kaWRSZWN1cnNlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIW1fZGVwdGhUb0NoZWNrLS0pCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkNvbnRpbnVlOwotICAgIH0KLQotICAgIGJvb2wgZGlkUmVjdXJzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlkUmVjdXJzZTsgfQotCi1wcml2YXRlOgotICAgIENhbGxGcmFtZSogbV9zdGFy
dENhbGxGcmFtZTsKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIG11dGFibGUgdW5z
aWduZWQgbV9kZXB0aFRvQ2hlY2s7Ci0gICAgbXV0YWJsZSBib29sIG1fZm91bmRTdGFydENhbGxG
cmFtZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9kaWRSZWN1cnNlOwotfTsKLQotdm9pZCBDb2RlQmxv
Y2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKQotewotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKLSAgICAgICAgZGF0YUxvZygi
Tm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgcG9pbnRlckR1bXAoY2FsbGVyQ29kZUJsb2NrKSwg
IiB0byAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYg
KCFtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlm
ICghY2FsbGVyQ29kZUJsb2NrKSB7Ci0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlzIG5hdGl2ZS5c
biIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIURGRzo6bWlnaHRJbmxpbmVG
dW5jdGlvbih0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjYW5JbmxpbmUoY2Fw
YWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIURG
Rzo6aXNTbWFsbEVub3VnaFRvSW5saW5lQ29kZUludG8oY2FsbGVyQ29kZUJsb2NrKSkgewotICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcg
U0FCSSBiZWNhdXNlIGNhbGxlciBpcyB0b28gbGFyZ2UuXG4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSB7Ci0gICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgc3RpbGwgaW4g
dGhlIGludGVycHJldGVyLCB0aGVuIHdlIGNhbid0IGV4cGVjdCBpbmxpbmluZyB0bwotICAgICAg
ICAvLyBoYXBwZW4gYW55dGltZSBzb29uLiBBc3N1bWUgaXQncyBwcm9maXRhYmxlIHRvIG9wdGlt
aXplIGl0IHNlcGFyYXRlbHkuIFRoaXMKLSAgICAgICAgLy8gZW5zdXJlcyB0aGF0IGEgZnVuY3Rp
b24gaXMgU0FCSSBvbmx5IGlmIGl0IGlzIGNhbGxlZCBubyBtb3JlIGZyZXF1ZW50bHkgdGhhbgot
ICAgICAgICAvLyBhbnkgb2YgaXRzIGNhbGxlcnMuCi0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlz
IGluIExMSW50LlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKLSAg
ICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5n
IFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuXG4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ICE9IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIGVpdGhlciBl
dmFsIG9yIGdsb2JhbCBjb2RlLCBhc3N1bWUgdGhhdCB0aGF0IHdvbid0IGJlCi0gICAgICAgIC8v
IG9wdGltaXplZCBhbnl0aW1lIHNvb24uIEZvciBldmFsIGNvZGUgdGhpcyBpcyBwYXJ0aWN1bGFy
bHkgdHJ1ZSBzaW5jZSB3ZQotICAgICAgICAvLyBkZWxheSBldmFsIG9wdGltaXphdGlvbiBieSBh
ICpsb3QqLgotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBub3QgYSBmdW5jdGlvbi5cbiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVjdXJzaXZlIGNhbGxzIHdvbid0IGJl
IGlubGluZWQuCi0gICAgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FsbGVyRnJhbWUs
IHRoaXMsIE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpOwotICAgIHZtKCktPnRvcENh
bGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLQotICAgIGlmIChmdW5jdG9yLmRpZFJlY3Vyc2Uo
KSkgewotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAg
ICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIHJlY3Vyc2lvbiB3YXMgZGV0ZWN0
ZWQuXG4iKTsKLSAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5jYXBhYmls
aXR5TGV2ZWxTdGF0ZSgpID09IERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KSB7Ci0gICAgICAg
IGRhdGFMb2coIkluIGNhbGwgZnJvbSAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiICIsIGNhbGxlckZy
YW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwgKnRoaXMsICI6IGNhbGxlcidzIERGRyBjYXBhYmls
aXR5IGxldmVsIGlzIG5vdCBzZXQuXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGNhbkNvbXBpbGUoY2FsbGVyQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWxTdGF0
ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2Fs
bExpbmsoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSB0aGUg
Y2FsbGVyIGlzIG5vdCBhIERGRyBjYW5kaWRhdGUuXG4iKTsKLSAgICAKLSAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShKSVQpCi0g
ICAgQVNTRVJUKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gT3B0aW9uczo6cmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSk7Ci0gICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVOQUJMRShKSVQp
Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldENhbGxlZVNhdmVSZWdp
c3RlcnMoUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycykKLXsKLSAgICBtX2NhbGxlZVNh
dmVSZWdpc3RlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PihjYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnNldENhbGxlZVNhdmVSZWdp
c3RlcnMoc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3RlckF0T2Zm
c2V0TGlzdCkKLXsKLSAgICBtX2NhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHJlZ2lzdGVy
QXRPZmZzZXRMaXN0KTsKLX0KLSAgICAKLXN0YXRpYyBzaXplX3Qgcm91bmRDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoc2l6ZV90IGNhbGxlZVNhdmVSZWdpc3RlcnMpCi17Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNwdVJlZ2lzdGVyU2l6ZSA9IHNpemVvZih2b2lkKik7Ci0g
ICAgcmV0dXJuIChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKFJlZ2lzdGVyKSwgY2Fs
bGVlU2F2ZVJlZ2lzdGVycyAqIGNwdVJlZ2lzdGVyU2l6ZSkgLyBzaXplb2YoUmVnaXN0ZXIpKTsK
LQotfQotCi1zaXplX3QgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCkKLXsKLSAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMobnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKLX0KLQotc2l6ZV90IENvZGVCbG9jazo6Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkKLXsKLSAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLT5zaXplKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6
Y291bnRSZW9wdGltaXphdGlvbigpCi17Ci0gICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cisrOwotICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkKLSAgICAgICAgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCk7Ci19
Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygpCi17Ci0gICAgQVNT
RVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGlmIChPcHRpb25z
Ojp0ZXN0VGhlRlRMKCkpIHsKLSAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7Ci0gICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKLSAg
ICB9Ci0gICAgcmV0dXJuIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQoKS0+
aml0VHlwZSgpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Ci19Ci0K
LWludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdAot
ewotICAgIGlmIChjb2RlVHlwZSgpID09IEV2YWxDb2RlKQotICAgICAgICByZXR1cm4gT3B0aW9u
czo6ZXZhbFRocmVzaG9sZE11bHRpcGxpZXIoKTsKLSAgICAKLSAgICByZXR1cm4gMTsKLX0KLQot
ZG91YmxlIENvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpCi17
Ci0gICAgLy8gVGhpcyBleHByZXNzaW9uIGFyaXNlcyBmcm9tIGRvaW5nIGEgbGVhc3Qtc3F1YXJl
cyBmaXQgb2YKLSAgICAvLwotICAgIC8vIEZbeF9dID06IGEgKiBTcXJ0W3ggKyBiXSArIEFic1tj
ICogeF0gKyBkCi0gICAgLy8KLSAgICAvLyBhZ2FpbnN0IHRoZSBkYXRhIHBvaW50czoKLSAgICAv
LwotICAgIC8vICAgIHggICAgICAgRlt4X10KLSAgICAvLyAgICAxMCAgICAgICAwLjkgICAgICAg
ICAgKHNtYWxsZXN0IHJlYXNvbmFibGUgY29kZSBibG9jaykKLSAgICAvLyAgIDIwMCAgICAgICAx
LjAgICAgICAgICAgKHR5cGljYWwgc21hbGwtaXNoIGNvZGUgYmxvY2spCi0gICAgLy8gICAzMjAg
ICAgICAgMS4yICAgICAgICAgIChzb21ldGhpbmcgSSBzYXcgaW4gM2QtY3ViZSB0aGF0IEkgd2Fu
dGVkIHRvIG9wdGltaXplKQotICAgIC8vICAxMjY4ICAgICAgIDUuMCAgICAgICAgICAoc29tZXRo
aW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIGRpZG4ndCB3YW50IHRvIG9wdGltaXplKQotICAg
IC8vICA0MDAwICAgICAgIDUuNSAgICAgICAgICAocmFuZG9tIGxhcmdlIHNpemUsIHVzZWQgdG8g
Y2F1c2UgdGhlIGZ1bmN0aW9uIHRvIGNvbnZlcmdlIHRvIGEgc2hhbGxvdyBjdXJ2ZSBvZiBzb21l
IHNvcnQpCi0gICAgLy8gMTAwMDAgICAgICAgNi4wICAgICAgICAgIChzaW1pbGFyIHRvIGFib3Zl
KQotICAgIC8vCi0gICAgLy8gSSBhY2hpZXZlIHRoZSBtaW5pbWl6YXRpb24gdXNpbmcgdGhlIGZv
bGxvd2luZyBNYXRoZW1hdGljYSBjb2RlOgotICAgIC8vCi0gICAgLy8gTXlGdW5jdGlvblRlbXBs
YXRlW3hfLCBhXywgYl8sIGNfLCBkX10gOj0gYSpTcXJ0W3ggKyBiXSArIEFic1tjKnhdICsgZAot
ICAgIC8vCi0gICAgLy8gc2FtcGxlcyA9IHt7MTAsIDAuOX0sIHsyMDAsIDF9LCB7MzIwLCAxLjJ9
LCB7MTI2OCwgNX0sIHs0MDAwLCA1LjV9LCB7MTAwMDAsIDZ9fQotICAgIC8vCi0gICAgLy8gc29s
dXRpb24gPSAKLSAgICAvLyAgICAgTWluaW1pemVbUGx1cyBAQCAoKE15RnVuY3Rpb25UZW1wbGF0
ZVsjW1sxXV0sIGEsIGIsIGMsIGRdIC0gI1tbMl1dKV4yICYgL0Agc2FtcGxlcyksCi0gICAgLy8g
ICAgICAgICB7YSwgYiwgYywgZH1dW1syXV0KLSAgICAvLwotICAgIC8vIEFuZCB0aGUgY29kZSBi
ZWxvdyAodG8gaW5pdGlhbGl6ZSBhLCBiLCBjLCBkKSBpcyBnZW5lcmF0ZWQgYnk6Ci0gICAgLy8K
LSAgICAvLyBQcmludFsiY29uc3QgZG91YmxlICIgPD4gVG9TdHJpbmdbI1tbMV1dXSA8PiAiID0g
IiA8PgotICAgIC8vICAgICBJZlsjW1syXV0gPCAwLjAwMDAxLCAiMC4wIiwgVG9TdHJpbmdbI1tb
Ml1dXV0gPD4gIjsiXSAmIC9AIHNvbHV0aW9uCi0gICAgLy8KLSAgICAvLyBXZSd2ZSBsb25nIGtu
b3duIHRoZSBmb2xsb3dpbmcgdG8gYmUgdHJ1ZToKLSAgICAvLyAtIFNtYWxsIGNvZGUgYmxvY2tz
IGFyZSBjaGVhcCB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIGRvIGl0IHNvb25lciByYXRo
ZXIKLSAgICAvLyAgIHRoYW4gbGF0ZXIuCi0gICAgLy8gLSBMYXJnZSBjb2RlIGJsb2NrcyBhcmUg
ZXhwZW5zaXZlIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgcG9zdHBvbmUgZG9pbmcgc28s
Ci0gICAgLy8gICBhbmQgc29tZXRpbWVzIGhhdmUgYSBsYXJnZSBlbm91Z2ggdGhyZXNob2xkIHRo
YXQgd2UgbmV2ZXIgb3B0aW1pemUgdGhlbS4KLSAgICAvLyAtIFRoZSBkaWZmZXJlbmNlIGluIGNv
c3QgaXMgbm90IHRvdGFsbHkgbGluZWFyIGJlY2F1c2UgKGEpIGp1c3QgaW52b2tpbmcgdGhlCi0g
ICAgLy8gICBERkcgaW5jdXJzIHNvbWUgYmFzZSBjb3N0IGFuZCAoYikgZm9yIGxhcmdlIGNvZGUg
YmxvY2tzIHRoZXJlIGlzIGVub3VnaCBzbG9wCi0gICAgLy8gICBpbiB0aGUgY29ycmVsYXRpb24g
YmV0d2VlbiBpbnN0cnVjdGlvbiBjb3VudCBhbmQgdGhlIGFjdHVhbCBjb21waWxhdGlvbiBjb3N0
Ci0gICAgLy8gICB0aGF0IGZvciB0aG9zZSBsYXJnZSBibG9ja3MsIHRoZSBpbnN0cnVjdGlvbiBj
b3VudCBzaG91bGQgbm90IGhhdmUgYSBzdHJvbmcKLSAgICAvLyAgIGluZmx1ZW5jZSBvbiBvdXIg
dGhyZXNob2xkLgotICAgIC8vCi0gICAgLy8gSSBrbmV3IHRoZSBnb2FscyBidXQgSSBkaWRuJ3Qg
a25vdyBob3cgdG8gYWNoaWV2ZSB0aGVtOyBzbyBJIHBpY2tlZCBhbiBpbnRlcmVzdGluZwotICAg
IC8vIGV4YW1wbGUgd2hlcmUgdGhlIGhldXJpc3RpY3Mgd2VyZSByaWdodCAoY29kZSBibG9jayBp
biAzZC1jdWJlIHdpdGggaW5zdHJ1Y3Rpb24KLSAgICAvLyBjb3VudCAzMjAsIHdoaWNoIGdvdCBj
b21waWxlZCBlYXJseSBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuKSBhbmQgb25lIHdoZXJlIHRoZXkg
d2VyZQotICAgIC8vIHRvdGFsbHkgd3JvbmcgKGNvZGUgYmxvY2sgaW4gM2QtY3ViZSB3aXRoIGlu
c3RydWN0aW9uIGNvdW50IDEyNjgsIHdoaWNoIHdhcyBleHBlbnNpdmUKLSAgICAvLyB0byBjb21w
aWxlIGFuZCBkaWRuJ3QgcnVuIG9mdGVuIGVub3VnaCB0byB3YXJyYW50IGNvbXBpbGF0aW9uIGlu
IG15IG9waW5pb24pLCBhbmQKLSAgICAvLyB0aGVuIHRocmV3IGluIGFkZGl0aW9uYWwgZGF0YSBw
b2ludHMgdGhhdCByZXByZXNlbnRlZCBteSBvd24gZ3Vlc3Mgb2Ygd2hhdCBvdXIKLSAgICAvLyBo
ZXVyaXN0aWNzIHNob3VsZCBkbyBmb3Igc29tZSByb3VuZC1udW1iZXJlZCBleGFtcGxlcy4KLSAg
ICAvLwotICAgIC8vIFRoZSBleHByZXNzaW9uIHRvIHdoaWNoIEkgZGVjaWRlZCB0byBmaXQgdGhl
IGRhdGEgYXJvc2UgYmVjYXVzZSBJIHN0YXJ0ZWQgd2l0aCBhbgotICAgIC8vIGFmZmluZSBmdW5j
dGlvbiwgYW5kIHRoZW4gZGlkIHR3byB0aGluZ3M6IHB1dCB0aGUgbGluZWFyIHBhcnQgaW4gYW4g
QWJzIHRvIGVuc3VyZQotICAgIC8vIHRoYXQgdGhlIGZpdCBkaWRuJ3QgZW5kIHVwIGNob29zaW5n
IGEgbmVnYXRpdmUgdmFsdWUgb2YgYyAod2hpY2ggd291bGQgcmVzdWx0IGluCi0gICAgLy8gdGhl
IGZ1bmN0aW9uIHR1cm5pbmcgb3ZlciBhbmQgZ29pbmcgbmVnYXRpdmUgZm9yIGxhcmdlIHgpIGFu
ZCBJIHRocmV3IGluIGEgU3FydAotICAgIC8vIHRlcm0gYmVjYXVzZSBTcXJ0IHJlcHJlc2VudHMg
bXkgaW50dXRpb24gdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIG1vcmUgc2Vuc2l0aXZlCi0g
ICAgLy8gdG8gc21hbGwgY2hhbmdlcyBpbiBzbWFsbCB2YWx1ZXMgb2YgeCwgYnV0IGxlc3Mgc2Vu
c2l0aXZlIHdoZW4geCBnZXRzIGxhcmdlLgotICAgIAotICAgIC8vIE5vdGUgdGhhdCB0aGUgY3Vy
cmVudCBmaXQgZXNzZW50aWFsbHkgZWxpbWluYXRlcyB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhl
Ci0gICAgLy8gZXhwcmVzc2lvbiAoYyA9PSAwLjApLgotICAgIGNvbnN0IGRvdWJsZSBhID0gMC4w
NjE1MDQ7Ci0gICAgY29uc3QgZG91YmxlIGIgPSAxLjAyNDA2OwotICAgIGNvbnN0IGRvdWJsZSBj
ID0gMC4wOwotICAgIGNvbnN0IGRvdWJsZSBkID0gMC44MjU5MTQ7Ci0gICAgCi0gICAgZG91Ymxl
IGluc3RydWN0aW9uQ291bnQgPSB0aGlzLT5pbnN0cnVjdGlvbkNvdW50KCk7Ci0gICAgCi0gICAg
QVNTRVJUKGluc3RydWN0aW9uQ291bnQpOyAvLyBNYWtlIHN1cmUgdGhpcyBpcyBjYWxsZWQgb25s
eSBhZnRlciB3ZSBoYXZlIGFuIGluc3RydWN0aW9uIHN0cmVhbTsgb3RoZXJ3aXNlIGl0J2xsIGp1
c3QgcmV0dXJuIHRoZSB2YWx1ZSBvZiBkLCB3aGljaCBtYWtlcyBubyBzZW5zZS4KLSAgICAKLSAg
ICBkb3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0KGluc3RydWN0aW9uQ291bnQgKyBiKSArIGMg
KiBpbnN0cnVjdGlvbkNvdW50OwotICAgIAotICAgIHJlc3VsdCAqPSBjb2RlVHlwZVRocmVzaG9s
ZE11bHRpcGxpZXIoKTsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0g
ICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAqdGhpcywgIjogaW5zdHJ1Y3Rpb24gY291bnQg
aXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwKLSAgICAgICAgICAgICIsIHNjYWxpbmcgZXhlY3V0aW9u
IGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwgY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVy
KCksCi0gICAgICAgICAgICAiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGludDMyX3QgY2xpcFRocmVzaG9sZChkb3VibGUgdGhyZXNob2xkKQotewotICAgIGlm
ICh0aHJlc2hvbGQgPCAxLjApCi0gICAgICAgIHJldHVybiAxOwotICAgIAotICAgIGlmICh0aHJl
c2hvbGQgPiBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1heCgpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aHJlc2hvbGQpOwot
fQotCi1pbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUoaW50MzJfdCBkZXNp
cmVkVGhyZXNob2xkKQotewotICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAotICAgICAgICBzdGF0
aWNfY2FzdDxkb3VibGU+KGRlc2lyZWRUaHJlc2hvbGQpICoKLSAgICAgICAgb3B0aW1pemF0aW9u
VGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpICoKLSAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKSkpOwotfQotCi1ib29sIENvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXphdGlv
blRocmVzaG9sZFJlYWNoZWQoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChERkc6
OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVs
bCgpKSB7Ci0gICAgICAgIGlmICh3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShERkc6OkNvbXBp
bGF0aW9uS2V5KHRoaXMsIERGRzo6REZHTW9kZSkpCi0gICAgICAgICAgICA9PSBERkc6Oldvcmts
aXN0OjpDb21waWxlZCkgewotICAgICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICAK
LSAgICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldCh0aGlzKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6Om9wdGltaXplTmV4dEludm9jYXRpb24o
KQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRo
aXMsICI6IE9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7Ci0gICAgbV9qaXRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
b250T3B0aW1pemVBbnl0aW1lU29vbigpCi17Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogTm90IG9wdGltaXppbmcgYW55dGltZSBzb29u
LlxuIik7Ci0gICAgbV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwotfQot
Ci12b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCgpCi17Ci0gICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBh
ZnRlciB3YXJtLXVwLlxuIik7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9qaXRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCi17Ci0gICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0
aW1pemluZyBhZnRlciBsb25nIHdhcm0tdXAuXG4iKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgKLSAgICAgICAgYWRqdXN0ZWRD
b3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAo
KSksIHRoaXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQot
ewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMs
ICI6IE9wdGltaXppbmcgc29vbi5cbiIpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIG1faml0
RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAotICAgICAgICBhZGp1c3RlZENvdW50ZXJW
YWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSksIHRoaXMpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVu
dGx5KCkKLXsKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9n
KCp0aGlzLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkuXG4iKTsKLSAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKLX0KLQotI2lmIEVO
QUJMRShERkdfSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCi17Ci0gICAg
SklUQ29kZTo6SklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBlICE9IEpJVENv
ZGU6OkJhc2VsaW5lSklUKSB7Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IGV4cGVjdGVkIHRv
IGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlLCAiXG4iKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgQ29kZUJsb2NrKiB0
aGVSZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKChyZXN1bHQgPT0gQ29tcGls
YXRpb25TdWNjZXNzZnVsKSAhPSAodGhlUmVwbGFjZW1lbnQgIT0gdGhpcykpIHsKLSAgICAgICAg
ZGF0YUxvZygqdGhpcywgIjogd2UgaGF2ZSByZXN1bHQgPSAiLCByZXN1bHQsICIgYnV0ICIpOwot
ICAgICAgICBpZiAodGhlUmVwbGFjZW1lbnQgPT0gdGhpcykKLSAgICAgICAgICAgIGRhdGFMb2co
IndlIGFyZSBvdXIgb3duIHJlcGxhY2VtZW50LlxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGRhdGFMb2coIm91ciByZXBsYWNlbWVudCBpcyAiLCBwb2ludGVyRHVtcCh0aGVSZXBsYWNl
bWVudCksICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLSAgICAKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
cmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIG9wdGltaXplTmV4dEludm9jYXRp
b24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAg
ICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0gICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0
aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQotICAgICAgICAvLyBmb3Jj
ZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJ
dCB3b24ndAotICAgICAgICAvLyBuZWNlc3NhcmlseSBndWFyYW50ZWUgYW55dGhpbmcuIFNvLCB3
ZSBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoYXQKLSAgICAgICAgLy8gZnVuY3Rpb24gZW5kcyB1
cCBiZWluZyBhIG5vLW9wLCB3ZSBzdGlsbCBldmVudHVhbGx5IHJldHJ5IGFuZCByZWFsaXplCi0g
ICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBvcHRpbWl6ZWQgY29kZSByZWFkeS4KLSAgICAgICAgb3B0
aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21waWxhdGlv
bkludmFsaWRhdGVkOgotICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYu
Ci0gICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAgb3B0aW1pemVBZnRlcldh
cm1VcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGRhdGFMb2coIlVucmVj
b2duaXplZCByZXN1bHQ6ICIsIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSwgIlxuIik7Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2VuZGlmCi0gICAgCi11aW50MzJf
dCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRU
aHJlc2hvbGQpCi17Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKTsKLSAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVy
YXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKLSAgICAvLyBlbm91Z2ggdGhhdCB0aGlz
IGxvb3Agd29uJ3QgaHVydCB1cy4KLSAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNo
b2xkOwotICAgIGZvciAodW5zaWduZWQgbiA9IGJhc2VsaW5lVmVyc2lvbigpLT5yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcigpOyBuLS07KSB7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1Jlc3VsdCA9
IHJlc3VsdCA8PCAxOwotICAgICAgICBpZiAobmV3UmVzdWx0IDwgcmVzdWx0KQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKLSAgICAgICAg
cmVzdWx0ID0gbmV3UmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi11aW50
MzJfdCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkKLXsK
LSAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENv
dW50Rm9yUmVvcHRpbWl6YXRpb24oKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpKTsK
LX0KLQotdWludDMyX3QgQ29kZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXph
dGlvbkZyb21Mb29wKCkKLXsKLSAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQo
T3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpICogY29kZVR5
cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkpOwotfQotCi1ib29sIENvZGVCbG9jazo6c2hvdWxkUmVv
cHRpbWl6ZU5vdygpCi17Ci0gICAgcmV0dXJuIG9zckV4aXRDb3VudGVyKCkgPj0gZXhpdENvdW50
VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3Vs
ZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCi17Ci0gICAgcmV0dXJuIG9zckV4aXRDb3VudGVyKCkg
Pj0gZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOwotfQotI2Vu
ZGlmCi0KLUFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fYXJyYXlQcm9maWxlc1tpXS5ieXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlT2Zm
c2V0KQotICAgICAgICAgICAgcmV0dXJuICZtX2FycmF5UHJvZmlsZXNbaV07Ci0gICAgfQotICAg
IHJldHVybiAwOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxl
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2Rl
T2Zmc2V0KTsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmFkZEFycmF5UHJvZmlsZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0g
ICAgbV9hcnJheVByb2ZpbGVzLmFwcGVuZChBcnJheVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsK
LSAgICByZXR1cm4gJm1fYXJyYXlQcm9maWxlcy5sYXN0KCk7Ci19Ci0KLUFycmF5UHJvZmlsZSog
Q29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0g
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gYWRkQXJy
YXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1BcnJheVByb2ZpbGUqIENv
ZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYg
bG9ja2VyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBBcnJheVByb2ZpbGUqIHJl
c3VsdCA9IGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAo
cmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiBhZGRBcnJheVByb2Zp
bGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLUFycmF5UHJvZmlsZSogQ29kZUJsb2Nr
OjpnZXRPckFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBnZXRPckFkZEFy
cmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotI2lmIEVOQUJMRShERkdf
SklUKQotVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgQ29kZUJs
b2NrOjpjb2RlT3JpZ2lucygpCi17Ci0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCkt
PmNvZGVPcmlnaW5zOwotfQotCi1zaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZp
ZXJzKCkgY29uc3QKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdD
b21tb24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwotfQotCi1jb25zdCBJZGVudGlmaWVyJiBD
b2RlQmxvY2s6OmlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdAotewotICAgIHNpemVfdCB1bmxp
bmtlZElkZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsK
LSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmll
cnMpCi0gICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7Ci0g
ICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICByZXR1
cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtl
ZElkZW50aWZpZXJzXTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBDb2Rl
QmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1w
bGVzSW5Qcm9maWxlcykKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIAotICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7Ci0g
ICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOwotICAgICAgICB1
bnNpZ25lZCBudW1TYW1wbGVzID0gcHJvZmlsZS0+dG90YWxOdW1iZXJPZlNhbXBsZXMoKTsKLSAg
ICAgICAgaWYgKG51bVNhbXBsZXMgPiBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cykKLSAg
ICAgICAgICAgIG51bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgLy8g
V2UgZG9uJ3Qgd2FudCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90IHRvIGJlIGdpdmVu
IG1vcmUgd2VpZ2h0LgotICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzICs9IG51bVNh
bXBsZXM7Ci0gICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewotICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvZmlsZS0+bnVtYmVy
T2ZTYW1wbGVzKCkgfHwgcHJvZmlsZS0+bV9wcmVkaWN0aW9uICE9IFNwZWNOb25lKQotICAgICAg
ICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7Ci0gICAgICAgIHBy
b2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgIH0KLSAgICAKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlcy5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb25zKGxvY2tlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCkKLXsKLSAgICB1bnNpZ25lZCBpZ25v
cmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyhpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKQotewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJh
eVByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9hcnJheVByb2ZpbGVzW2ldLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIHRoaXMpOwotICAgIAotICAgIC8vIERvbid0IGNv
dW50IHRoZXNlIGVpdGhlciwgZm9yIHNpbWlsYXIgcmVhc29ucy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlc1tpXS51cGRhdGVJbmRleGluZ1R5cGUoKTsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKLXsKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSgpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9ucygpOwotICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKLX0KLQotYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKLXsKLSAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0
aGlzLCAiLi4uXG4iKTsKLQotICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBP
cHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCi0gICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwotICAgIAotICAgIHVuc2ln
bmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9m
U2FtcGxlc0luUHJvZmlsZXMpOwotCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewot
ICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICJQcm9maWxlIGhvdG5lc3M6ICVsZiAoJXUg
LyAldSksICVsZiAoJXUgLyAldSlcbiIsCi0gICAgICAgICAgICAoZG91YmxlKW51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAotICAg
ICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlZh
bHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCksCi0gICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKLSAgICB9Ci0K
LSAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9w
dGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCi0gICAgICAgICYmICghdG90YWxO
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmls
ZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUoKSkKLSAgICAg
ICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKSAr
IDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKLSAgICBtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlcisrOwotICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLXZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1
ZW50RXhpdFNpdGVzKCkKLXsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwotICAgIEFTU0VSVChhbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwotICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFs
dGVybmF0aXZlKCk7Ci0gICAgCi0gICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKLSAgICBjYXNlIEpJ
VENvZGU6OkRGR0pJVDogewotICAgICAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENv
ZGUtPmRmZygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaml0Q29kZS0+b3Ny
RXhpdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgREZHOjpPU1JFeGl0JiBleGl0ID0gaml0
Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1
ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsK
LSAgICAgICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhp
cyBjb2RlIHNpbmNlIHRoZSBGVEw6OkpJVENvZGU6Om9zckV4aXQKLSAgICAgICAgLy8gdmVjdG9y
IGNvbnRhaW5zIGEgdG90YWxseSBkaWZmZXJlbnQgdHlwZSwgdGhhdCBqdXN0IHNvIGhhcHBlbnMg
dG8gYmVoYXZlIGxpa2UKLSAgICAgICAgLy8gREZHOjpKSVRDb2RlOjpvc3JFeGl0LgotICAgICAg
ICBGVEw6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmZ0bCgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgRlRMOjpPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAg
ICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9j
ayk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgICAgIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVO
QUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi12b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJv
ZmlsZXMoKQotewotICAgIGRhdGFMb2coIlZhbHVlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4i
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmls
ZXMoKTsgKytpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGdldEZyb21BbGxW
YWx1ZVByb2ZpbGVzKGkpOwotICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8
IDApIHsKLSAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0x
KTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICBhcmcgPSAldTogIiwgaSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpICYm
IHByb2ZpbGUtPm1fcHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewotICAgICAgICAgICAgZGF0YUxv
Z0YoIjxlbXB0eT5cbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBkYXRhTG9nRigiXG4i
KTsKLSAgICB9Ci0gICAgZGF0YUxvZygiUmFyZUNhc2VQcm9maWxlIGZvciAiLCAqdGhpcywgIjpc
biIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlJhcmVDYXNlUHJvZmls
ZXMoKTsgKytpKSB7Ci0gICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNl
UHJvZmlsZShpKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxl
LT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwotICAgIH0KLX0KLSNlbmRp
ZiAvLyBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQotCi11bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKLSAgICBj
YXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgIHJldHVybiBMTEludDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBjYXNlIEpJ
VENvZGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgot
ICAgICAgICByZXR1cm4gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+ZnJhbWVSZWdpc3RlckNvdW50
OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLWludCBDb2RlQmxvY2s6OnN0YWNrUG9pbnRlck9mZnNldCgpCi17Ci0gICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudCgpIC0gMSkub2Zm
c2V0KCk7Ci19Ci0KLXNpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgp
Ci17Ci0gICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6Q29kZUJsb2Nr
IGJlZm9yZSBlaXRoZXIgbV92bSBvciB0aGUKLSAgICAvLyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVu
IGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hhdCB3aWxsIHJlYWxs
eQotICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlzIHZhbHVlIHdoZW4g
dGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCi0gICAgaWYgKCFtX3ZtKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICBpZiAoISptX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQpCi0gICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2Yg
YSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KLSAgICAKLSAgICAvLyBCZSBjb25zZXJ2YXRpdmU6
IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUg
dGltZS4KLSAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKLSAgICAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFyZERldmlhdGlv
bigpOwotICAgIAotICAgIC8vIEJlIHBhcmFub2lkOiBzaWxlbnRseSByZWplY3QgYm9ndXMgbXVs
dGlwaWVycy4gU2lsZW50bHkgZG9pbmcgdGhlICJ3cm9uZyIgdGhpbmcKLSAgICAvLyBoZXJlIGlz
IE9LLCBzaW5jZSB0aGlzIHdob2xlIG1ldGhvZCBpcyBqdXN0IGEgaGV1cmlzdGljLgotICAgIGlm
IChtdWx0aXBsaWVyIDwgMCB8fCBtdWx0aXBsaWVyID4gMTAwMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgZG91YmxlIGRvdWJsZVJlc3VsdCA9IG11bHRpcGxpZXIgKiBtX2luc3RydWN0
aW9ucy5zaXplKCk7Ci0gICAgCi0gICAgLy8gQmUgZXZlbiBtb3JlIHBhcmFub2lkOiBzaWxlbnRs
eSByZWplY3QgdmFsdWVzIHRoYXQgd29uJ3QgZml0IGludG8gYSBzaXplX3QuIElmCi0gICAgLy8g
dGhlIGZ1bmN0aW9uIGlzIHNvIGh1Z2UgdGhhdCB3ZSBjYW4ndCBldmVuIGZpdCBpdCBpbnRvIHZp
cnR1YWwgbWVtb3J5IHRoZW4gd2UKLSAgICAvLyBzaG91bGQgcHJvYmFibHkgaGF2ZSBzb21lIG90
aGVyIGd1YXJkcyBpbiBwbGFjZSB0byBwcmV2ZW50IHVzIGZyb20gZXZlbiBnZXR0aW5nCi0gICAg
Ly8gdG8gdGhpcyBwb2ludC4KLSAgICBpZiAoZG91YmxlUmVzdWx0ID4gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHNpemVfdD4oZG91YmxlUmVzdWx0KTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6
OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCi17Ci0gICAgSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
c0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIAotICAgIGZvciAodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7ICkg
ewotICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNC
ZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSB7Ci0jZGVmaW5lIERFRklORV9PUChjdXJP
cGNvZGUsIGxlbmd0aCkgICAgICAgIFwKLSAgICAgICAgY2FzZSBjdXJPcGNvZGU6ICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGN1ck9wY29kZSA9PSBvcGNvZGVJRCkgICAg
ICBcCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgICAgICAgXAotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoREVGSU5FX09QKQotI3VuZGVmIERF
RklORV9PUAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWND
YXN0PFN5bWJvbFRhYmxlKj4obV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwot
ICAgICAgICAgICAgYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8gcHRyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7IHB0ciAhPSBl
bmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci0+dmFsdWUudmFyT2Zmc2V0KCkg
PT0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgd29uJ3Qgd29yayBmcm9tIHRoZSBjb21waWxhdGlvbiB0aHJlYWQuCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTUzMDAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB0ci0+a2V5LmdldCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
dmlydHVhbFJlZ2lzdGVyID09IHRoaXNSZWdpc3RlcigpKQotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJ0aGlzIik7Ci0gICAgaWYgKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiYXJndW1lbnRzWyUzZF0iLCB2aXJ0dWFsUmVn
aXN0ZXIudG9Bcmd1bWVudCgpKTsKLQotICAgIHJldHVybiAiIjsKLX0KLQotVmFsdWVQcm9maWxl
KiBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9m
ZnNldCkKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRP
cGNvZGVJRChpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG9wY29kZUxlbmd0aChvcGNvZGVJRCk7Ci0gICAgcmV0dXJuIGluc3Ry
dWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgbGVuZ3RoIC0gMV0udS5wcm9maWxlOwotfQotCi12
b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQotewotICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQg
ZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KLSAgICAKLSAgICBGYXN0Qml0VmVj
dG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0
KDApOwotICAgIAotICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAhPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewotICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRG
YWlsKCk7Ci0gICAgICAgIGRhdGFMb2coIiAgICBXcm9uZyBudW1iZXIgb2YgYml0cyBpbiByZXN1
bHQhXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxu
Iik7Ci0gICAgICAgIGRhdGFMb2coIiAgICBCaXQgY291bnQ6ICIsIGxpdmVBdEhlYWQubnVtQml0
cygpLCAiXG4iKTsKLSAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICB9Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DYWxsZWVMb2NhbHM7IGktLTspIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGxpdmVBdEhlYWRbaV0pIHsKLSAgICAgICAgICAgIGJlZ2luVmFs
aWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBWYXJpYWJsZSAiLCBy
ZWcsICIgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhZC5cbiIpOwotICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7Ci0gICAgICAgICAgICBlbmRWYWxpZGF0
aW9uRGlkRmFpbCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvZGVCbG9jazo6YmVn
aW5WYWxpZGF0aW9uRGlkRmFpbCgpCi17Ci0gICAgZGF0YUxvZygiVmFsaWRhdGlvbiBmYWlsdXJl
IGluICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmVuZFZhbGlkYXRpb25EaWRGYWlsKCkKLXsKLSAgICBkYXRhTG9nKCJcbiIpOwotICAg
IGR1bXBCeXRlY29kZSgpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiVmFsaWRh
dGlvbiBmYWlsdXJlLlxuIik7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMp
Ci17Ci0gICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKLSAgICBBU1NFUlQo
bV9udW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpKQotICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2Vy
QnJlYWtwb2ludCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJs
b2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKLXsKLSAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7Ci0g
ICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVl
VG9EZWJ1Z2dlclN0ZXBwaW5nKTsKLX0KLQotUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFk
ZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgbV9yYXJlQ2FzZVBy
b2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKLSAgICByZXR1
cm4gJm1fcmFyZUNhc2VQcm9maWxlcy5sYXN0KCk7Ci19Ci0KLVJhcmVDYXNlUHJvZmlsZSogQ29k
ZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludD4o
Ci0gICAgICAgIG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwg
Ynl0ZWNvZGVPZmZzZXQsCi0gICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0
KTsKLX0KLQotdW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBSYXJlQ2FzZVByb2ZpbGUqIHBy
b2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7
Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIHJldHVybiBwcm9maWxlLT5tX2NvdW50ZXI7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgcmV0dXJuIGFyaXRo
UHJvZmlsZUZvclBDKGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldCk7Ci19
Ci0KLUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlv
biogcGMpCi17Ci0gICAgYXV0byBvcGNvZGVJRCA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNv
ZGVJRChwY1swXS51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgIGNhc2Ug
b3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmlsZSo+KCZw
Y1szXS51Lm9wZXJhbmQpOwotICAgIGNhc2Ugb3BfYml0b3I6Ci0gICAgY2FzZSBvcF9iaXRhbmQ6
Ci0gICAgY2FzZSBvcF9iaXR4b3I6Ci0gICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBvcF9tdWw6
Ci0gICAgY2FzZSBvcF9zdWI6Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzRdLnUub3BlcmFuZCk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wg
Q29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQot
ewotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gcHJvZmlsZS0+dG9va1NwZWNpYWxGYXN0UGF0aCgpOwotfQot
Ci0jaWYgRU5BQkxFKEpJVCkKLURGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJp
bGl0eUxldmVsKCkKLXsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBjb21wdXRl
Q2FwYWJpbGl0eUxldmVsKCk7Ci0gICAgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9IHJlc3VsdDsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLXZvaWQgQ29kZUJsb2NrOjppbnNlcnRC
YXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoUmVmQ291bnRlZEFycmF5
PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKQotewotICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2soKS0+aGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBieXRlY29kZU9mZnNldHMgPSB1bmxp
bmtlZENvZGVCbG9jaygpLT5vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBvZmZzZXRzTGVuZ3RoID0gYnl0ZWNvZGVPZmZzZXRzLnNp
emUoKTsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykgewotICAgICAgICAvLyBCZWNhdXNlIG9wX3By
b2ZpbGVfY29udHJvbF9mbG93IGlzIGVtaXR0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBi
YXNpYyBibG9jaywgZmluZGluZyAKLSAgICAgICAgLy8gdGhlIG5leHQgb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3cgd2lsbCBnaXZlIHVzIHRoZSB0ZXh0IHJhbmdlIG9mIGEgc2luZ2xlIGJhc2ljIGJs
b2NrLgotICAgICAgICBzaXplX3Qgc3RhcnRJZHggPSBieXRlY29kZU9mZnNldHNbaV07Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVj
dGlvbnNbc3RhcnRJZHhdLnUub3Bjb2RlKSA9PSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk7Ci0g
ICAgICAgIGludCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnNbc3RhcnRJZHgg
KyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNpY0Jsb2NrRW5kT2Zmc2V0OwotICAgICAg
ICBpZiAoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKSB7Ci0gICAgICAgICAgICBzaXplX3QgZW5kSWR4
ID0gYnl0ZWNvZGVPZmZzZXRzW2kgKyAxXTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZt
KCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNbZW5kSWR4XS51Lm9wY29k
ZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwotICAgICAgICAgICAgYmFzaWNCbG9ja0Vu
ZE9mZnNldCA9IGluc3RydWN0aW9uc1tlbmRJZHggKyAxXS51Lm9wZXJhbmQgLSAxOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IG1fc291cmNlT2Zm
c2V0ICsgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLmxlbmd0aCgpIC0gMTsgLy8g
T2Zmc2V0IGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZS4KLSAgICAgICAgICAgIGJhc2ljQmxvY2tT
dGFydE9mZnNldCA9IHN0ZDo6bWluKGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0Vu
ZE9mZnNldCk7IC8vIFNvbWUgc3RhcnQgb2Zmc2V0cyBtYXkgYmUgYXQgdGhlIGNsb3NpbmcgYnJh
Y2UsIGVuc3VyZSBpdCBpcyB0aGUgb2Zmc2V0IGJlZm9yZS4KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgYWxsb3dzIGZvciB0aGUgc2FtZSB0ZXh0dWFsIEphdmFT
Y3JpcHQgYmFzaWMgYmxvY2sgdG8gaGF2ZSBpdHMgYnl0ZWNvZGUgZW1pdHRlZCBtb3JlCi0gICAg
ICAgIC8vIHRoYW4gb25jZSBhbmQgc3RpbGwgcGxheSBuaWNlIHdpdGggdGhlIGNvbnRyb2wgZmxv
dyBwcm9maWxlci4gV2hlbiBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgaXMgbGFyZ2VyIHRoYW4gCi0g
ICAgICAgIC8vIGJhc2ljQmxvY2tFbmRPZmZzZXQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBieXRl
Y29kZSBnZW5lcmF0b3IgaGFzIGVtaXR0ZWQgY29kZSBmb3IgdGhlIHNhbWUgQVNUIG5vZGUgCi0g
ICAgICAgIC8vIG1vcmUgdGhhbiBvbmNlIChmb3IgZXhhbXBsZTogRm9ySW5Ob2RlLCBGaW5hbGx5
IGJsb2NrcyBpbiBUcnlOb2RlLCBldGMpLiBUaG91Z2ggdGhlc2UgYXJlIGRpZmZlcmVudCAKLSAg
ICAgICAgLy8gYmFzaWMgYmxvY2tzIGF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhleSBhcmUgZ2Vu
ZXJhdGVkIGZyb20gdGhlIHNhbWUgdGV4dHVhbCBiYXNpYyBibG9jayBpbiB0aGUgSmF2YVNjcmlw
dCAKLSAgICAgICAgLy8gcHJvZ3JhbS4gVGhlIGNvbmRpdGlvbjogCi0gICAgICAgIC8vIChiYXNp
Y0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0KSAKLSAgICAgICAgLy8gaXMg
ZW5jb3VudGVyZWQgd2hlbiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyBsaWVzIGFjcm9zcyB0aGUg
Ym91bmRhcnkgb2YgdGhlc2UgZHVwbGljYXRlZCBieXRlY29kZSBiYXNpYyAKLSAgICAgICAgLy8g
YmxvY2tzIGFuZCB0aGUgdGV4dHVhbCBvZmZzZXQgZ29lcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGR1
cGxpY2F0ZWQgYmxvY2sgYmFjayB0byB0aGUgYmVnaW5uaW5nLiBUaGVzZSAKLSAgICAgICAgLy8g
cmFuZ2VzIGFyZSBkdW1teSByYW5nZXMgYW5kIGFyZSBpZ25vcmVkLiBUaGUgZHVwbGljYXRlZCBi
eXRlY29kZSBiYXNpYyBibG9ja3MgcG9pbnQgdG8gdGhlIHNhbWUgCi0gICAgICAgIC8vIGludGVy
bmFsIGRhdGEgc3RydWN0dXJlLCBzbyBpZiBhbnkgb2YgdGhlbSBleGVjdXRlLCBpdCB3aWxsIHJl
Y29yZCB0aGUgc2FtZSB0ZXh0dWFsIGJhc2ljIGJsb2NrIGluIHRoZSAKLSAgICAgICAgLy8gSmF2
YVNjcmlwdCBwcm9ncmFtIGFzIGV4ZWN1dGluZy4KLSAgICAgICAgLy8gQXQgdGhlIGJ5dGVjb2Rl
IGxldmVsLCB0aGlzIHNpdHVhdGlvbiBsb29rcyBsaWtlOgotICAgICAgICAvLyBqOiBvcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdyAoZnJvbSBqLT5rLCB3ZSBoYXZlIGJhc2ljQmxvY2tFbmRPZmZzZXQg
PCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQpCi0gICAgICAgIC8vIC4uLgotICAgICAgICAvLyBrOiBv
cF9wcm9maWxlX2NvbnRyb2xfZmxvdyAod2Ugd2FudCB0byBza2lwIG92ZXIgdGhlIGotPmsgYmxv
Y2sgYW5kIHN0YXJ0IGZyZXNoIGF0IG9mZnNldCBrIGFzIHRoZSBzdGFydCBvZiBhIG5ldyBiYXNp
YyBibG9jayBrLT5tKS4KLSAgICAgICAgLy8gLi4uCi0gICAgICAgIC8vIG06IG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93Ci0gICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9j
a1N0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsgMSA8IG9mZnNl
dHNMZW5ndGgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJsb2NrcyBhdCB0
aGUgZW5kIG9mIGEgQ29kZUJsb2NrLgotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4
ICsgMV0udS5iYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmR1bW15QmFzaWNCbG9jaygpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNv
bnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tF
bmRPZmZzZXQpOwotCi0gICAgICAgIC8vIEZpbmQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBlbmNs
b3NlZCB3aXRoaW4gdGhlIHJhbmdlOiBbYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2Nr
RW5kT2Zmc2V0XQotICAgICAgICAvLyBhbmQgaW5zZXJ0IHRoZXNlIGZ1bmN0aW9ucycgc3RhcnQv
ZW5kIG9mZnNldHMgYXMgZ2FwcyBpbiB0aGUgY3VycmVudCBCYXNpY0Jsb2NrTG9jYXRpb24uCi0g
ICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gdGhlIG9yaWdpbmFsIHNvdXJj
ZSB0ZXh0IG9mIGEgSmF2YVNjcmlwdCBwcm9ncmFtLCAKLSAgICAgICAgLy8gZnVuY3Rpb24gbGl0
ZXJhbHMgZm9ybSBuZXcgYmFzaWMgYmxvY2tzIGJvdW5kYXJpZXMsIGJ1dCB0aGV5IGFyZW4ndCBy
ZXByZXNlbnRlZCAKLSAgICAgICAgLy8gaW5zaWRlIHRoZSBDb2RlQmxvY2sncyBpbnN0cnVjdGlv
biBzdHJlYW0uCi0gICAgICAgIGF1dG8gaW5zZXJ0RnVuY3Rpb25HYXBzID0gW2Jhc2ljQmxvY2tM
b2NhdGlvbiwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0XSAoY29u
c3QgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGZ1bmN0aW9uRXhlY3V0YWJsZSkg
ewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwotICAgICAgICAg
ICAgaW50IGZ1bmN0aW9uU3RhcnQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKTsKLSAgICAgICAgICAgIGludCBmdW5jdGlvbkVuZCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKTsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvblN0YXJ0ID49IGJhc2lj
QmxvY2tTdGFydE9mZnNldCAmJiBmdW5jdGlvbkVuZCA8PSBiYXNpY0Jsb2NrRW5kT2Zmc2V0KQot
ICAgICAgICAgICAgICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+aW5zZXJ0R2FwKGZ1bmN0aW9uU3Rh
cnQsIGZ1bmN0aW9uRW5kKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKGNvbnN0IFdyaXRl
QmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVjdXRhYmxlIDogbV9mdW5jdGlvbkRlY2xz
KQotICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBzKGV4ZWN1dGFibGUpOwotICAgICAgICBm
b3IgKGNvbnN0IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVjdXRhYmxlIDog
bV9mdW5jdGlvbkV4cHJzKQotICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBzKGV4ZWN1dGFi
bGUpOwotCi0gICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFzaWNCbG9ja0xv
Y2F0aW9uID0gYmFzaWNCbG9ja0xvY2F0aW9uOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShKSVQp
Ci12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBX
VEZNb3ZlKG1hcCk7Ci19Ci0KLU9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBD
KHZvaWQqIHBjKQotewotICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7Ci0gICAgICAgIGlm
IChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9wY1RvQ29kZU9yaWdpbk1hcC0+
ZmluZFBDKHBjKSkKLSAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwotICAgIH0KLQotICAg
IGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViID0gKml0ZXI7Ci0gICAgICAgIGlmIChzdHViLT5jb250YWluc1BDKHBjKSkKLSAgICAgICAg
ICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKLSAgICB9
Ci0KLSAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1faml0Q29kZS0+
ZmluZFBDKHRoaXMsIHBjKSkKLSAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0KLSAgICByZXR1
cm4gTnVsbG9wdDsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi1PcHRpb25hbDx1bnNpZ25l
ZD4gQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNvZGVPZmZz
ZXQ7Ci0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOwotICAg
IGlmIChqaXRUeXBlID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGJ5dGVj
b2RlT2Zmc2V0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUlu
ZGV4LmJpdHMoKSk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaW5zdHJ1Y3Rpb24gLSBpbnN0
cnVjdGlvbnMoKS5iZWdpbigpOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmIChqaXRUeXBlID09IEpJ
VENvZGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVENvZGU6OkZUTEpJVCkgewotI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKGNhbGxT
aXRlSW5kZXgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBjb2RlT3JpZ2luKGNhbGxT
aXRlSW5kZXgpOwotICAgICAgICBieXRlY29kZU9mZnNldCA9IG9yaWdpbi5ieXRlY29kZUluZGV4
OwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIHJldHVybiBieXRlY29kZU9mZnNldDsKLX0KLQotaW50MzJfdCBDb2RlQmxv
Y2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVu
bGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIE1peGVkVHJpU3Rh
dGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBGYWxzZVRyaVN0YXRlOgot
ICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRydWVUcmlTdGF0ZToKLSAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiB0aHJlc2hvbGQ7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpqaXRBZnRl
cldhcm1VcCgpCi17Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRo
aXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCi17Ci0gICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNo
b2xkRm9ySklUU29vbigpKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElD
U3RhdHMoKQotewotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGRvdWJsZSBudW1BZGRz
ID0gMC4wOwotICAgIGRvdWJsZSB0b3RhbEFkZFNpemUgPSAwLjA7Ci0gICAgZG91YmxlIG51bU11
bHMgPSAwLjA7Ci0gICAgZG91YmxlIHRvdGFsTXVsU2l6ZSA9IDAuMDsKLSAgICBkb3VibGUgbnVt
TmVncyA9IDAuMDsKLSAgICBkb3VibGUgdG90YWxOZWdTaXplID0gMC4wOwotICAgIGRvdWJsZSBu
dW1TdWJzID0gMC4wOwotICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7Ci0KLSAgICBhdXRv
IGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBmb3IgKEpJ
VEFkZElDKiBhZGRJQyA6IGNvZGVCbG9jay0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgIG51bUFk
ZHMrKzsKLSAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogY29kZUJsb2NrLT5tX211
bElDcykgewotICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgdG90YWxNdWxTaXpl
ICs9IG11bElDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChKSVROZWdJ
QyogbmVnSUMgOiBjb2RlQmxvY2stPm1fbmVnSUNzKSB7Ci0gICAgICAgICAgICBudW1OZWdzKys7
Ci0gICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVCbG9jay0+bV9zdWJJQ3Mp
IHsKLSAgICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBz
dWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9OwotICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7Ci0KLSAgICBkYXRh
TG9nKCJOdW0gQWRkczogIiwgbnVtQWRkcywgIlxuIik7Ci0gICAgZGF0YUxvZygiVG90YWwgQWRk
IHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsQWRkU2l6ZSwgIlxuIik7Ci0gICAgZGF0YUxvZygiQXZl
cmFnZSBBZGQgc2l6ZTogIiwgdG90YWxBZGRTaXplIC8gbnVtQWRkcywgIlxuIik7Ci0gICAgZGF0
YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJOdW0gTXVsczogIiwgbnVtTXVscywgIlxuIik7Ci0g
ICAgZGF0YUxvZygiVG90YWwgTXVsIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsTXVsU2l6ZSwgIlxu
Iik7Ci0gICAgZGF0YUxvZygiQXZlcmFnZSBNdWwgc2l6ZTogIiwgdG90YWxNdWxTaXplIC8gbnVt
TXVscywgIlxuIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJOdW0gTmVnczog
IiwgbnVtTmVncywgIlxuIik7Ci0gICAgZGF0YUxvZygiVG90YWwgTmVnIHNpemUgaW4gYnl0ZXM6
ICIsIHRvdGFsTmVnU2l6ZSwgIlxuIik7Ci0gICAgZGF0YUxvZygiQXZlcmFnZSBOZWcgc2l6ZTog
IiwgdG90YWxOZWdTaXplIC8gbnVtTmVncywgIlxuIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAg
ICBkYXRhTG9nKCJOdW0gU3ViczogIiwgbnVtU3VicywgIlxuIik7Ci0gICAgZGF0YUxvZygiVG90
YWwgU3ViIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsU3ViU2l6ZSwgIlxuIik7Ci0gICAgZGF0YUxv
ZygiQXZlcmFnZSBTdWIgc2l6ZTogIiwgdG90YWxTdWJTaXplIC8gbnVtU3VicywgIlxuIik7Ci0K
LSAgICBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0jZW5kaWYKLX0KLQot
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93
KCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBhbmFs
eXNpcyA9IHN0ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPih0aGlzKTsK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
ICAgIGlmICghbV9saXZlbmVzc0FuYWx5c2lzKQotICAgICAgICAgICAgbV9saXZlbmVzc0FuYWx5
c2lzID0gV1RGTW92ZShhbmFseXNpcyk7Ci0gICAgICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5
c2lzOwotICAgIH0KLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2su
aAkocmV2aXNpb24gMjA4MjI0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6MjA4MjI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01v
ZHVsZVByb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hA
dXdhdGVybG9vLmNhPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJC
eVZhbEluZm8uaCIKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAi
Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZz
ZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIK
KyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgor
I2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4ZWN1
dGlvbkNvdW50ZXIuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5jbHVk
ZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNs
dWRlICJJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRN
YXRoSUNGb3J3YXJkcy5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiTExJbnRDYWxsTGlu
a0luZm8uaCIKKyNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaCIKKyNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgorI2luY2x1
ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJKZXR0
aXNvblJlYXNvbi5oIgorI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAi
UHV0UHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgor
I2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEV4
ZWNTdGF0ZTsKK2NsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CitjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKK2NsYXNzIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK2VudW0gY2xhc3MgQWNjZXNzVHlw
ZSA6IGludDhfdDsKKworc3RydWN0IEFyaXRoUHJvZmlsZTsKKwordHlwZWRlZiBIYXNoTWFwPENv
ZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4g
U3R1YkluZm9NYXA7CisKK2VudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRp
bWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKKworY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBmcmllbmQgY2xhc3Mg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworICAgIGNsYXNzIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisg
ICAgY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIgeworICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImKSBvdmVycmlkZTsKKyAgICB9OworCitwdWJsaWM6CisgICAgZW51bSBDb3B5UGFyc2VkQmxv
Y2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayhWTSos
IFN0cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CisgICAg
Q29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmpl
Y3QqKTsKKyNlbmRpZgorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRC
bG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBK
U1Njb3BlKik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxP
YmplY3QqKTsKKyNlbmRpZgorCisgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2ds
b2JhbE9iamVjdDsKKworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2so
KTsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLmdldCgpOyB9CisKKyAgICBDU3RyaW5nIGluZmVycmVkTmFt
ZSgpIGNvbnN0OworICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0OworICAgIGJvb2wgaGFz
SGFzaCgpIGNvbnN0OworICAgIGJvb2wgaXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0OworICAg
IENTdHJpbmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0OworICAgIENTdHJpbmcgc291
cmNlQ29kZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5vdCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJjZSB3
ZSBwYXJzZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3MgbGlrZSBwcmVmaXggdGhlIHNvdXJjZSBmb3Ig
YSBmdW5jdGlvbiB3aXRoIGEgcmVpZmllZCBzaWduYXR1cmUuCisgICAgQ1N0cmluZyBzb3VyY2VD
b2RlT25PbmVMaW5lKCkgY29uc3Q7IC8vIEFzIHNvdXJjZUNvZGVGb3JUb29scygpLCBidXQgcmVw
bGFjZXMgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgIHZvaWQg
ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYsIEpJVENvZGU6OkpJVFR5cGUpIGNvbnN0
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7
IH0KKyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKKworICAgIGludCBu
dW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQorCisg
ICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVy
czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQorCisgICAg
Q29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVC
bG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CisgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShW
TSYsIENvZGVCbG9jayopOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgVmVj
dG9yPENvZGVCbG9jayosIDQ+IGNvZGVCbG9ja3M7CisgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5k
KHRoaXMpOworCisgICAgICAgIHdoaWxlICghY29kZUJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIENvZGVCbG9jayogY3VycmVudENvZGVCbG9jayA9IGNvZGVCbG9ja3MudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgIGYoY3VycmVudENvZGVCbG9jayk7CisKKyAgICAgICAgICAgIGlmIChD
b2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkK
KyAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChhbHRlcm5hdGl2ZSk7CisgICAgICAg
ICAgICBpZiAoQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrID0gY3VycmVudENvZGVCbG9jay0+c3Bl
Y2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFw
cGVuZChvc3JFbnRyeUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsK
KyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7Cisg
ICAgCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZVZlcnNpb24oKTsKKworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWts
eShTbG90VmlzaXRvciYpOworICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQo
KTsKKworICAgIHZvaWQgZHVtcFNvdXJjZSgpOworICAgIHZvaWQgZHVtcFNvdXJjZShQcmludFN0
cmVhbSYpOworCisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoKTsKKyAgICB2b2lkIGR1bXBCeXRlY29k
ZShQcmludFN0cmVhbSYpOworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmludFN0
cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb25zdCBTdHViSW5mb01h
cCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZv
TWFwKCkpOworICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50U3RyZWFtJik7Cisg
ICAgdm9pZCBwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiop
OworICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKKworICAgIHZvaWQgZHVtcE1hdGhJ
Q1N0YXRzKCk7CisKKyAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
dHJpY3RNb2RlOyB9CisgICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0
cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9CisKKyAgICBpbmxpbmUg
Ym9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9pc1N0cmljdE1vZGUpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwo
KTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBi
b29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOworICAgIH0KKworICAgIEhhbmRsZXJJbmZvKiBoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFu
ZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgSGFuZGxlckluZm8qIGhh
bmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVy
OjpBbnlIYW5kbGVyKTsKKyAgICB2b2lkIHJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0
ZShDYWxsU2l0ZUluZGV4KTsKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlckZv
ckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lkIGV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQm
IGRpdm90LAorICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWdu
ZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworCisgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7CisKKyAg
ICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5m
b01hcCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1
bHQpOworICAgIAorICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDYWxsTGlu
a0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOworCisgICAgdm9pZCBnZXRCeVZhbElu
Zm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsK
KyAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCk7CisgICAgCisj
aWYgRU5BQkxFKEpJVCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNz
VHlwZSk7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSopOworICAgIEpJ
VE11bElDKiBhZGRKSVRNdWxJQyhBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEFyaXRoUHJv
ZmlsZSopOworICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVn
aW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CisgICAgQmFnPFN0cnVjdHVyZVN0
dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQo
KTsgfQorICAgIAorICAgIC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1
bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0byBnZXQgb25lCisgICAgLy8gc3R1YiBpbmZv
LgorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7CisKKyAg
ICBCeVZhbEluZm8qIGFkZEJ5VmFsSW5mbygpOworCisgICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxs
TGlua0luZm8oKTsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZv
c0JlZ2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KKyAgICBCYWc8Q2Fs
bExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvcy5lbmQoKTsgfQorCisgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1
c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQorICAgIC8v
IHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRv
IHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CisgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0lu
Zm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgorICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKKyAgICAKKyAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0ZW1w
dCBjb21waWxpbmcgc29tZXRoaW5nIHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQorICAg
IC8vIHRoZSBiYXNlbGluZSBKSVQgd291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywgYnV0
IGluc3RlYWQgaXQgd291bGQgcHV0IGl0cyBkYXRhIGludG8KKyAgICAvLyBhIG5ld2x5IGNyZWF0
ZWQgSklUQ29kZSwgd2hpY2ggY291bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBKSVQg
Y29tcGlsYXRpb24uIFRoZW4gd2UKKyAgICAvLyB3b3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2Yg
dGhpcyBzaWxseSBmdW5jdGlvbi4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1OTA2MQorICAgIHZvaWQgcmVzZXRKSVREYXRhKCk7CisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKworICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOworCisj
aWYgRU5BQkxFKEpJVCkKKyAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKKworICAgIHZvaWQgc2V0SklUQ29k
ZU1hcChzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisgICAg
eworICAgICAgICBtX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOworICAgIH0KKyAg
ICBDb21wYWN0SklUQ29kZU1hcCogaml0Q29kZU1hcCgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9qaXRDb2RlTWFwLmdldCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjbGVhckxM
SW50R2V0QnlJZENhY2hlKEluc3RydWN0aW9uKik7CisKKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1cm5B
ZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SW5zdHJ1Y3Rpb24qPihyZXR1cm5BZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7
CisgICAgfQorCisgICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOworICAg
IHR5cGVkZWYgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlv
bnM7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlv
bj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgY29uc3Qg
UmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cnVjdGlvbnM7IH0KKworICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNp
emUoKTsKKworICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CisKKyAgICB1bnNpZ25lZCBp
bnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9
CisKKyAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSkKKyAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7CisgICAgCisgICAgdm9p
ZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWQoY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhp
cyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNv
bWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorICAgICAgICBt
X2ppdENvZGUgPSBjb2RlOworICAgIH0KKyAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGppdENvZGVPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdENvZGUpOyB9Cisg
ICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEpJVENv
ZGUqIGppdENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOworICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIHJlc3VsdCA9IEpJVENvZGU6OmppdFR5cGVG
b3Ioaml0Q29kZSk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOyAvLyBUaGlzIHByb2Jh
Ymx5IGlzbid0IG5lZWRlZC4gT2ggd2VsbCwgcGFyYW5vaWEgaXMgZ29vZC4KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQ7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOworCisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlM
ZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOworICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUpOyB9
CisKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlw
ZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUg
dHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCisjZW5kaWYKKworICAgIHZvaWQgamV0dGlzb24o
UHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291bnRS
ZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsKKyAgICAKKyAgICBF
eGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4
ZWN1dGFibGUuZ2V0KCk7IH0KKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lclNjcmlwdEV4ZWN1
dGFibGUoKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3duZXJF
eGVjdXRhYmxlLmdldCgpKTsgfQorCisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsg
fQorCisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3Rl
cikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQorCisgICAg
Ym9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZhbCgp
OyB9CisKKyAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkgfHwg
IXNjb3BlUmVnaXN0ZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgbV9zY29wZVJlZ2lzdGVyID0gc2Nv
cGVSZWdpc3RlcjsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOworICAgIH0KKyAg
ICAKKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5cGUpOworICAgIH0KKworICAgIFB1dFByb3Bl
cnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dEJ5SWRFdmFsOworICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkOworICAgIH0KKworICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7IH0KKworICAgIHNp
emVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQorICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+anVtcFRhcmdldChpbmRleCk7IH0K
KworICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKKworICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX251bVBhcmFtZXRlcnMgPj0gMCk7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVy
cykpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOworICAg
IH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgpCisgICAgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZtX2Fy
Z3VtZW50VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dC0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1
ZVByb2ZpbGVzLnNpemUoKTsgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGludCBp
bmRleCkgeyByZXR1cm4gJm1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KKyAgICBWYWx1ZVByb2Zp
bGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Cisg
ICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgfQorCisg
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKTsKKyAgICB9CisgICAgVmFsdWVQcm9maWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9maWxl
cyh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9y
QXJndW1lbnQoaW5kZXgpOworICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlKGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQorCisgICAgUmFyZUNhc2VQcm9m
aWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmlsZXMu
c2l6ZSgpOyB9CisgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmls
ZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIGJvb2wg
bGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9u
czo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKKyAgICB9CisKKyAgICBib29s
IGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIGlm
ICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6
OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7CisgICAgfQorCisgICAgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwor
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKKworICAg
IGJvb2wgY291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCk7CisKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
UHJvZmlsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgQXJyYXlQcm9maWxlVmVjdG9yJiBhcnJheVBy
b2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzOyB9CisgICAgQXJyYXlQcm9maWxlKiBh
ZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJh
eVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAg
QXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0T3JB
ZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgLy8gRXhjZXB0
aW9uIGhhbmRsaW5nIHN1cHBvcnQKKworICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnMuc2l6ZSgpIDogMDsgfQorICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVy
KGludCBpbmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBib29sIGhhc0V4cHJlc3Np
b25JbmZvKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0K
KworI2lmIEVOQUJMRShERkdfSklUKQorICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4mIGNvZGVPcmlnaW5zKCk7CisgICAgCisgICAgLy8gSGF2aW5nIGNvZGUg
b3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KKyAgICBi
b29sIGhhc0NvZGVPcmlnaW5zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wgY2FuR2V0
Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFoYXND
b2RlT3JpZ2lucygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
aW5kZXguYml0cygpIDwgY29kZU9yaWdpbnMoKS5zaXplKCk7CisgICAgfQorCisgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCisgICAgeworICAgICAgICByZXR1
cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCldOworICAgIH0KKworICAgIGJvb2wgYWRkRnJl
cXVlbnRFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCisgICAgewor
ICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CisgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBt
X2V4aXRQcm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOworICAgIH0KKworICAgIGJvb2wg
aGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBERkc6
OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOworICAgIH0KKyAgICBib29sIGhh
c0V4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJl
dHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOworICAgIH0KKworICAgIERGRzo6RXhpdFBy
b2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQorCisgICAgQ29t
cHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVz
OworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgIC8vIENvbnN0YW50IFBv
b2wKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBu
dW1iZXJPZkRGR0lkZW50aWZpZXJzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZERkdJZGVudGlm
aWVycygpIGNvbnN0OworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4
KSBjb25zdDsKKyNlbHNlCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyB9CisgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsgfQorI2VuZGlmCisKKyAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyczsgfQorICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgp
OworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93
bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9i
amVjdC0+dm0oKSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudExhemls
eSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJz
LnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQorICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJz
W2luZGV4XS5nZXQoKTsgfQorICAgIAorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KKworICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
bV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOworICAgIH0KKyAgICB1bnNpZ25lZCBhZGRD
b25zdGFudEJ1ZmZlcihjb25zdCBWZWN0b3I8SlNWYWx1ZT4mIGJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKKyAgICAgICAgbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBzaXpl
OworICAgIH0KKworICAgIFZlY3RvcjxKU1ZhbHVlPiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rvcih1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAg
ICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9Cisg
ICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gY29uc3RhbnRCdWZmZXJBc1ZlY3RvcihpbmRleCkuZGF0YSgpOworICAgIH0KKwor
ICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiAmbV92bS0+aGVhcDsgfQorICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsg
fQorCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsKKwor
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpCisgICAgewor
ICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICAgICAgaWYgKCEhbV9saXZlbmVzc0FuYWx5c2lzKQorICAgICAgICAgICAgICAg
IHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBs
aXZlbmVzc0FuYWx5c2lzU2xvdygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCk7
CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVt
cFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dp
dGNoSnVtcFRhYmxlcy5hcHBlbmQoU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9Cisg
ICAgdm9pZCBjbGVhclN3aXRjaEp1bXBUYWJsZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jh
cmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgU3RyaW5nSnVtcFRh
YmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJpbmdK
dW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
bGFzdCgpOyB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIEV2YWxD
b2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQorCisgICAgZW51bSBTaHJpbmtN
b2RlIHsKKyAgICAgICAgLy8gU2hyaW5rIHByaW9yIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
IHRoYXQgbWF5IHBvaW50IGRpcmVjdGx5IGludG8gdmVjdG9ycy4KKyAgICAgICAgRWFybHlTaHJp
bmssCisKKyAgICAgICAgLy8gU2hyaW5rIGFmdGVyIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlLCBh
bmQgYWZ0ZXIgcG9zc2libHkgY3JlYXRpbmcgbmV3IHZlY3RvcnMKKyAgICAgICAgLy8gYW5kIGFw
cGVuZGluZyB0byBvdGhlcnMuIEF0IHRoaXMgdGltZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJpbmsg
Y2VydGFpbiB2ZWN0b3JzCisgICAgICAgIC8vIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5lcmF0
ZWQgbWFjaGluZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGVtIGRpcmVjdGx5LgorICAgICAgICBM
YXRlU2hyaW5rCisgICAgfTsKKyAgICB2b2lkIHNocmlua1RvRml0KFNocmlua01vZGUpOworCisg
ICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIEpJVHRpbmcga2lja3MgaW4sIGlu
IGEgbWl4ZWQgbW9kZQorICAgIC8vIGV4ZWN1dGlvbiB3b3JsZC4KKworICAgIGJvb2wgY2hlY2tJ
ZkpJVFRocmVzaG9sZFJlYWNoZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCisgICAgeworICAgICAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICB9CisKKyAgICBpbnQzMl90IHRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisgICAgdm9pZCBqaXRBZnRlcldhcm1V
cCgpOworICAgIHZvaWQgaml0U29vbigpOworCisgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgfQorCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cnVjdHVyZSosIEJhZzxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAm
IGxsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAoKSB7IHJldHVybiBtX2xsaW50R2V0QnlJZFdhdGNo
cG9pbnRNYXA7IH0KKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVy
ZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMKKyAgICAvLyBjb250cm9scyBib3RoIHdoZW4g
dGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKKyAgICAvLyBl
bnRyeSBoYXBwZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRo
ZSByZXR1cm4KKyAgICAvLyB0cmlnZ2VyLiBJbiBlaXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRpdGlv
biB0byBtX2ppdEV4ZWN1dGVDb3VudGVyCisgICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBub24t
bmVnYXRpdmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzCisgICAgLy8gaW52b2tlZC4gVGhp
cyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcworICAg
IC8vIGFscmVhZHkgYmVlbiBvcHRpbWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5zIGEg
Q29kZUJsb2NrCisgICAgLy8gdGhhdCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdoZXIgdGllciBK
SVQgdGhhbiB0aGlzIG9uZSkuIEluIHRoZQorICAgIC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJpZ2dl
ciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcworICAgIC8vIChvciBoYXMg
YWxyZWFkeSBzdWNjZWVkZWQgaW4gdGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0bwor
ICAgIC8vIHJlZGlyZWN0IHByb2dyYW0gZmxvdyBpbnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4KKwor
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRpbWl6
YXRpb24gdHJpZ2dlcnMsCisgICAgLy8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0
IHdoaWNoIHdlIGRlZmluZSB0aGUgaGV1cmlzdGljcworICAgIC8vIGZvciBob3cgbXVjaCB3YXJt
LXVwIGlzIG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24KKyAgICAvLyB0cmln
Z2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCksCisgICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0
cnVjdG9yLgorCisgICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZh
aWx1cmVzLCB3ZSB0cmlnZ2VyIGEKKyAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGlt
ZSwgd2UgaW5jcmVhc2UgdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgLy8gdG8gYXZvaWQg
dGhyYXNoaW5nLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyKCkgY29uc3Q7CisgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7Cisj
aWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7IH0KKyAgICBzdGF0
aWMgc2l6ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKKyAgICBzaXplX3QgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CisKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCk7CisKKyAgICBpbnQzMl90IGNvZGVUeXBl
VGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0OworCisgICAgaW50MzJfdCBhZGp1c3RlZENvdW50
ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOworCisgICAgaW50MzJfdCogYWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2ppdEV4ZWN1
dGVDb3VudGVyLm1fY291bnRlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXIsIG1fY291bnRlcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
RXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciwgbV90b3RhbENvdW50KTsgfQorCisgICAgY29uc3QgQmFzZWxp
bmVFeGVjdXRpb25Db3VudGVyJiBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aml0RXhlY3V0ZUNvdW50ZXI7IH0KKworICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9CisKKyAg
ICAvLyBDaGVjayBpZiB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVk
LCBhbmQgaWYgbm90LAorICAgIC8vIGFkanVzdCB0aGUgaGV1cmlzdGljcyBhY2NvcmRpbmdseS4g
UmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgaGFzCisgICAgLy8gYmVlbiByZWFjaGVkLgor
ICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKTsKKworICAgIC8v
IENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
LiBUaGlzIGlzCisgICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2Vy
cyBhcmUgdHlwaWNhbGx5IG1vcmUKKyAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFz
ZWxpbmUgY29kZS4KKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKworICAgIC8v
IENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4g
Tm90ZSB0aGF0CisgICAgLy8gb3B0aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJv
dWdobHkgMl4yOSBpbnZvY2F0aW9ucywKKyAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFudCB0
byBkZWxheSB0aGF0IGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMKKyAgICAvLyBpcyBjYWxsZWQg
aWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisgICAg
Ly8gdGhlIGZ1dHVyZSBhcyB3ZWxsLgorICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKworICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRz
IHN0YXJ0aW5nIHN0YXRlLAorICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBiZWZv
cmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAvLyBmaXJlcy4gVGhpcyBpcyBj
YWxsZWQgaW4gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4gSXQgYWxzbworICAgIC8vIG1ha2Vz
IHNlbnNlIHRvIGNhbGwgdGhpcyBpZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0Cisg
ICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28gdGhlIHZhbHVlIG9mIHRo
ZSBleGVjdXRlCisgICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxz
byBhdmFpbGFibGUgZGlyZWN0bHkuCisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisK
KyAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmly
ZSBvbmx5IGFmdGVyCisgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICB2b2lkIG9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1p
emF0aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKKyAgICAvLyBub3QgbmVjZXNzYXJpbHkg
dGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgorICAgIC8vIHN1
Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMgYXJl
CisgICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkgYWZm
ZWN0cyBjYWxsCisgICAgLy8gZnJhbWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlzIENv
ZGVCbG9jay4gVGhlIHZhbHVlIGhlcmUKKyAgICAvLyBpcyB0dW5lZCB0byBzdHJpa2UgYSBiYWxh
bmNlIGJldHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVudHJ5CisgICAgLy8gKHdoaWNoIGlzIHRvbyBo
aWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdlIHRvCisgICAgLy8gdHJp
Z2dlciBPU1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxpbmUK
KyAgICAvLyBjb2RlICh3aGljaCBpcyBoaWdoIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vzc2Fy
aWx5IHdhbnQgdG8KKyAgICAvLyBoYXZlIGEgZnVsbCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBm
b3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKKyAgICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCkgaXMgZm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMKKyAgICAvLyB3aXRoIGxv
b3BzLiBDb25zaWRlciB0aGF0IHRoZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUKKyAg
ICAvLyByZWN1cnNpdmUgZnVuY3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2Yg
Ti4gVGhlIHRvcAorICAgIC8vIG9uZSB0cmlnZ2VycyBvcHRpbWl6YXRpb24sIGFuZCB0aGVuIHJl
dHVybnMsIGFuZCB0aGVuIGFsbCBvZgorICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBkb24n
dCB3YW50IG9wdGltaXphdGlvbiB0byBiZSB0cmlnZ2VyZWQgb24KKyAgICAvLyBlYWNoIHJldHVy
biwgYXMgdGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQorICAg
IC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVj
b21lcyBob3QKKyAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KKyAgICB2b2lkIG9wdGltaXpl
U29vbigpOworCisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCk7CisKKyAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7CisgICAgCisgICAgdWludDMyX3Qgb3NyRXhpdENv
dW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9CisKKyAgICB2b2lkIGNv
dW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9CisKKyAgICB1aW50MzJfdCogYWRk
cmVzc09mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiAmbV9vc3JFeGl0Q291bnRlcjsgfQorCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9vc3JFeGl0Q291bnRlcik7IH0KKworICAgIHVpbnQz
Ml90IGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQp
OworICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7Cisg
ICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgp
OworICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpOworICAgIGJvb2wgc2hvdWxkUmVvcHRp
bWl6ZUZyb21Mb29wTm93KCk7CisKKyAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOworICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9w
dHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKKyAgICAKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lz
dGVycy5nZXQoKTsgfQorI2Vsc2UgLy8gTm8gSklUCisgICAgc3RhdGljIHVuc2lnbmVkIG51bWJl
ck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9CisgICAg
c3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkgeyByZXR1cm4gMDsgfTsKKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7IH0K
KyAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQorI2VuZGlm
CisKKyAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgdm9pZCB1cGRhdGVBbGxWYWx1
ZVByb2ZpbGVQcmVkaWN0aW9ucygpOworICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9u
cygpOworICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKworICAgIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudCgpOworICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQoKTsKKworICAg
IGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQg
Y29sdW1uKTsKKworICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorCisgICAgdm9pZCBhZGRCcmVha3Bv
aW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQo
dW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1CcmVh
a3BvaW50cyA+PSBudW1CcmVha3BvaW50cyk7CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgLT0g
bnVtQnJlYWtwb2ludHM7CisgICAgfQorCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAgICAg
ICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAorICAg
IH07CisgICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKKworICAgIHZvaWQg
Y2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCkKKyAgICB7CisgICAgICAgIG1fc3RlcHBpbmdNb2RlID0g
U3RlcHBpbmdNb2RlRGlzYWJsZWQ7CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgPSAwOworICAg
IH0KKworICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7
IH0KKyAgICAKKyAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2
YXRlLgorCisgICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOworICAgIGludCBtX251bVZhcnM7Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVzcG9u
c2liaWxpdHkgb2YgYW55b25lIGRvaW5nIGFueQorICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcgdG8g
aG9sZCB0aGUgbG9jazoKKyAgICAvLworICAgIC8vIC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUgY2Fj
aGUgaW4gdGhpcyBjb2RlIGJsb2NrLgorICAgIC8vCisgICAgLy8gLSBRdWVyaW5nIGFueSBpbmxp
bmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4KKyAg
ICAvLyAgIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLworICAgIC8vIEFkZGl0aW9uYWxseSwgaXQn
cyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hlIG9uIHRoZSBtYWluCisgICAg
Ly8gdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0aGUg
aW5saW5lIGNhY2hlIHdpdGhvdXQKKyAgICAvLyBsb2NraW5nLiBUaGlzIGlzIGNydWNpYWwgc2lu
Y2UgZXhlY3V0aW5nIHRoZSBpbmxpbmUgY2FjaGUgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyAicXVl
cnlpbmciIGl0LgorICAgIC8vCisgICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVz
IGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cworICAgIC8vIHdpdGhvdXQg
aG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1
bnRpbCBhbnkKKyAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdo
YXQgdGhleSdyZSBkb2luZy4KKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsK
KworICAgIEF0b21pYzxib29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKKworICAgIGJv
b2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhl
IEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKworI2lmIEVOQUJMRShKSVQpCisgICAgdW5zaWdu
ZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCisj
ZW5kaWYKKworICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkIDogMTsgLy8g
SW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCisKKyAgICBib29sIG1fZGlkRmFpbEpJ
VENvbXBpbGF0aW9uIDogMTsKKyAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsK
KyAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7CisgICAgYm9vbCBtX2lzQ29u
c3RydWN0b3IgOiAxOworICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2lnbmVk
IG1fY29kZVR5cGUgOiAyOyAvLyBDb2RlVHlwZQorCisgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBm
b3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNu
J3QKKyAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMgbmFt
ZXNwYWNlcy4KKyAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKworICAgIHN0cnVj
dCBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1Ymxp
YzoKKyAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOworCisg
ICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKKyAgICAgICAg
VmVjdG9yPFZlY3RvcjxKU1ZhbHVlPj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAgLy8g
SnVtcCBUYWJsZXMKKyAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1w
VGFibGVzOworICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisKKyAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7CisgICAg
fTsKKworICAgIHZvaWQgY2xlYXJFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAgICBp
ZiAobV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoY29u
c3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7IC8vIFdlIG1heSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFuIGlu
bGluZWQgY2FsbCBmcmFtZS4KKyAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cy5hcHBlbmQoaGFuZGxlcik7CisgICAgfQorCisgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsK
KworI2lmIEVOQUJMRShKSVQpCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmluYWxp
emVMTEludElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGlu
ZUNhY2hlcygpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgdm9pZCB0YWxseUZyZXF1ZW50
RXhpdFNpdGVzKCk7CisjZWxzZQorICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKKwor
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAg
ICAKKyAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CisgICAgCisg
ICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSk7CisgICAg
CisgICAgZG91YmxlIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKKworICAg
IHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBs
ZXNJblByb2ZpbGVzKTsKKworICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7
CisKKyAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBt
X2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52
bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCisgICAg
ICAgIFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBj
b25zdCBJbnN0cnVjdGlvbiomLAorICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5m
b01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOworCisg
ICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0OworICAgIENTdHJpbmcgY29uc3Rh
bnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRTdHJl
YW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0
IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3Rh
dGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsK
KyAgICB2b2lkIHByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24sIGNv
bnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhl
Y1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomKTsKKyAgICB2b2lkIHBy
aW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0
aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOworICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBD
YWNoZXMsIERvbnREdW1wQ2FjaGVzIH07CisgICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVh
bSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3Qg
Y2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0
IENhbGxMaW5rSW5mb01hcCYpOworICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0m
LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNo
YXIqIG9wKTsKKyAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwg
aW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOworICAgIHZvaWQgcHJpbnRMb2NhdGlv
bkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0
cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludExvY2F0aW9uT3BBbmRS
ZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNv
bnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7CisKKyAg
ICB2b2lkIGJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQ
cm9maWxpbmcpOworICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBk
dW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0m
LCBBcml0aFByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKworICAgIGJvb2wg
c2hvdWxkVmlzaXRTdHJvbmdseSgpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtS
ZWZlcmVuY2UoKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKTsKKyAgICAK
KyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBk
ZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYpOworICAgICAgICAKKyAgICB2b2lkIHN0cm9u
Z2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0T1NSRXhp
dFRhcmdldHMoU2xvdFZpc2l0b3ImKTsKKworICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZVNpbmNlQ3JlYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAorICAgICAgICAgICAgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2NyZWF0aW9uVGltZSk7CisgICAgfQor
CisgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJhcmVEYXRhPigpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJp
ZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mKTsK
KworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7Cisg
ICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIG1f
ZGVidWdnZXJSZXF1ZXN0czsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgbV9zdGVw
cGluZ01vZGUgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMw
OworICAgICAgICB9OworICAgIH07CisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBt
X293bmVyRXhlY3V0YWJsZTsKKyAgICBWTSogbV92bTsKKworICAgIFJlZkNvdW50ZWRBcnJheTxJ
bnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1Jl
Z2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CisgICAgbXV0YWJs
ZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKworICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9z
b3VyY2U7CisgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9maXJz
dExpbmVDb2x1bW5PZmZzZXQ7CisKKyAgICBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0lu
Zm8+IG1fbGxpbnRDYWxsTGlua0luZm9zOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENh
bGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2lu
Y29taW5nTExJbnRDYWxsczsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRC
eUlkV2F0Y2hwb2ludE1hcDsKKyAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOworI2lmIEVO
QUJMRShKSVQpCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2Nh
bGxlZVNhdmVSZWdpc3RlcnM7CisgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZv
czsKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3Vi
SUNzOworICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKKyAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5m
bywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwor
ICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRp
bmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOworI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2pp
dENvZGVNYXA7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gVGhpcyBpcyByZWxldmFudCB0
byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxv
Y2sKKyAgICAvLyBmb3IgREZHIGNvZGUgYmxvY2tzLgorICAgIERGRzo6RXhpdFByb2ZpbGUgbV9l
eGl0UHJvZmlsZTsKKyAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIg
bV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7CisjZW5kaWYKKyAgICBSZWZDb3VudGVkQXJyYXk8
VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAgICBSZWZDb3VudGVkQXJy
YXk8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CisgICAgU2VnbWVudGVkVmVjdG9yPFJh
cmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVzOworICAgIFJlZkNvdW50ZWRBcnJh
eTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzOworICAg
IEFycmF5UHJvZmlsZVZlY3RvciBtX2FycmF5UHJvZmlsZXM7CisgICAgUmVmQ291bnRlZEFycmF5
PE9iamVjdEFsbG9jYXRpb25Qcm9maWxlPiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlczsKKwor
ICAgIC8vIENvbnN0YW50IFBvb2wKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIp
ID09IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVf
c2l6ZV9hc19Xcml0ZUJhcnJpZXJfVW5rbm93bik7CisgICAgLy8gVE9ETzogVGhpcyBjb3VsZCBq
dXN0IGJlIGEgcG9pbnRlciB0byBtX3VubGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBE
RkcgbXV0YXRlcworICAgIC8vIGl0LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCisg
ICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAg
ICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9u
RXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVC
YXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKKworICAgIFdyaXRl
QmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgCisgICAgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKworICAgIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOworICAgIHVpbnQzMl90IG1fb3NyRXhpdENv
dW50ZXI7CisgICAgdWludDE2X3QgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7CisgICAgdWlu
dDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKworICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVhdGlvblRpbWU7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzQW5hbHlzaXM7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CisKKyAgICBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKK307CisKKy8vIFByb2dyYW0gY29k
ZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9i
amVjdAorLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCisKK2NsYXNzIEdsb2JhbENvZGVC
bG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Cisg
ICAgREVDTEFSRV9JTkZPOworCitwcm90ZWN0ZWQ6CisgICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJs
b2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwg
UGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJj
ZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENvZGVC
bG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEds
b2JhbENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFz
ZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayogY3Jl
YXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikK
KyAgICB7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAg
UHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNl
OworICAgIH0KKworICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBQ
cm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICB7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAg
ICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3Vy
Y2VQcm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9ncmFtQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywg
UHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBz
dHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFBy
b2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisg
ICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwg
dW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOworfTsKKworY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxD
b2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7Cisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYg
b3RoZXIpCisgICAgeworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5o
ZWFwKSkKKyAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
CisgICAgeworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkK
KyAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9ncmFt
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90
aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ss
CisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEds
b2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkK
KyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307CisK
K2NsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRXZhbENvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0
ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAgIEV2
YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENv
ZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2
YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2Rl
QmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJpYWJs
ZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZhcmlh
YmxlKGluZGV4KTsgfQorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVubGlu
a2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKyAg
ICAgICAgCisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBF
dmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBz
b3VyY2VQcm92aWRlciwgMCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5rZWRF
dmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KK307CisKK2NsYXNzIEZ1bmN0
aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBD
b2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRnVuY3Rpb25D
b2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2Rl
QmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFw
KSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9j
ayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAg
IHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9j
a1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2bSwg
c3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBG
dW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvbkV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAorICAgICAgICBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25l
ZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1
cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworfTsKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVC
bG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJF
X0lORk87CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0s
IENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAgIHsK
KyAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAg
IFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJu
IGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3Jl
YXRlKFZNKiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBXZWJBc3NlbWJseUNvZGVC
bG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNv
ZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0s
IHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxl
LCBnbG9iYWxPYmplY3QpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBv
d25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVy
KQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90
aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0s
IHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgeworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Cit9OworI2VuZGlmCisKK2lubGlu
ZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKK3sKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOworICAgIHJl
dHVybiB0aGlzW2luZGV4XTsKK30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOworfQorCitp
bmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAg
cmV0dXJuIHRoaXNbaW5kZXhdOworfQorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5j
aGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiB1bmNoZWNrZWRSKHJl
Zy5vZmZzZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIENvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWts
eUhhc0JlZW5DYWxsZWQoKQoreworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3Jl
KGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2RlQmxv
Y2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNl
IFByb2dyYW1FeGVjdXRhYmxlVHlwZTogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0
aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6IHsK
KyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2Nr
Kj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9jay5nZXQoKSkp
CisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9y
d2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZTogeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBpZiAo
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxl
LT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JF
YWNoUmVsYXRlZENvZGVCbG9jayhmKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2Nr
ID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVC
bG9jayhmKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3Rh
dGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhp
cyktPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCisgICAgICAgICAgICBjb2RlQmxv
Y2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RXhlY3V0YWJsZVR5cGU+CitKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBDb2RlQmxvY2sqJiByZXN1bHRDb2RlQmxvY2spCit7
CisgICAgaWYgKGhhc0pJVENvZGVGb3Ioa2luZCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNfc2Ft
ZTxFeGVjdXRhYmxlVHlwZSwgRXZhbEV4ZWN1dGFibGU+Ojp2YWx1ZSkKKyAgICAgICAgICAgIHJl
c3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUq
Pih0aGlzKS0+Y29kZUJsb2NrKCkpOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhl
Y3V0YWJsZVR5cGUsIFByb2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAgICAgICByZXN1
bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4odGhpcyktPmNvZGVCbG9jaygpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4
ZWN1dGFibGVUeXBlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAgICAg
ICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7CisgICAgICAgIGVsc2UgaWYgKHN0
ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlPjo6dmFsdWUpCisg
ICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25JbXBs
KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsIHJlc3VsdENvZGVCbG9jayk7Cit9CisKKyNkZWZp
bmUgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFpbHMpIFwKKyAg
ICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAoKSB7
IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMDgyMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMDg4ICsyOSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFycmF5UHJvZmls
ZS5oIgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlv
bnMuaCIKLSNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKLSNpbmNsdWRlICJDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oIgotI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKLSNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiQ29kZVR5cGUuaCIKLSNpbmNsdWRlICJDb21w
YWN0SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCi0jaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKLSNpbmNsdWRlICJE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgi
Ci0jaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgotI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5n
ZUluZm8uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJIYW5k
bGVySW5mby5oIgotI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiSklUQ29kZS5o
IgotI2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNs
dWRlICJMTEludENhbGxMaW5rSW5mby5oIgotI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgiCi0jaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKLSNpbmNsdWRl
ICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNs
dWRlICJQcm9maWxlckpldHRpc29uUmVhc29uLmgiCi0jaW5jbHVkZSAiUHJvZ3JhbUV4ZWN1dGFi
bGUuaCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKLSNpbmNsdWRlICJVbmNvbmRpdGlv
bmFsRmluYWxpemVyLmgiCi0jaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCi0jaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUg
Ikdsb2JhbENvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwotY2xhc3MgQ29kZUJsb2NrU2V0OwotY2xhc3MgRXhlY1N0YXRlOwot
Y2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKLWNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
LWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwotY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7Ci1j
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKLQotZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90
OwotCi1zdHJ1Y3QgQXJpdGhQcm9maWxlOwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwg
U3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01h
cDsKLQotZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGltaXphdGlvbiwg
Q291bnRSZW9wdGltaXphdGlvbiB9OwotCi1jbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxs
IHsKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM7Ci0gICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
ciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBjbGFzcyBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyIDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciB7Ci0gICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpIG92ZXJy
aWRlOwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENvcHlQYXJzZWRCbG9ja1RhZyB7IENv
cHlQYXJzZWRCbG9jayB9OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAg
REVDTEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJl
KiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICBDb2RlQmxvY2so
Vk0qLCBTdHJ1Y3R1cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNp
Z25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOwotI2Vu
ZGlmCi0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQ29weVBhcnNlZEJsb2NrVGFnLCBD
b2RlQmxvY2smIG90aGVyKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqKTsK
LSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOwot
I2VuZGlmCi0KLSAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0
OwotCi1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvZGVCbG9jaygpOwotCi0gICAg
VW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUuZ2V0KCk7IH0KLQotICAgIENTdHJpbmcgaW5mZXJyZWROYW1lKCkgY29uc3Q7
Ci0gICAgQ29kZUJsb2NrSGFzaCBoYXNoKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNIYXNoKCkgY29u
c3Q7Ci0gICAgYm9vbCBpc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBo
YXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBzb3VyY2VDb2RlRm9y
VG9vbHMoKSBjb25zdDsgLy8gTm90IHF1aXRlIHRoZSBhY3R1YWwgc291cmNlIHdlIHBhcnNlZDsg
dGhpcyB3aWxsIGRvIHRoaW5ncyBsaWtlIHByZWZpeCB0aGUgc291cmNlIGZvciBhIGZ1bmN0aW9u
IHdpdGggYSByZWlmaWVkIHNpZ25hdHVyZS4KLSAgICBDU3RyaW5nIHNvdXJjZUNvZGVPbk9uZUxp
bmUoKSBjb25zdDsgLy8gQXMgc291cmNlQ29kZUZvclRvb2xzKCksIGJ1dCByZXBsYWNlcyBhbGwg
d2hpdGVzcGFjZSBydW5zIHdpdGggYSBzaW5nbGUgc3BhY2UuCi0gICAgdm9pZCBkdW1wQXNzdW1p
bmdKSVRUeXBlKFByaW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBpbnQg
bnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQotICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotCi0gICAgaW50IG51bUNhbGxlZUxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0KLSAgICBpbnQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9Ci0gICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9Ci0KLSAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KLSAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJs
b2NrKik7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUmVs
YXRlZENvZGVCbG9jayhGdW5jdG9yJiYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIEZ1bmN0b3Ig
ZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgND4gY29kZUJsb2NrczsKLSAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQodGhpcyk7Ci0K
LSAgICAgICAgd2hpbGUgKCFjb2RlQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjdXJyZW50Q29kZUJsb2NrID0gY29kZUJsb2Nrcy50YWtlTGFzdCgpOwotICAgICAg
ICAgICAgZihjdXJyZW50Q29kZUJsb2NrKTsKLQotICAgICAgICAgICAgaWYgKENvZGVCbG9jayog
YWx0ZXJuYXRpdmUgPSBjdXJyZW50Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICAg
ICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKGFsdGVybmF0aXZlKTsKLSAgICAgICAgICAgIGlmIChD
b2RlQmxvY2sqIG9zckVudHJ5QmxvY2sgPSBjdXJyZW50Q29kZUJsb2NrLT5zcGVjaWFsT1NSRW50
cnlCbG9ja09yTnVsbCgpKQotICAgICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKG9zckVu
dHJ5QmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENvZGVTcGVjaWFsaXphdGlv
bktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
cGVjaWFsaXphdGlvbkZyb21Jc0NvbnN0cnVjdChtX2lzQ29uc3RydWN0b3IpOwotICAgIH0KLQot
ICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JKZXR0aXNvbigpOyAgICAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAKLSAgICAv
LyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigp
OwotCi0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0V2Vha2x5KFNsb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgpOwotCi0gICAg
dm9pZCBkdW1wU291cmNlKCk7Ci0gICAgdm9pZCBkdW1wU291cmNlKFByaW50U3RyZWFtJik7Ci0K
LSAgICB2b2lkIGR1bXBCeXRlY29kZSgpOwotICAgIHZvaWQgZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtJik7Ci0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0gICAgICAgIFByaW50U3RyZWFtJiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJ
bmZvTWFwKCksIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7Ci0g
ICAgdm9pZCBkdW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJlYW0mKTsKLSAgICB2b2lkIHBy
aW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgdm9p
ZCBwcmludFN0cnVjdHVyZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IElu
c3RydWN0aW9uKiwgaW50IG9wZXJhbmQpOwotCi0gICAgdm9pZCBkdW1wTWF0aElDU3RhdHMoKTsK
LQotICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7
IH0KLSAgICBFQ01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzU3RyaWN0TW9kZSgp
ID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGU7IH0KLQotICAgIGlubGluZSBib29sIGlzS25v
d25Ob3RJbW1lZGlhdGUoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IG1f
dGhpc1JlZ2lzdGVyLm9mZnNldCgpICYmICFtX2lzU3RyaWN0TW9kZSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkp
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOwotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1w
b3JhcnlSZWdpc3RlckluZGV4KGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRl
eCA+PSBtX251bVZhcnM7Ci0gICAgfQotCi0gICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVx
dWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvcklu
ZGV4KHVuc2lnbmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRs
ZXIpOwotICAgIHZvaWQgcmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKENhbGxTaXRl
SW5kZXgpOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCi0g
ICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwg
dW5zaWduZWQmIGNvbHVtbikgY29uc3Q7Ci0KLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNv
ZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKLQotICAgIHZvaWQgZ2V0
U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1
bHQpOwotICAgIHZvaWQgZ2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCk7Ci0gICAg
Ci0gICAgdm9pZCBnZXRDYWxsTGlua0luZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldENhbGxMaW5rSW5mb01hcChD
YWxsTGlua0luZm9NYXAmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpOwotICAgIHZvaWQg
Z2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKLSAgICAKLSNpZiBFTkFCTEUo
SklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKLSAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKEFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0
aFByb2ZpbGUqKTsKLSAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7Ci0g
ICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0
dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+Ojpp
dGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9Ci0gICAg
Ci0gICAgLy8gTyhuKSBvcGVyYXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3Ug
cmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdldCBvbmUKLSAgICAvLyBzdHViIGluZm8uCi0gICAgU3Ry
dWN0dXJlU3R1YkluZm8qIGZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKLQotICAgIEJ5VmFsSW5m
byogYWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygp
OwotICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zQmVnaW4oKSB7
IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgfQotICAgIEJhZzxDYWxsTGlua0luZm8+
OjppdGVyYXRvciBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmVu
ZCgpOyB9Ci0KLSAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFy
aWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCi0gICAgLy8gdGhhdCB0aGVy
ZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMs
IHlvdSdyZSByZWFsbHkKLSAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBh
bW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAg
IAotICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVuIHdlIHdhbnQgdG8gcmVhdHRlbXB0IGNvbXBpbGlu
ZyBzb21ldGhpbmcgd2l0aCB0aGUgYmFzZWxpbmUgSklULiBJZGVhbGx5Ci0gICAgLy8gdGhlIGJh
c2VsaW5lIEpJVCB3b3VsZCBub3QgYWRkIGRhdGEgdG8gQ29kZUJsb2NrLCBidXQgaW5zdGVhZCBp
dCB3b3VsZCBwdXQgaXRzIGRhdGEgaW50bwotICAgIC8vIGEgbmV3bHkgY3JlYXRlZCBKSVRDb2Rl
LCB3aGljaCBjb3VsZCBiZSB0aHJvd24gYXdheSBpZiB3ZSBiYWlsIG9uIEpJVCBjb21waWxhdGlv
bi4gVGhlbiB3ZQotICAgIC8vIHdvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIHNpbGx5
IGZ1bmN0aW9uLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU5MDYxCi0gICAgdm9pZCByZXNldEpJVERhdGEoKTsKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCi0gICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUo
SklUKQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBD
YWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVj
U3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7Ci0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZy
YW1lLCBMTEludENhbGxMaW5rSW5mbyopOwotCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKHN0ZDo6
dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAg
IG1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIENvbXBhY3RK
SVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVN
YXAuZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGNsZWFyTExJbnRHZXRCeUlk
Q2FjaGUoSW5zdHJ1Y3Rpb24qKTsKLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3Ry
dWN0aW9uKiByZXR1cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocmV0
dXJuQWRkcmVzcyA+PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIHJldHVybkFkZHJlc3MgPCBp
bnN0cnVjdGlvbnMoKS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVj
dGlvbio+KHJldHVybkFkZHJlc3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICB9Ci0K
LSAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247Ci0gICAgdHlwZWRlZiBS
ZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9uczsKLQotICAg
IHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnMuc2l6ZSgpOyB9Ci0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1
Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLSAgICBjb25zdCBSZWZDb3VudGVk
QXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3Ry
dWN0aW9uczsgfQotCi0gICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwotCi0g
ICAgYm9vbCB1c2VzT3Bjb2RlKE9wY29kZUlEKTsKLQotICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KLQotICAgIC8v
IEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdS
ZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKQot
ICAgIENvZGVCbG9jayogbmV3UmVwbGFjZW1lbnQoKTsKLSAgICAKLSAgICB2b2lkIHNldEpJVENv
ZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhlYXAo
KS0+aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChjb2RlLT5zaXplKCkpOwotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHByb2Jh
Ymx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5nIHNp
bWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCi0gICAgICAgIG1faml0Q29kZSA9
IGNvZGU7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJu
IG1faml0Q29kZTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgaml0Q29kZU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0Q29kZSk7IH0KLSAgICBKSVRDb2Rl
OjpKSVRUeXBlIGppdFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgSklUQ29kZSogaml0Q29k
ZSA9IG1faml0Q29kZS5nZXQoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAg
ICAgIEpJVENvZGU6OkpJVFR5cGUgcmVzdWx0ID0gSklUQ29kZTo6aml0VHlwZUZvcihqaXRDb2Rl
KTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qg
bmVlZGVkLiBPaCB3ZWxsLCBwYXJhbm9pYSBpcyBnb29kLgotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLQotICAgIGJvb2wgaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVDsKLSAg
ICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7
Ci0KLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7Ci0g
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKCk7Ci0gICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsU3RhdGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxE
Rkc6OkNhcGFiaWxpdHlMZXZlbD4obV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSk7IH0KLQotICAgIGJv
b2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNl
KTsKLSAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBs
YWNlIGlzIG15IEpJVFR5cGUKLSNlbmRpZgotCi0gICAgdm9pZCBqZXR0aXNvbihQcm9maWxlcjo6
SmV0dGlzb25SZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSA9IERvbnRDb3VudFJlb3B0aW1pemF0
aW9uLCBjb25zdCBGaXJlRGV0YWlsKiA9IG51bGxwdHIpOwotICAgIAotICAgIEV4ZWN1dGFibGVC
YXNlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5n
ZXQoKTsgfQotICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUu
Z2V0KCkpOyB9Ci0KLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0KLSAgICB2
b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhp
c1JlZ2lzdGVyID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0KLSAgICBib29sIHVzZXNF
dmFsKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7IH0KLQotICAg
IHZvaWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChzY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSB8fCAhc2NvcGVSZWdp
c3Rlci5pc1ZhbGlkKCkpOwotICAgICAgICBtX3Njb3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVy
OwotICAgIH0KLQotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAgfQotICAgIAotICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDb2RlVHlwZT4obV9jb2RlVHlwZSk7Ci0gICAgfQotCi0gICAgUHV0UHJvcGVydHlTbG90OjpD
b250ZXh0IHB1dEJ5SWRDb250ZXh0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb2RlVHlw
ZSgpID09IEV2YWxDb2RlKQotICAgICAgICAgICAgcmV0dXJuIFB1dFByb3BlcnR5U2xvdDo6UHV0
QnlJZEV2YWw7Ci0gICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQ7Ci0gICAg
fQotCi0gICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LmdldCgpOyB9Ci0gICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VPZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldDsgfQotCi0gICAgc2l6ZV90IG51bWJl
ck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZK
dW1wVGFyZ2V0cygpOyB9Ci0gICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5qdW1wVGFyZ2V0KGluZGV4KTsgfQotCi0gICAgU3Ry
aW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbnVt
UGFyYW1ldGVycyA+PSAwKTsKLSAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
LnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSk7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7Ci0gICAgfQotICAgIFZh
bHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRl
eCkKLSAgICB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gJm1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzW2FyZ3VtZW50SW5kZXhdOwotICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVj
b2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXMu
c2l6ZSgpOyB9Ci0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGluZGV4KSB7IHJl
dHVybiAmbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBTcGVjdWxh
dGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
LT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbnVt
YmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9mVmFsdWVQcm9maWxlcygpOwot
ICAgIH0KLSAgICBWYWx1ZVByb2ZpbGUqIGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKHVuc2lnbmVk
IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChp
bmRleCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGUoaW5kZXggLSBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpKTsKLSAgICB9Ci0KLSAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFJh
cmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIG51bWJlck9m
UmFyZUNhc2VQcm9maWxlcygpIHsgcmV0dXJuIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCk7IH0K
LSAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGlu
dCBieXRlY29kZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JC
eXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgYm9vbCBsaWtlbHlUb1Rh
a2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICBpZiAoIWhhc0Jh
c2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlU
b1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwotICAgIH0KLQotICAgIGJvb2wgY291bGRUYWtl
U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNCYXNl
bGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1
bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlvbiopOwotCi0gICAgYm9vbCBjb3Vs
ZFRha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlcy5z
aXplKCk7IH0KLSAgICBjb25zdCBBcnJheVByb2ZpbGVWZWN0b3ImIGFycmF5UHJvZmlsZXMoKSB7
IHJldHVybiBtX2FycmF5UHJvZmlsZXM7IH0KLSAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJv
ZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIEFycmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSog
Z2V0QXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2Zp
bGUqIGdldE9yQWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJv
ZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAvLyBFeGNlcHRpb24gaGFuZGxp
bmcgc3VwcG9ydAotCi0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5z
aXplKCkgOiAwOyB9Ci0gICAgSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4
KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVyc1tpbmRleF07IH0KLQotICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzRXhwcmVzc2lvbkluZm8oKTsgfQotCi0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiYgY29kZU9yaWdpbnMoKTsKLSAgICAKLSAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGlt
cGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgotICAgIGJvb2wgaGFzQ29k
ZU9yaWdpbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2lu
KENhbGxTaXRlSW5kZXggaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIWhhc0NvZGVPcmlnaW5z
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbmRleC5iaXRz
KCkgPCBjb2RlT3JpZ2lucygpLnNpemUoKTsKLSAgICB9Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2RlT3Jp
Z2lucygpW2luZGV4LmJpdHMoKV07Ci0gICAgfQotCi0gICAgYm9vbCBhZGRGcmVxdWVudEV4aXRT
aXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fZXhpdFByb2Zp
bGUuYWRkKGxvY2tlciwgdGhpcywgc2l0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNFeGl0U2l0
ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6RnJlcXVlbnRF
eGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotICAgIGJvb2wgaGFzRXhpdFNpdGUo
Y29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAotICAgIHsKLSAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGhhc0V4
aXRTaXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotCi0gICAgREZHOjpFeGl0UHJvZmlsZSYgZXhp
dFByb2ZpbGUoKSB7IHJldHVybiBtX2V4aXRQcm9maWxlOyB9Ci0KLSAgICBDb21wcmVzc2VkTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7Ci0gICAgfQot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgLy8gQ29uc3RhbnQgUG9vbAotI2lmIEVO
QUJMRShERkdfSklUKQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG51bWJlck9mREZH
SWRlbnRpZmllcnMoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkgY29u
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0Owot
I2Vsc2UKLSAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7IH0KLSAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
PmlkZW50aWZpZXIoaW5kZXgpOyB9Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0g
ICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOyB9Ci0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2KQotICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAg
IG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAg
ICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgp
LCB0aGlzLCB2KTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24u
YXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50TGF6aWx5KCkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwot
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4o
KSk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50
IGluZGV4KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b25baW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLQotICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzW2luZGV4XS5nZXQoKTsgfQotICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdl
dCgpOyB9Ci0gICAgCi0gICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+cmVnZXhwKGluZGV4KTsgfQotCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZDb25zdGFudEJ1ZmZlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRh
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVycy5zaXplKCk7Ci0gICAgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50QnVm
ZmVyKGNvbnN0IFZlY3RvcjxKU1ZhbHVlPiYgYnVmZmVyKQotICAgIHsKLSAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPEpTVmFsdWU+JiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKHVuc2lnbmVkIGlu
ZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4g
bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLSAgICBKU1ZhbHVl
KiBjb25zdGFudEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
b25zdGFudEJ1ZmZlckFzVmVjdG9yKGluZGV4KS5kYXRhKCk7Ci0gICAgfQotCi0gICAgSGVhcCog
aGVhcCgpIGNvbnN0IHsgcmV0dXJuICZtX3ZtLT5oZWFwOyB9Ci0gICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9Ci0KLSAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4pOwotCi0gICAgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKLSAgICB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
ICAgICBpZiAoISFtX2xpdmVuZXNzQW5hbHlzaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuICpt
X2xpdmVuZXNzQW5hbHlzaXM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpdmVuZXNzQW5h
bHlzaXNTbG93KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdmFsaWRhdGUoKTsKLQotICAgIC8v
IEp1bXAgVGFibGVzCi0KLSAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5z
aXplKCkgOiAwOyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzLmFwcGVuZChTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMubGFzdCgpOyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBt
X3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLSAgICB2b2lkIGNs
ZWFyU3dpdGNoSnVtcFRhYmxlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
cy5jbGVhcigpOwotICAgIH0KLQotICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBTdHJpbmdKdW1wVGFibGUmIGFkZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFN0cmluZ0p1bXBUYWJsZSgp
KTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0K
LSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgRXZhbENvZGVDYWNoZSYg
ZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9Ci0KLSAgICBlbnVtIFNocmlua01vZGUgewotICAg
ICAgICAvLyBTaHJpbmsgcHJpb3IgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgdGhhdCBtYXkg
cG9pbnQgZGlyZWN0bHkgaW50byB2ZWN0b3JzLgotICAgICAgICBFYXJseVNocmluaywKLQotICAg
ICAgICAvLyBTaHJpbmsgYWZ0ZXIgZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUsIGFuZCBhZnRlciBw
b3NzaWJseSBjcmVhdGluZyBuZXcgdmVjdG9ycwotICAgICAgICAvLyBhbmQgYXBwZW5kaW5nIHRv
IG90aGVycy4gQXQgdGhpcyB0aW1lIGl0IGlzIG5vdCBzYWZlIHRvIHNocmluayBjZXJ0YWluIHZl
Y3RvcnMKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGdlbmVyYXRlZCBtYWNoaW5l
IGNvZGUgdGhhdCByZWZlcmVuY2VzIHRoZW0gZGlyZWN0bHkuCi0gICAgICAgIExhdGVTaHJpbmsK
LSAgICB9OwotICAgIHZvaWQgc2hyaW5rVG9GaXQoU2hyaW5rTW9kZSk7Ci0KLSAgICAvLyBGdW5j
dGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gSklUdGluZyBraWNrcyBpbiwgaW4gYSBtaXhlZCBt
b2RlCi0gICAgLy8gZXhlY3V0aW9uIHdvcmxkLgotCi0gICAgYm9vbCBjaGVja0lmSklUVGhyZXNo
b2xkUmVhY2hlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
LmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQg
ZG9udEpJVEFueXRpbWVTb29uKCkKLSAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5kZWZlckluZGVmaW5pdGVseSgpOwotICAgIH0KLQotICAgIGludDMyX3QgdGhyZXNob2xkRm9y
SklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7Ci0gICAg
dm9pZCBqaXRTb29uKCk7Ci0KLSAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxs
aW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RydWN0dXJlKiwg
QmFnPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7Ci0gICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCYgbGxpbnRHZXRC
eUlkV2F0Y2hwb2ludE1hcCgpIHsgcmV0dXJuIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsg
fQotCi0gICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBjb21waWxh
dGlvbiBraWNrcyBpbi4gVGhpcwotICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0aGUgb3B0aW1p
emluZyBjb21waWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgotICAgIC8vIGVudHJ5IGhhcHBl
bnMuIFR3byB0cmlnZ2VycyBleGlzdDogdGhlIGxvb3AgdHJpZ2dlciBhbmQgdGhlIHJldHVybgot
ICAgIC8vIHRyaWdnZXIuIEluIGVpdGhlciBjYXNlLCB3aGVuIGFuIGFkZGl0aW9uIHRvIG1faml0
RXhlY3V0ZUNvdW50ZXIKLSAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1uZWdhdGl2ZSwg
dGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMKLSAgICAvLyBpbnZva2VkLiBUaGlzIGluY2x1ZGVz
IGEgZmFzdCBjaGVjayB0byBzZWUgaWYgdGhpcyBDb2RlQmxvY2sgaGFzCi0gICAgLy8gYWxyZWFk
eSBiZWVuIG9wdGltaXplZCAoaS5lLiByZXBsYWNlbWVudCgpIHJldHVybnMgYSBDb2RlQmxvY2sK
LSAgICAvLyB0aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hlciB0aWVyIEpJVCB0aGFuIHRo
aXMgb25lKS4gSW4gdGhlCi0gICAgLy8gY2FzZSBvZiB0aGUgbG9vcCB0cmlnZ2VyLCBpZiB0aGUg
b3B0aW1pemVkIGNvbXBpbGF0aW9uIHN1Y2NlZWRzCi0gICAgLy8gKG9yIGhhcyBhbHJlYWR5IHN1
Y2NlZWRlZCBpbiB0aGUgcGFzdCkgdGhlbiBPU1IgaXMgYXR0ZW1wdGVkIHRvCi0gICAgLy8gcmVk
aXJlY3QgcHJvZ3JhbSBmbG93IGludG8gdGhlIG9wdGltaXplZCBjb2RlLgotCi0gICAgLy8gVGhl
c2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXphdGlvbiB0cmln
Z2VycywKLSAgICAvLyBhbmQgYXJlIHVzZWQgYXMgYSBzaW5nbGUgcG9pbnQgYXQgd2hpY2ggd2Ug
ZGVmaW5lIHRoZSBoZXVyaXN0aWNzCi0gICAgLy8gZm9yIGhvdyBtdWNoIHdhcm0tdXAgaXMgbWFu
ZGF0ZWQgYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbgotICAgIC8vIHRyaWdnZXIgZmlsZXMu
IEFsbCBDb2RlQmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKLSAg
ICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCi0K
LSAgICAvLyBXaGVuIHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMsIHdl
IHRyaWdnZXIgYQotICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNy
ZWFzZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKLSAgICAvLyB0byBhdm9pZCB0aHJhc2hpbmcu
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKSBjb25zdDsKLSAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSNpZiBFTkFCTEUo
SklUKQotICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkgeyByZXR1cm4gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsgfQotICAgIHN0YXRpYyBzaXplX3Qg
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAgIHNp
emVfdCBjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mREZHQ29tcGlsZXMoKTsKLQotICAgIGludDMyX3QgY29kZVR5cGVUaHJlc2hvbGRN
dWx0aXBsaWVyKCkgY29uc3Q7Ci0KLSAgICBpbnQzMl90IGFkanVzdGVkQ291bnRlclZhbHVlKGlu
dDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7Ci0KLSAgICBpbnQzMl90KiBhZGRyZXNzT2ZKSVRFeGVj
dXRlQ291bnRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIu
bV9jb3VudGVyOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVj
dXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhl
Y3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwg
bV9jb3VudGVyKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25B
Y3RpdmVUaHJlc2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2pp
dEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIsIG1fYWN0aXZlVGhyZXNob2xkKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZK
SVRFeGVjdXRpb25Ub3RhbENvdW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9j
aywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyLCBtX3RvdGFsQ291bnQpOyB9Ci0KLSAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXImIGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9qaXRFeGVjdXRl
Q291bnRlcjsgfQotCi0gICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgY29u
c3QgeyByZXR1cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KLQotICAgIC8vIENoZWNr
IGlmIHRoZSBvcHRpbWl6YXRpb24gdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQsIGFuZCBpZiBu
b3QsCi0gICAgLy8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1cm5zIHRy
dWUgaWYgdGhlIHRocmVzaG9sZCBoYXMKLSAgICAvLyBiZWVuIHJlYWNoZWQuCi0gICAgYm9vbCBj
aGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpOwotCi0gICAgLy8gQ2FsbCB0aGlz
IHRvIGZvcmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMK
LSAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQotICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGluZSBjb2Rl
LgotICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwotCi0gICAgLy8gQ2FsbCB0aGlz
IHRvIHByZXZlbnQgb3B0aW1pemF0aW9uIGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQK
LSAgICAvLyBvcHRpbWl6YXRpb24gd2lsbCBzdGlsbCBoYXBwZW4gYWZ0ZXIgcm91Z2hseSAyXjI5
IGludm9jYXRpb25zLAotICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRvIGRlbGF5IHRo
YXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcwotICAgIC8vIGlzIGNhbGxlZCBpZiBvcHRpbWl6
YXRpb24gZmFpbGVkLCBhbmQgd2UgZXhwZWN0IGl0IHRvIGZhaWwgaW4KLSAgICAvLyB0aGUgZnV0
dXJlIGFzIHdlbGwuCi0gICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotCi0gICAg
Ly8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMgc3RhcnRpbmcg
c3RhdGUsCi0gICAgLy8gZm9yY2luZyBhIHdhcm0tdXAgdG8gaGFwcGVuIGJlZm9yZSB0aGUgbmV4
dCBvcHRpbWl6YXRpb24gdHJpZ2dlcgotICAgIC8vIGZpcmVzLiBUaGlzIGlzIGNhbGxlZCBpbiB0
aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLiBJdCBhbHNvCi0gICAgLy8gbWFrZXMgc2Vuc2UgdG8g
Y2FsbCB0aGlzIGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBOb3RlIHRoYXQKLSAgICAvLyBPU1Ig
ZXhpdCBjb2RlIGlzIGNvZGUgZ2VuZXJhdGVkLCBzbyB0aGUgdmFsdWUgb2YgdGhlIGV4ZWN1dGUK
LSAgICAvLyBjb3VudGVyIHRoYXQgdGhpcyBjb3JyZXNwb25kcyB0byBpcyBhbHNvIGF2YWlsYWJs
ZSBkaXJlY3RseS4KLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLQotICAgIC8vIENh
bGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9ubHkgYWZ0
ZXIKLSAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgotICAgIHZvaWQgb3B0aW1pemVBZnRlckxvbmdX
YXJtVXAoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBhbiBvcHRpbWl6YXRpb24gdHJp
Z2dlciB0byBmaXJlIHNvb24sIGJ1dAotICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0aGUgbmV4dCBv
bmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCi0gICAgLy8gc3VjY2VlZHMuIFN1
Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUKLSAgICAvLyBy
ZWxpbmtlZCB0byB0aGUgb3B0aW1pemVkIGNvZGUsIHNvIHRoaXMgb25seSBhZmZlY3RzIGNhbGwK
LSAgICAvLyBmcmFtZXMgdGhhdCBhcmUgc3RpbGwgZXhlY3V0aW5nIHRoaXMgQ29kZUJsb2NrLiBU
aGUgdmFsdWUgaGVyZQotICAgIC8vIGlzIHR1bmVkIHRvIHN0cmlrZSBhIGJhbGFuY2UgYmV0d2Vl
biB0aGUgY29zdCBvZiBPU1IgZW50cnkKLSAgICAvLyAod2hpY2ggaXMgdG9vIGhpZ2ggdG8gd2Fy
cmFudCBtYWtpbmcgZXZlcnkgbG9vcCBiYWNrIGVkZ2UgdG8KLSAgICAvLyB0cmlnZ2VyIE9TUiBp
bW1lZGlhdGVseSkgYW5kIHRoZSBjb3N0IG9mIGV4ZWN1dGluZyBiYXNlbGluZQotICAgIC8vIGNv
ZGUgKHdoaWNoIGlzIGhpZ2ggZW5vdWdoIHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0
bwotICAgIC8vIGhhdmUgYSBmdWxsIHdhcm0tdXApLiBUaGUgaW50dWl0aW9uIGZvciBjYWxsaW5n
IHRoaXMgaW5zdGVhZCBvZgotICAgIC8vIG9wdGltaXplTmV4dEludm9jYXRpb24oKSBpcyBmb3Ig
dGhlIGNhc2Ugb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucwotICAgIC8vIHdpdGggbG9vcHMuIENvbnNp
ZGVyIHRoYXQgdGhlcmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQotICAgIC8vIHJlY3Vy
c2l2ZSBmdW5jdGlvbiwgZm9yIGEgcmVhc29uYWJseSBsYXJnZSB2YWx1ZSBvZiBOLiBUaGUgdG9w
Ci0gICAgLy8gb25lIHRyaWdnZXJzIG9wdGltaXphdGlvbiwgYW5kIHRoZW4gcmV0dXJucywgYW5k
IHRoZW4gYWxsIG9mCi0gICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0IHdhbnQgb3B0
aW1pemF0aW9uIHRvIGJlIHRyaWdnZXJlZCBvbgotICAgIC8vIGVhY2ggcmV0dXJuLCBhcyB0aGF0
IHdvdWxkIGJlIHN1cGVyZmx1b3VzLiBJdCBvbmx5IG1ha2VzIHNlbnNlCi0gICAgLy8gdG8gdHJp
Z2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNvbWVzIGhvdAot
ICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgotICAgIHZvaWQgb3B0aW1pemVTb29uKCk7Ci0K
LSAgICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKLQotICAg
IHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENv
bXBpbGF0aW9uUmVzdWx0KTsKLSAgICAKLSAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KLQotICAgIHZvaWQgY291bnRPU1JFeGl0
KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KLQotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZPU1JF
eGl0Q291bnRlcigpIHsgcmV0dXJuICZtX29zckV4aXRDb3VudGVyOyB9Ci0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX29zckV4aXRDb3VudGVyKTsgfQotCi0gICAgdWludDMyX3QgYWRqdXN0
ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7Ci0gICAgdWlu
dDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKLSAgICB1aW50MzJf
dCBleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7Ci0gICAgYm9v
bCBzaG91bGRSZW9wdGltaXplTm93KCk7Ci0gICAgYm9vbCBzaG91bGRSZW9wdGltaXplRnJvbUxv
b3BOb3coKTsKLQotICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldCk7
Ci0gICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3Rl
ckF0T2Zmc2V0TGlzdD4pOwotICAgIAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldCgp
OyB9Ci0jZWxzZSAvLyBObyBKSVQKLSAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgc2l6
ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSB7IHJl
dHVybiAwOyB9OwotICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpIHsgfQotICAgIHVuc2ln
bmVkIG51bWJlck9mREZHQ29tcGlsZXMoKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotICAgIGJv
b2wgc2hvdWxkT3B0aW1pemVOb3coKTsKLSAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25zKCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Ci0gICAg
dm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotCi0gICAgdW5zaWduZWQgZnJhbWVSZWdpc3Rl
ckNvdW50KCk7Ci0gICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCgpOwotCi0gICAgYm9vbCBoYXNP
cERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwot
Ci0gICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dl
clJlcXVlc3RzOyB9Ci0gICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVy
biAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9Ci0KLSAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBu
dW1CcmVha3BvaW50cykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzID49
IG51bUJyZWFrcG9pbnRzKTsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyAtPSBudW1CcmVha3Bv
aW50czsKLSAgICB9Ci0KLSAgICBlbnVtIFN0ZXBwaW5nTW9kZSB7Ci0gICAgICAgIFN0ZXBwaW5n
TW9kZURpc2FibGVkLAotICAgICAgICBTdGVwcGluZ01vZGVFbmFibGVkCi0gICAgfTsKLSAgICB2
b2lkIHNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUpOwotCi0gICAgdm9pZCBjbGVhckRlYnVn
Z2VyUmVxdWVzdHMoKQotICAgIHsKLSAgICAgICAgbV9zdGVwcGluZ01vZGUgPSBTdGVwcGluZ01v
ZGVEaXNhYmxlZDsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyA9IDA7Ci0gICAgfQotCi0gICAg
Ym9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQotICAgIAot
ICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCi0KLSAg
ICBpbnQgbV9udW1DYWxsZWVMb2NhbHM7Ci0gICAgaW50IG1fbnVtVmFyczsKLSAgICAKLSAgICAv
LyBUaGlzIGlzIGludGVudGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBv
ZiBhbnlvbmUgZG9pbmcgYW55Ci0gICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBs
b2NrOgotICAgIC8vCi0gICAgLy8gLSBNb2RpZnlpbmcgYW55IGlubGluZSBjYWNoZSBpbiB0aGlz
IGNvZGUgYmxvY2suCi0gICAgLy8KLSAgICAvLyAtIFF1ZXJpbmcgYW55IGlubGluZSBjYWNoZSBp
biB0aGlzIGNvZGUgYmxvY2ssIGZyb20gYSB0aHJlYWQgb3RoZXIgdGhhbgotICAgIC8vICAgdGhl
IG1haW4gdGhyZWFkLgotICAgIC8vCi0gICAgLy8gQWRkaXRpb25hbGx5LCBpdCdzIG9ubHkgbGVn
YWwgdG8gbW9kaWZ5IHRoZSBpbmxpbmUgY2FjaGUgb24gdGhlIG1haW4KLSAgICAvLyB0aHJlYWQu
IFRoaXMgbWVhbnMgdGhhdCB0aGUgbWFpbiB0aHJlYWQgY2FuIHF1ZXJ5IHRoZSBpbmxpbmUgY2Fj
aGUgd2l0aG91dAotICAgIC8vIGxvY2tpbmcuIFRoaXMgaXMgY3J1Y2lhbCBzaW5jZSBleGVjdXRp
bmcgdGhlIGlubGluZSBjYWNoZSBpcyBlZmZlY3RpdmVseQotICAgIC8vICJxdWVyeWluZyIgaXQu
Ci0gICAgLy8KLSAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0
aGUgR0MgY2FuIGRvIHdoYXRldmVyIGl0IHdhbnRzCi0gICAgLy8gd2l0aG91dCBob2xkaW5nIGFu
eSBsb2NrcywgYmVjYXVzZSB0aGUgR0MgaXMgZ3VhcmFudGVlZCB0byB3YWl0IHVudGlsIGFueQot
ICAgIC8vIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkcyBmaW5pc2ggd2hhdCB0aGV5J3Jl
IGRvaW5nLgotICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwotCi0gICAgQXRv
bWljPGJvb2w+IG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkOwotCi0gICAgYm9vbCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRz
IHRvIHN0b3JlIHRvIGl0LgotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB1bnNpZ25lZCBtX2NhcGFi
aWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKLSNlbmRpZgotCi0g
ICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgOiAxOyAvLyBJbml0aWFsaXpl
ZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KLQotICAgIGJvb2wgbV9kaWRGYWlsSklUQ29tcGlsYXRp
b24gOiAxOwotICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwotICAgIGJvb2wg
bV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKLSAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6
IDE7Ci0gICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb2RlVHlw
ZSA6IDI7IC8vIENvZGVUeXBlCi0KLSAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkg
dmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndAotICAgIC8v
IGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1lc3BhY2VzLgot
ICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotCi0gICAgc3RydWN0IFJhcmVEYXRh
IHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAg
ICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0KLSAgICAgICAgLy8g
QnVmZmVycyB1c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0b3I8VmVj
dG9yPEpTVmFsdWU+PiBtX2NvbnN0YW50QnVmZmVyczsKLQotICAgICAgICAvLyBKdW1wIFRhYmxl
cwotICAgICAgICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsK
LQotICAgICAgICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLSAgICB9OwotCi0gICAg
dm9pZCBjbGVhckV4Y2VwdGlvbkhhbmRsZXJzKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3JhcmVE
YXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5jbGVhcigp
OwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kRXhjZXB0aW9uSGFuZGxlcihjb25zdCBIYW5kbGVy
SW5mbyYgaGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsgLy8gV2UgbWF5IGJlIGhhbmRsaW5nIHRoZSBleGNlcHRpb24gb2YgYW4gaW5saW5lZCBjYWxs
IGZyYW1lLgotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZCho
YW5kbGVyKTsKLSAgICB9Ci0KLSAgICBDYWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhhbmRsaW5n
Q2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwotCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQ
Q1RvQ29kZU9yaWdpbk1hcD4mJik7Ci0gICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZv
aWQqIHBjKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCk7Ci0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKLSNlbHNlCi0gICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwotCi0gICAgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwotICAgIAotICAgIENv
ZGVCbG9jayogc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKLSAgICAKLSAgICB2b2lkIG5v
dGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsKLSAgICAKLSAgICBkb3Vi
bGUgb3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpOwotCi0gICAgdm9pZCB1cGRh
dGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmls
ZXMpOwotCi0gICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKLQotICAgIHZv
aWQgcmVwbGFjZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRS
ZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMs
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBCeXRlY29kZSgKLSAgICAgICAgUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsCi0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7Ci0KLSAgICBDU3RyaW5n
IHJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3Q7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50
IGluZGV4KSBjb25zdDsKLSAgICB2b2lkIHByaW50VW5hcnlPcChQcmludFN0cmVhbSYsIEV4ZWNT
dGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3Ap
OwotICAgIHZvaWQgcHJpbnRCaW5hcnlPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBs
b2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwotICAgIHZvaWQg
cHJpbnRDb25kaXRpb25hbEp1bXAoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0
cnVjdGlvbiosIGNvbnN0IEluc3RydWN0aW9uKiYsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciog
b3ApOwotICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwotICAgIHZvaWQgcHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0
IFN0dWJJbmZvTWFwJik7Ci0gICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVtcENhY2hlcywgRG9u
dER1bXBDYWNoZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFtJiwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCwg
Q2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJik7Ci0gICAgdm9pZCBwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0
ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwot
ICAgIHZvaWQgcHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBpbnQgbG9jYXRp
b24sIGNvbnN0IFN0dWJJbmZvTWFwJik7Ci0gICAgdm9pZCBwcmludExvY2F0aW9uQW5kT3AoUHJp
bnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYs
IGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2b2lkIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3Bl
cmFuZChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5kKTsKLQotICAgIHZvaWQgYmVn
aW5EdW1wUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7
Ci0gICAgdm9pZCBkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVj
dGlvbiomLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBBcnJheVBy
b2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwotICAgIHZvaWQgZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYs
IGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOwotICAgIHZvaWQgZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYsIEFyaXRoUHJv
ZmlsZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotCi0gICAgYm9vbCBzaG91bGRWaXNp
dFN0cm9uZ2x5KCk7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgp
OwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpOwotICAgIAotICAgIHZvaWQg
cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxp
dmVuZXNzKFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhT
bG90VmlzaXRvciYpOwotCi0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lU2luY2VD
cmVhdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjpub3coKSAtIG1fY3JlYXRpb25UaW1lKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVE
YXRhKQotICAgICAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+
KCk7Ci0gICAgfQotCi0gICAgdm9pZCBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRy
b2xGbG93UHJvZmlsZXIoUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYpOwotCi0gICAgV3Jp
dGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKLSAgICBpbnQgbV9u
dW1QYXJhbWV0ZXJzOwotICAgIHVuaW9uIHsKLSAgICAgICAgdW5zaWduZWQgbV9kZWJ1Z2dlclJl
cXVlc3RzOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbV9oYXNEZWJ1
Z2dlclN0YXRlbWVudCA6IDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3N0ZXBwaW5nTW9kZSA6
IDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX251bUJyZWFrcG9pbnRzIDogMzA7Ci0gICAgICAg
IH07Ci0gICAgfTsKLSAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fb3duZXJFeGVj
dXRhYmxlOwotICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9u
PiBtX2luc3RydWN0aW9uczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBtdXRhYmxlIENvZGVCbG9j
a0hhc2ggbV9oYXNoOwotCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKLSAg
ICB1bnNpZ25lZCBtX3NvdXJjZU9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZUNvbHVt
bk9mZnNldDsKLQotICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4gbV9sbGlu
dENhbGxMaW5rSW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZv
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTElu
dENhbGxzOwotICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBv
aW50TWFwOwotICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Ci0jaWYgRU5BQkxFKEpJVCkK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJl
Z2lzdGVyczsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICBC
YWc8SklUTmVnSUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Ci0gICAg
QmFnPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7Ci0gICAgU2VudGlu
ZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFBv
bHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7Ci0jZW5k
aWYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcg
Y29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawotICAgIC8v
IGZvciBERkcgY29kZSBibG9ja3MuCi0gICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxl
OwotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciBtX2xhenlPcGVy
YW5kVmFsdWVQcm9maWxlczsKLSNlbmRpZgotICAgIFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2Zp
bGU+IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxWYWx1ZVBy
b2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9m
aWxlLCA4PiBtX3JhcmVDYXNlUHJvZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PEFycmF5QWxs
b2NhdGlvblByb2ZpbGU+IG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXM7Ci0gICAgQXJyYXlQcm9m
aWxlVmVjdG9yIG1fYXJyYXlQcm9maWxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8T2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU+IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzOwotCi0gICAgLy8gQ29u
c3RhbnQgUG9vbAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dy
aXRlQmFycmllcl9Vbmtub3duKTsKLSAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1c3QgYmUgYSBw
b2ludGVyIHRvIG1fdW5saW5rZWRDb2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERGRyBtdXRhdGVz
Ci0gICAgLy8gaXQsIHNvIHdlJ3JlIHN0dWNrIHdpdGggaXQgZm9yIG5vdy4KLSAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOwotICAgIFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxl
Pj4gbV9mdW5jdGlvbkRlY2xzOwotICAgIFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVu
Y3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwotCi0gICAgV3JpdGVCYXJyaWVyPENv
ZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKLSAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwotCi0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
IG1faml0RXhlY3V0ZUNvdW50ZXI7Ci0gICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKLSAg
ICB1aW50MTZfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKLSAgICB1aW50MTZfdCBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotCi0gICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6dGltZV9wb2ludCBtX2NyZWF0aW9uVGltZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3NBbmFseXNpczsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKLQotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwotICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIg
bV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyOwotfTsKLQotLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBt
YXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0Ci0vLyBy
ZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KLQotY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVi
bGljIENvZGVCbG9jayB7Ci0gICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJF
X0lORk87Ci0KLXByb3RlY3RlZDoKLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxvY2smIG90aGVy
KQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90
aGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1
bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBz
dHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3Vy
Y2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewot
ICAgIH0KLX07Ci0KLWNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJs
b2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERF
Q0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENv
cHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFByb2dyYW1FeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQot
ICAgIHsKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQ
cm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
b3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVy
LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRp
b24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFByb2dyYW1Db2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29k
ZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwg
Q29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUNvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
Ci0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19Owot
CiBjbGFzcyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAgLTExNTMsMjIz
ICs3NSw0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07
CiAKLWNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5GTzsK
LQotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2
bS0+aGVhcCkpCi0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZh
bENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICB7Ci0gICAgICAg
IEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZh
bENvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0t
PmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJp
YWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZh
cmlhYmxlKGluZGV4KTsgfQotICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVu
bGlua2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQotICAgIAotcHJpdmF0ZToK
LSAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJz
ZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0K
LSAgICAgICAgCi0gICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
LCBzb3VyY2VQcm92aWRlciwgMCwgMSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLXByaXZhdGU6Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5r
ZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KLX07Ci0KLWNsYXNzIEZ1
bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBzdGF0aWMgRnVuY3Rp
b25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25D
b2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5o
ZWFwKSkKLSAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBz
Y29wZSwKLSAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQot
ICAgIHsKLSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IENvZGVCbG9jayh2
bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAotICAgICAgICBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1
Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLQotI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLWNsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENv
ZGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNM
QVJFX0lORk87Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSog
dm0sIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQotICAg
IHsKLSAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAg
ICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBXZWJBc3NlbWJseUNv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2so
dm0sIHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRh
YmxlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
LCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90
aGVyKQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ss
IG90aGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICAgICAgOiBDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCi0gICAgewotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotI2VuZGlmCi0KLWlu
bGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKLXsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOwotICAg
IHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIo
VmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOwotfQot
Ci1pbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0g
ICAgcmV0dXJuIHRoaXNbaW5kZXhdOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIHJldHVybiB1bmNoZWNrZWRS
KHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSB2b2lkIENvZGVCbG9jazo6Y2xlYXJWaXNpdFdl
YWtseUhhc0JlZW5DYWxsZWQoKQotewotICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0
b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2Rl
QmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCi17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBj
YXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6
IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9jay5nZXQo
KSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZTogewotICAgICAgICBGdW5jdG9yIGYoc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwotICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRh
YmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5m
b3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJs
b2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENv
ZGVCbG9jayhmKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyktPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCi0gICAgICAgICAgICBjb2Rl
QmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRXhlY3V0YWJsZVR5cGU+Ci1KU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZv
ckV4ZWN1dGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBDb2RlQmxvY2sqJiByZXN1bHRDb2RlQmxvY2sp
Ci17Ci0gICAgaWYgKGhhc0pJVENvZGVGb3Ioa2luZCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6aXNf
c2FtZTxFeGVjdXRhYmxlVHlwZSwgRXZhbEV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAg
IHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPih0aGlzKS0+Y29kZUJsb2NrKCkpOwotICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8
RXhlY3V0YWJsZVR5cGUsIFByb2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAgICAgICAgICBy
ZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1l
PEV4ZWN1dGFibGVUeXBlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAg
ICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgIGVsc2UgaWYg
KHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlPjo6dmFsdWUp
Ci0gICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2tGb3Ioa2luZCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25J
bXBsKHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsIHJlc3VsdENvZGVCbG9jayk7Ci19Ci0KLSNk
ZWZpbmUgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFpbHMpIFwK
LSAgICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAo
KSB7IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzAzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJvZ3JhbUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTItMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBa
d2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFzaWNCbG9j
a0xvY2F0aW9uLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgor
I2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5j
bHVkZSAiREZHRHJpdmVyLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRG
R1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmgiCisjaW5jbHVkZSAiR2V0UHV0SW5mby5oIgorI2luY2x1ZGUgIklubGlu
ZUNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSklULmgi
CisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2lu
Y2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKKyNp
bmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKKyNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJMb3dMZXZlbEludGVycHJl
dGVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2lu
TWFwLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJQcm9maWxl
ckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUmVkdWNlV2hpdGVzcGFjZS5oIgorI2luY2x1ZGUgIlJl
cGF0Y2guaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdGFj
a1Zpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCisjaW5jbHVkZSAi
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9CYWdUb0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1NpbXBs
ZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBs
Lmg+CisKKyNpZiBFTkFCTEUoSklUKQorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0Lmgi
CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisjaW5jbHVkZSAiRlRMSklUQ29kZS5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gQ29kZUJsb2Nr
OjpzX2luZm8gPSB7CisgICAgIkNvZGVCbG9jayIsIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9U
QUJMRShDb2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25Db2RlQmxvY2s6
OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb25Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAor
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25Db2RlQmxvY2spCit9OworCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpz
X2luZm8gPSB7CisgICAgIldlYkFzc2VtYmx5Q29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwK
KyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5Q29kZUJsb2NrKQorfTsKKyNlbmRp
ZgorCitjb25zdCBDbGFzc0luZm8gR2xvYmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkds
b2JhbENvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJM
RShHbG9iYWxDb2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8gUHJvZ3JhbUNvZGVCbG9j
azo6c19pbmZvID0geworICAgICJQcm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwK
KyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb2dyYW1Db2RlQmxvY2spCit9OworCitjb25zdCBD
bGFzc0luZm8gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6c19pbmZvID0geworICAgICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RB
QkxFKE1vZHVsZVByb2dyYW1Db2RlQmxvY2spCit9OworCitjb25zdCBDbGFzc0luZm8gRXZhbENv
ZGVCbG9jazo6c19pbmZvID0geworICAgICJFdmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEV2YWxDb2RlQmxvY2spCit9OworCit2b2lkIEZ1
bmN0aW9uQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPihjZWxsKS0+fkZ1bmN0aW9uQ29kZUJsb2NrKCk7Cit9CisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCit2b2lkIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihjZWxsKS0+
fldlYkFzc2VtYmx5Q29kZUJsb2NrKCk7Cit9CisjZW5kaWYKKwordm9pZCBQcm9ncmFtQ29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8UHJvZ3JhbUNvZGVCbG9j
ayo+KGNlbGwpLT5+UHJvZ3JhbUNvZGVCbG9jaygpOworfQorCit2b2lkIE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKj4oY2VsbCktPn5Nb2R1bGVQcm9ncmFtQ29kZUJsb2NrKCk7Cit9CisKK3Zv
aWQgRXZhbENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEV2
YWxDb2RlQmxvY2sqPihjZWxsKS0+fkV2YWxDb2RlQmxvY2soKTsKK30KKworQ1N0cmluZyBDb2Rl
QmxvY2s6OmluZmVycmVkTmFtZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7
CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgICAgICByZXR1cm4gIjxnbG9iYWw+IjsKKyAgICBj
YXNlIEV2YWxDb2RlOgorICAgICAgICByZXR1cm4gIjxldmFsPiI7CisgICAgY2FzZSBGdW5jdGlv
bkNvZGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5pbmZlcnJlZE5hbWUoKS51dGY4KCk7CisgICAgY2FzZSBNb2R1bGVDb2Rl
OgorICAgICAgICByZXR1cm4gIjxtb2R1bGU+IjsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFT
SCgpOworICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisgICAgfQorfQorCitib29sIENv
ZGVCbG9jazo6aGFzSGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9oYXNoOworfQorCiti
b29sIENvZGVCbG9jazo6aXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCk7Cit9CisKK0NvZGVCbG9ja0hhc2ggQ29kZUJsb2NrOjpo
YXNoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGFzaCkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc1NhZmVUb0NvbXB1dGVIYXNoKCkpOworICAgICAgICBtX2hhc2ggPSBDb2RlQmxvY2tIYXNo
KG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKSwgc3BlY2lhbGl6YXRpb25LaW5kKCkp
OworICAgIH0KKyAgICByZXR1cm4gbV9oYXNoOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6c291
cmNlQ29kZUZvclRvb2xzKCkgY29uc3QKK3sKKyAgICBpZiAoY29kZVR5cGUoKSAhPSBGdW5jdGlv
bkNvZGUpCisgICAgICAgIHJldHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCku
dG9VVEY4KCk7CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gc291cmNlKCk7
CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSogdW5saW5rZWQgPSBleGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKKyAgICB1
bnNpZ25lZCB1bmxpbmtlZFN0YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCk7Cisg
ICAgdW5zaWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFy
dE9mZnNldCgpOworICAgIGludCBkZWx0YSA9IGxpbmtlZFN0YXJ0T2Zmc2V0IC0gdW5saW5rZWRT
dGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCByYW5nZVN0YXJ0ID0gZGVsdGEgKyB1bmxpbmtlZC0+
dW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydCgpOworICAgIHVuc2lnbmVkIHJhbmdlRW5kID0gZGVs
dGEgKyB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKSArIHVubGlua2VkLT5zb3VyY2VMZW5ndGgoKTsK
KyAgICByZXR1cm4gdG9DU3RyaW5nKAorICAgICAgICAiZnVuY3Rpb24gIiwKKyAgICAgICAgcHJv
dmlkZXItPnNvdXJjZSgpLnN1YnN0cmluZyhyYW5nZVN0YXJ0LCByYW5nZUVuZCAtIHJhbmdlU3Rh
cnQpLnV0ZjgoKSk7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlT25PbmVMaW5l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVkdWNlV2hpdGVzcGFjZShzb3VyY2VDb2RlRm9yVG9v
bHMoKSk7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkg
Y29uc3QKK3sKKyAgICBpZiAoaGFzSGFzaCgpIHx8IGlzU2FmZVRvQ29tcHV0ZUhhc2goKSkKKyAg
ICAgICAgcmV0dXJuIHRvQ1N0cmluZyhoYXNoKCkpOworICAgIHJldHVybiAiPG5vLWhhc2g+IjsK
K30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mIG91
dCwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKSBjb25zdAoreworICAgIG91dC5wcmludChpbmZl
cnJlZE5hbWUoKSwgIiMiLCBoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkpOworICAgIG91dC5wcmlu
dCgiOlsiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iKTsKKyAgICBpZiAoISFtX2FsdGVybmF0aXZl
KQorICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihhbHRlcm5hdGl2ZSgpKSwgIi0+Iik7Cisg
ICAgb3V0LnByaW50KFJhd1BvaW50ZXIob3duZXJFeGVjdXRhYmxlKCkpLCAiLCAiLCBqaXRUeXBl
LCBjb2RlVHlwZSgpKTsKKworICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAg
ICAgICAgb3V0LnByaW50KHNwZWNpYWxpemF0aW9uS2luZCgpKTsKKyAgICBvdXQucHJpbnQoIiwg
IiwgaW5zdHJ1Y3Rpb25Db3VudCgpKTsKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQorICAgICAgICBvdXQu
cHJpbnQoIiAoU2hvdWxkQWx3YXlzQmVJbmxpbmVkKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+bmV2ZXJJbmxpbmUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKE5ldmVySW5s
aW5lKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJPcHRpbWl6ZSgp
KQorICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJPcHRpbWl6ZSkiKTsKKyAgICBlbHNlIGlmIChv
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV2ZXJGVExPcHRpbWl6ZSgpKQorICAgICAgICBvdXQu
cHJpbnQoIiAoTmV2ZXJGVExPcHRpbWl6ZSkiKTsKKyAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKERpZFRy
eVRvRW50ZXJJbkxvb3ApIik7CisgICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pc1N0
cmljdE1vZGUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7CisgICAgaWYg
KG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKQorICAgICAgICBvdXQucHJpbnQoIiAoSklURmFpbCki
KTsKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUICYmIG1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uKQorICAgICAgICBvdXQucHJpbnQoIiAoRlRMRmFpbCkiKTsK
KyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUICYmIG1faGFz
QmVlbkNvbXBpbGVkV2l0aEZUTCkKKyAgICAgICAgb3V0LnByaW50KCIgKEhhZEZUTFJlcGxhY2Vt
ZW50KSIpOworICAgIG91dC5wcmludCgiXSIpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBBc3N1bWluZ0pJVFR5cGUob3V0LCBq
aXRUeXBlKCkpOworfQorCitzdGF0aWMgQ1N0cmluZyBpZE5hbWUoaW50IGlkMCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpCit7CisgICAgcmV0dXJuIHRvQ1N0cmluZyhpZGVudC5pbXBsKCksICIo
QGlkIiwgaWQwLCAiKSIpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6cmVnaXN0ZXJOYW1lKGlu
dCByKSBjb25zdAoreworICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChyKSkKKyAgICAg
ICAgcmV0dXJuIGNvbnN0YW50TmFtZShyKTsKKworICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVh
bFJlZ2lzdGVyKHIpKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6OmNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0YW50KGluZGV4KTsK
KyAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCks
ICIpIik7Cit9CisKK3N0YXRpYyBDU3RyaW5nIHJlZ2V4cFRvU291cmNlU3RyaW5nKFJlZ0V4cCog
cmVnRXhwKQoreworICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8nLCAwLCAwLCAwLCAwIH07Cisg
ICAgaW50IGluZGV4ID0gMTsKKyAgICBpZiAocmVnRXhwLT5nbG9iYWwoKSkKKyAgICAgICAgcG9z
dGZpeFtpbmRleCsrXSA9ICdnJzsKKyAgICBpZiAocmVnRXhwLT5pZ25vcmVDYXNlKCkpCisgICAg
ICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7CisgICAgaWYgKHJlZ0V4cC0+bXVsdGlsaW5lKCkp
CisgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOworICAgIGlmIChyZWdFeHAtPnN0aWNreSgp
KQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3knOworICAgIGlmIChyZWdFeHAtPnVuaWNv
ZGUoKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd1JzsKKworICAgIHJldHVybiB0b0NT
dHJpbmcoIi8iLCByZWdFeHAtPnBhdHRlcm4oKS5pbXBsKCksIHBvc3RmaXgpOworfQorCitzdGF0
aWMgQ1N0cmluZyByZWdleHBOYW1lKGludCByZSwgUmVnRXhwKiByZWdleHApCit7CisgICAgcmV0
dXJuIHRvQ1N0cmluZyhyZWdleHBUb1NvdXJjZVN0cmluZyhyZWdleHApLCAiKEByZSIsIHJlLCAi
KSIpOworfQorCitORVZFUl9JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnSG9va05hbWUo
aW50IGRlYnVnSG9va1R5cGUpCit7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tU
eXBlPihkZWJ1Z0hvb2tUeXBlKSkgeworICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgor
ICAgICAgICAgICAgcmV0dXJuICJkaWRFbnRlckNhbGxGcmFtZSI7CisgICAgICAgIGNhc2UgV2ls
bExlYXZlQ2FsbEZyYW1lOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxsTGVhdmVDYWxsRnJhbWUi
OworICAgICAgICBjYXNlIFdpbGxFeGVjdXRlU3RhdGVtZW50OgorICAgICAgICAgICAgcmV0dXJu
ICJ3aWxsRXhlY3V0ZVN0YXRlbWVudCI7CisgICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVFeHByZXNz
aW9uOgorICAgICAgICAgICAgcmV0dXJuICJ3aWxsRXhlY3V0ZUV4cHJlc3Npb24iOworICAgICAg
ICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbToKKyAgICAgICAgICAgIHJldHVybiAid2lsbEV4ZWN1
dGVQcm9ncmFtIjsKKyAgICAgICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbToKKyAgICAgICAgICAg
IHJldHVybiAiZGlkRXhlY3V0ZVByb2dyYW0iOworICAgICAgICBjYXNlIERpZFJlYWNoQnJlYWtw
b2ludDoKKyAgICAgICAgICAgIHJldHVybiAiZGlkUmVhY2hCcmVha3BvaW50IjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30KKwor
dm9pZCBDb2RlQmxvY2s6OnByaW50VW5hcnlPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUq
IGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciog
b3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6
cHJpbnRCaW5hcnlPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2Nh
dGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3ApCit7CisgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRDb25kaXRp
b25hbEp1bXAoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVj
dGlvbiosIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciog
b3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludGYoIiVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OnByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhl
YywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0KQoreworICAgIGNvbnN0IGNo
YXIqIG9wOworICAgIHN3aXRjaCAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaXQt
PnUub3Bjb2RlKSkgeworICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBvcCA9ICJnZXRf
YnlfaWQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90b19sb2Fk
OgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfcHJvdG9fbG9hZCI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Vuc2V0OgorICAgICAgICBvcCA9ICJnZXRfYnlfaWRfdW5z
ZXQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAg
ICAgIG9wID0gImFycmF5X2xlbmd0aCI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJfUVVJUkso
Q09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisgICAgICAgIG9wID0gMDsKKyNlbmRpZgorICAg
IH0KKyAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOworICAgIGl0ICs9
IDQ7IC8vIEluY3JlbWVudCB1cCB0byB0aGUgdmFsdWUgcHJvZmlsZXIuCit9CisKK3N0YXRpYyB2
b2lkIGR1bXBTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogbmFtZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIGlmICgh
c3RydWN0dXJlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgb3V0LnByaW50ZigiJXMgPSAl
cCIsIG5hbWUsIHN0cnVjdHVyZSk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoaWRlbnQuaW1wbCgpKTsKKyAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgIG91dC5wcmludGYoIiAob2Zmc2V0ID0gJWQpIiwg
b2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHVtcENoYWluKFByaW50U3RyZWFtJiBvdXQsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgb3V0
LnByaW50ZigiY2hhaW4gPSAlcDogWyIsIGNoYWluKTsKKyAgICBib29sIGZpcnN0ID0gdHJ1ZTsK
KyAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBjdXJyZW50U3RydWN0dXJlID0gY2hh
aW4tPmhlYWQoKTsKKyAgICAgICAgICpjdXJyZW50U3RydWN0dXJlOworICAgICAgICAgKytjdXJy
ZW50U3RydWN0dXJlKSB7CisgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgIGZpcnN0ID0g
ZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludGYoIiwgIik7CisgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgY3VycmVudFN0cnVjdHVyZS0+Z2V0KCks
IGlkZW50KTsKKyAgICB9CisgICAgb3V0LnByaW50ZigiXSIpOworfQorCit2b2lkIENvZGVCbG9j
azo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBl
eGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZvTWFwJiBtYXApCit7CisgICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGxvY2F0aW9uOwor
CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKGlkZW50KTsgLy8gdGVsbCB0aGUg
Y29tcGlsZXIgdG8gc2h1dCB1cCBpbiBjZXJ0YWluIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zLgor
ICAgIAorICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlv
blswXS51Lm9wY29kZSkgPT0gb3BfZ2V0X2FycmF5X2xlbmd0aCkKKyAgICAgICAgb3V0LnByaW50
ZigiIGxsaW50KGFycmF5X2xlbmd0aCkiKTsKKyAgICBlbHNlIGlmIChTdHJ1Y3R1cmVJRCBzdHJ1
Y3R1cmVJRCA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQpIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpOworICAgICAgICBvdXQucHJpbnRmKCIgbGxpbnQoIik7CisgICAgICAgIGR1bXBTdHJ1
Y3R1cmUob3V0LCAic3RydWN0Iiwgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgIG91dC5wcmlu
dGYoIikiKTsKKyAgICAgICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGlu
c3RydWN0aW9uWzBdLnUub3Bjb2RlKSA9PSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9hZCkKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiBwcm90byglcCkiLCBpbnN0cnVjdGlvbls2XS51LnBvaW50ZXIp
OworICAgIH0KKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViUHRyID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkpIHsKKyAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0dWJQdHI7CisgICAgICAgIGlmIChzdHViSW5mby5y
ZXNldEJ5R0MpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAoUmVzZXQgQnkgR0MpIik7CisgICAg
ICAgIAorICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOworICAgICAgICAgICAgCisgICAgICAg
IFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgICAgIFBvbHltb3JwaGlj
QWNjZXNzKiBzdHViID0gbnVsbHB0cjsKKyAgICAgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHN0
dWJJbmZvLmNhY2hlVHlwZSkgeworICAgICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
CisgICAgICAgICAgICBvdXQucHJpbnRmKCJzZWxmIik7CisgICAgICAgICAgICBiYXNlU3RydWN0
dXJlID0gc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgorICAgICAgICAg
ICAgb3V0LnByaW50Zigic3R1YiIpOworICAgICAgICAgICAgc3R1YiA9IHN0dWJJbmZvLnUuc3R1
YjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCJ1bnNldCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIG91dC5wcmludGYo
IkFycmF5TGVuZ3RoIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChiYXNlU3RydWN0dXJlKSB7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIsICIpOworICAgICAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJzdHJ1Y3QiLCBiYXNlU3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc3R1YikKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAqc3R1Yik7CisKKyAg
ICAgICAgb3V0LnByaW50ZigiKSIpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1h
cCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZENhY2hlU3RhdHVz
KFByaW50U3RyZWFtJiBvdXQsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkK
K3sKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigp
ICsgbG9jYXRpb247CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oaWRlbnQp
OyAvLyB0ZWxsIHRoZSBjb21waWxlciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29u
ZmlndXJhdGlvbnMuCisKKyAgICBvdXQucHJpbnQoIiwgIiwgaW5zdHJ1Y3Rpb25bOF0udS5wdXRC
eUlkRmxhZ3MpOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGluc3Ry
dWN0aW9uWzRdLnUuc3RydWN0dXJlSUQpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOworICAgICAg
ICBvdXQucHJpbnQoIiBsbGludCgiKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZUlEIG5ld1N0cnVj
dHVyZUlEID0gaW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRCkgeworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
bmV3U3RydWN0dXJlSUQpOworICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJwcmV2Iiwg
c3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAg
ICAgICBkdW1wU3RydWN0dXJlKG91dCwgIm5leHQiLCBuZXdTdHJ1Y3R1cmUsIGlkZW50KTsKKyAg
ICAgICAgICAgIGlmIChTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBpbnN0cnVjdGlvbls3XS51LnN0
cnVjdHVyZUNoYWluLmdldCgpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwor
ICAgICAgICAgICAgICAgIGR1bXBDaGFpbihvdXQsIGNoYWluLCBpZGVudCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1
Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfQor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQdHIgPSBt
YXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSAqc3R1YlB0cjsKKyAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0QnlHQykK
KyAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKKyAgICAgICAgCisgICAg
ICAgIG91dC5wcmludGYoIiBqaXQoIik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSkgeworICAgICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6
CisgICAgICAgICAgICBvdXQucHJpbnQoInJlcGxhY2UsICIpOworICAgICAgICAgICAgZHVtcFN0
cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIGlkZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENh
Y2hlVHlwZTo6U3R1YjogeworICAgICAgICAgICAgb3V0LnByaW50KCJzdHViLCAiLCAqc3R1Yklu
Zm8udS5zdHViKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q2FjaGVUeXBlOjpVbnNldDoKKyAgICAgICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBvdXQucHJpbnRmKCIpIik7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obWFwKTsK
KyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91
dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQs
IGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1By
aW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgbWFwKQoreworICAgIGludCBk
c3QgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgIGludCBhcmdDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCByZWdpc3Rl
ck9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludChyZWdpc3Rlck5hbWUoZHN0
KSwgIiwgIiwgcmVnaXN0ZXJOYW1lKGZ1bmMpLCAiLCAiLCBhcmdDb3VudCwgIiwgIiwgcmVnaXN0
ZXJPZmZzZXQpOworICAgIG91dC5wcmludCgiICh0aGlzIGF0ICIsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDAsIC1yZWdpc3Rlck9mZnNldCksICIpIik7CisgICAgaWYgKGNhY2hlRHVtcE1v
ZGUgPT0gRHVtcENhY2hlcykgeworICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gaXRbMV0udS5jYWxsTGlua0luZm87CisgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmxh
c3RTZWVuQ2FsbGVlKSB7CisgICAgICAgICAgICBvdXQucHJpbnRmKAorICAgICAgICAgICAgICAg
ICIgbGxpbnQoJXAsIGV4ZWMgJXApIiwKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmxh
c3RTZWVuQ2FsbGVlLmdldCgpLAorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNl
ZW5DYWxsZWUtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoSklUKQorICAg
ICAgICBpZiAoQ2FsbExpbmtJbmZvKiBpbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9u
KSkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGluZm8tPmxhc3RTZWVuQ2Fs
bGVlKCk7CisgICAgICAgICAgICBpZiAodGFyZ2V0KQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0LCB0YXJnZXQtPmV4ZWN1dGFibGUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6RlRM
SklUKQorICAgICAgICAgICAgb3V0LnByaW50KCIgc3RhdHVzKCIsIENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRm9yKHRoaXMsIGxvY2F0aW9uLCBtYXApLCAiKSIpOworI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG1hcCk7CisjZW5kaWYKKyAgICB9CisgICAgKytpdDsKKyAgICArK2l0OworICAg
IGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICBk
dW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUq
IGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciog
b3ApCit7CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IGlkMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwg
aWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICBp
dCArPSA1OworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcFNvdXJjZSgpCit7CisgICAgZHVtcFNv
dXJjZShXVEY6OmRhdGFGaWxlKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcFNvdXJjZShQ
cmludFN0cmVhbSYgb3V0KQoreworICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBv
d25lclNjcmlwdEV4ZWN1dGFibGUoKTsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4
ZWN1dGFibGUoKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7
CisgICAgICAgIFN0cmluZ1ZpZXcgc291cmNlID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5zb3VyY2Uo
KS5wcm92aWRlcigpLT5nZXRSYW5nZSgKKyAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCksCisgICAgICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSArIDEpOyAvLyBUeXBlIHByb2ZpbGluZyBlbmQgb2Zm
c2V0IGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSAnfScuCisgICAgICAgIAorICAgICAgICBv
dXQucHJpbnQoImZ1bmN0aW9uICIsIGluZmVycmVkTmFtZSgpLCBzb3VyY2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG91dC5wcmludChleGVjdXRhYmxlLT5zb3VyY2UoKS52aWV3KCkp
OworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKCkKK3sKKyAgICBkdW1wQnl0ZWNv
ZGUoV1RGOjpkYXRhRmlsZSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbSYgb3V0KQoreworICAgIC8vIFdlIG9ubHkgdXNlIHRoZSBFeGVjU3RhdGUqIGZv
ciB0aGluZ3MgdGhhdCBkb24ndCBhY3R1YWxseSBsZWFkIHRvIEpTIGV4ZWN1dGlvbiwKKyAgICAv
LyBsaWtlIGNvbnZlcnRpbmcgYSBKU1N0cmluZyB0byBhIFN0cmluZy4gSGVuY2UgdGhlIGdsb2Jh
bEV4ZWMgaXMgYXBwcm9wcmlhdGUuCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAKKyAgICBzaXplX3QgaW5zdHJ1Y3Rpb25Db3VudCA9IDA7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluc3RydWN0aW9ucygpLnNpemUoKTsgaSAr
PSBvcGNvZGVMZW5ndGhzW2V4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3RydWN0
aW9ucygpW2ldLnUub3Bjb2RlKV0pCisgICAgICAgICsraW5zdHJ1Y3Rpb25Db3VudDsKKworICAg
IG91dC5wcmludCgqdGhpcyk7CisgICAgb3V0LnByaW50ZigKKyAgICAgICAgIjogJWx1IG1faW5z
dHJ1Y3Rpb25zOyAlbHUgYnl0ZXM7ICVkIHBhcmFtZXRlcihzKTsgJWQgY2FsbGVlIHJlZ2lzdGVy
KHMpOyAlZCB2YXJpYWJsZShzKSIsCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KGluc3RydWN0aW9ucygpLnNpemUoKSksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KGluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpLAorICAgICAg
ICBtX251bVBhcmFtZXRlcnMsIG1fbnVtQ2FsbGVlTG9jYWxzLCBtX251bVZhcnMpOworICAgIG91
dC5wcmludCgiOyBzY29wZSBhdCAiLCBzY29wZVJlZ2lzdGVyKCkpOworICAgIG91dC5wcmludGYo
IlxuIik7CisgICAgCisgICAgU3R1YkluZm9NYXAgc3R1YkluZm9zOworICAgIENhbGxMaW5rSW5m
b01hcCBjYWxsTGlua0luZm9zOworICAgIGdldFN0dWJJbmZvTWFwKHN0dWJJbmZvcyk7CisgICAg
Z2V0Q2FsbExpbmtJbmZvTWFwKGNhbGxMaW5rSW5mb3MpOworICAgIAorICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgZHVtcEJ5dGVjb2Rl
KG91dCwgZXhlYywgYmVnaW4sIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5rSW5mb3MpOworICAgIAor
ICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgb3V0LnByaW50ZigiXG5J
ZGVudGlmaWVyczpcbiIpOworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiAgaWQldSA9ICVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaSksIGlkZW50aWZpZXIoaSkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgIT0gbnVtYmVyT2ZJZGVudGlmaWVycygpKTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fY29uc3RhbnRSZWdpc3RlcnMuaXNFbXB0eSgpKSB7CisgICAgICAg
IG91dC5wcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uRGVzY3JpcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgc3dpdGNoIChtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXSkgeworICAgICAgICAgICAgY2FzZSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVw
cmVzZW50YXRpb25EZXNjcmlwdGlvbiA9ICI6IGluIHNvdXJjZSBhcyBkb3VibGUiOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkludGVnZXI6CisgICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVz
Y3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgaW50ZWdlciI7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6Cisg
ICAgICAgICAgICAgICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5w
cmludGYoIiAgIGsldSA9ICVzJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgdG9DU3Ry
aW5nKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpLmRhdGEoKSwgc291cmNlQ29kZVJlcHJl
c2VudGF0aW9uRGVzY3JpcHRpb24pOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxl
IChpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgIH0KKworICAgIGlmIChzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZSZWdFeHBzKCkpIHsKKyAgICAgICAg
b3V0LnByaW50ZigiXG5tX3JlZ2V4cHM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGkgPSAwOworICAg
ICAgICBkbyB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIHJlJXUgPSAlc1xuIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGkpLCByZWdleHBUb1NvdXJjZVN0cmluZyhtX3VubGlua2VkQ29kZS0+
cmVnZXhwKGkpKS5kYXRhKCkpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChp
IDwgY291bnQpOworICAgIH0KKworICAgIGR1bXBFeGNlcHRpb25IYW5kbGVycyhvdXQpOworICAg
IAorICAgIGlmIChtX3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlN3aXRjaCBKdW1wIFRhYmxlczpcbiIp
OworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgb3V0
LnByaW50ZigiICAlMWQgPSB7XG4iLCBpKTsKKyAgICAgICAgICAgIGludCBlbnRyeSA9IDA7Cisg
ICAgICAgICAgICBWZWN0b3I8aW50MzJfdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFyZURh
dGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmVuZCgpOworICAgICAgICAg
ICAgZm9yIChWZWN0b3I8aW50MzJfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0uYnJhbmNoT2Zmc2V0cy5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyLCArK2VudHJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCEqaXRlcikKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiXHRc
dCU0ZCA9PiAlMDRkXG4iLCBlbnRyeSArIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tp
XS5taW4sICppdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGYoIiAg
ICAgIH1cbiIpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJl
RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIGlmICht
X3JhcmVEYXRhICYmICFtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlxuU3RyaW5nIFN3aXRjaCBKdW1wIFRhYmxlczpc
biIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
b3V0LnByaW50ZigiICAlMWQgPSB7XG4iLCBpKTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJs
ZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgICAg
IGZvciAoU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJs
ZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIlx0XHRcIiVzXCIgPT4gJTA0ZFxuIiwgaXRlci0+a2V5LT51dGY4KCkuZGF0YSgpLCBpdGVy
LT52YWx1ZS5icmFuY2hPZmZzZXQpOworICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAgfVxu
Iik7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBvdXQucHJpbnRm
KCJcbiIpOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50
U3RyZWFtJiBvdXQpCit7CisgICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludGYoIlxuRXhjZXB0
aW9uIEhhbmRsZXJzOlxuIik7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7
CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnNbaV07CisgICAgICAgICAgICBvdXQucHJpbnRmKCJcdCAlZDogeyBzdGFydDog
WyU0ZF0gZW5kOiBbJTRkXSB0YXJnZXQ6IFslNGRdIH0gJXNcbiIsCisgICAgICAgICAgICAgICAg
aSArIDEsIGhhbmRsZXIuc3RhcnQsIGhhbmRsZXIuZW5kLCBoYW5kbGVyLnRhcmdldCwgaGFuZGxl
ci50eXBlTmFtZSgpKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSA8IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjpiZWdpbkR1bXBQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgYm9vbCYgaGFz
UHJpbnRlZFByb2ZpbGluZykKK3sKKyAgICBpZiAoaGFzUHJpbnRlZFByb2ZpbGluZykgeworICAg
ICAgICBvdXQucHJpbnQoIjsgIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
b3V0LnByaW50KCIgICAgIik7CisgICAgaGFzUHJpbnRlZFByb2ZpbGluZyA9IHRydWU7Cit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiBpdCwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3sKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgICsraXQ7CisgICAg
Q1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LnByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9j
a2VyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0
LnByaW50KGRlc2NyaXB0aW9uKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBBcnJheVByb2Zp
bGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgCisgICAgKytpdDsKKyAgICBpZiAoIWl0LT51LmFycmF5UHJvZmlsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVByb2ZpbGUt
PmJyaWVmRGVzY3JpcHRpb24obG9ja2VyLCB0aGlzKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uLmxl
bmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0LnByaW50KGRlc2NyaXB0aW9uKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OmR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlLCBib29sJiBoYXNQcmludGVkUHJv
ZmlsaW5nKQoreworICAgIGlmICghcHJvZmlsZSB8fCAhcHJvZmlsZS0+bV9jb3VudGVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKKyAgICBvdXQucHJpbnQobmFtZSwgcHJvZmlsZS0+bV9jb3VudGVyKTsKK30KKwor
dm9pZCBDb2RlQmxvY2s6OmR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0mIG91dCwgQXJpdGhQ
cm9maWxlKiBwcm9maWxlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQoreworICAgIGlmICgh
cHJvZmlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJlZ2luRHVtcFByb2ZpbGluZyhv
dXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIG91dC5wcmludCgicmVzdWx0czogIiwgKnBy
b2ZpbGUpOworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbkFuZE9wKFByaW50U3Ry
ZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwg
Y29uc3QgY2hhciogb3ApCit7CisgICAgb3V0LnByaW50ZigiWyU0ZF0gJS0xN3MgIiwgbG9jYXRp
b24sIG9wKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVy
T3BlcmFuZChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5kKQorewor
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAg
IG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKG9wZXJhbmQpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCisgICAgUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYg
aXQsCisgICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExpbmtJbmZv
TWFwJiBjYWxsTGlua0luZm9zKQoreworICAgIGludCBsb2NhdGlvbiA9IGl0IC0gYmVnaW47Cisg
ICAgYm9vbCBoYXNQcmludGVkUHJvZmlsaW5nID0gZmFsc2U7CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2VudGVyOiB7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbnRlciIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGU6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Z2V0X3Njb3BlIiwgcjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1l
bnRzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMi
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9jbG9uZWRfYXJndW1lbnRzOiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9jbG9uZWRfYXJndW1lbnRz
Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYXJndW1l
bnRfY291bnQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiYXJndW1lbnRfY291bnQiLCByMCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRPZmZzZXQgPSAoKytpdCktPnUu
dW5zaWduZWRWYWx1ZTsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9yZXN0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJndW1l
bnRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9nZXRfcmVzdF9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZ2V0X3Jlc3RfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRP
ZmZzZXQgPSAoKytpdCktPnUudW5zaWduZWRWYWx1ZTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IkFyZ3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CisgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0
eSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgY2FjaGVkRnVuY3Rp
b24gPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV90aGlzIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICV1LCAldSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSwgY2FjaGVkRnVuY3Rpb24p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b190aGlz
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInRvX3RoaXMiLCByMCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9ICgr
K2l0KS0+dS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiLCBjYWNoZShzdHJ1Y3QgPSAiLCBSYXdQb2ludGVyKHN0
cnVjdHVyZSksICIpIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgKCsraXQpLT51LnRv
VGhpc1N0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2NoZWNrX3RkejogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9jaGVja190ZHoiLCByMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19vYmplY3Q6IHsKKyAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X29iamVjdCIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGluZmVy
cmVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBvYmplY3QgYWxs
b2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9uZXdfYXJyYXk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5Iik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoYXJndikuZGF0YSgpLCBhcmdjKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNr
aXAgYXJyYXkgYWxsb2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXlfd2l0aF9zaXplIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShs
ZW5ndGgpLmRhdGEoKSk7CisgICAgICAgICAgICArK2l0OyAvLyBTa2lwIGFycmF5IGFsbG9jYXRp
b24gcHJvZmlsZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfbmV3X2FycmF5X2J1ZmZlcjogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXlfYnVmZmVyIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQsICVkIiwgcmVnaXN0ZXJOYW1lKGRzdCku
ZGF0YSgpLCBhcmd2LCBhcmdjKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxs
b2NhdGlvbiBwcm9maWxlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9uZXdfcmVnZXhwOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCByZTAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19yZWdl
eHAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSk7CisgICAgICAgICAgICBpZiAocjAgPj0wICYmIHIwIDwgKGludCltX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZSZWdFeHBzKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCBy
ZWdleHBOYW1lKHJlMCwgcmVnZXhwKHJlMCkpLmRhdGEoKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50ZigiYmFkX3JlZ2V4cCglZCkiLCByZTApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tb3Y6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJtb3YiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICAr
K2l0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICAr
K2l0OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAib3BfcHJvZmlsZV90eXBlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6IHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gKCsraXQpLT51LmJhc2ljQmxvY2tM
b2NhdGlvbjsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInByb2ZpbGVfY29udHJvbF9mbG93Iik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCJbJWQsICVkXSIsIGJhc2ljQmxvY2tMb2NhdGlvbi0+c3RhcnRPZmZzZXQoKSwgYmFzaWNCbG9j
a0xvY2F0aW9uLT5lbmRPZmZzZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibm90Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2VxOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiZXEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiZXFfbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKKyAgICAgICAgICAgIHByaW50VW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcV9udWxsIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7CisgICAgICAgICAg
ICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic3RyaWN0ZXEiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbnN0cmljdGVxOiB7
CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibnN0
cmljdGVxIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2xlc3M6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJsZXNzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2xlc3NlcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImxlc3NlcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9ncmVhdGVyOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiZ3JlYXRlciIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9ncmVhdGVyZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJncmVhdGVyZXEiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW5jOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJl
Z2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluYyIsIHIwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVjOiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYyIsIHIw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9fbnVt
YmVyOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJ0b19udW1iZXIiKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBo
YXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfdG9fc3RyaW5nOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJ0b19zdHJpbmciKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZWdhdGUiKTsKKyAgICAgICAgICAgICsraXQ7
IC8vIG9wX25lZ2F0ZSBoYXMgYW4gZXh0cmEgb3BlcmFuZCBmb3IgdGhlIEFyaXRoUHJvZmlsZS4K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYWRkOiB7Cisg
ICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYWRkIik7
CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJtdWwiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RpdjogeworICAgICAgICAgICAgcHJpbnRC
aW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRpdiIpOworICAgICAgICAgICAgKytp
dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbW9kOiB7
CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibW9k
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Bvdzog
eworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInBv
dyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zdWI6
IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJz
dWIiKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2xzaGlmdDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxzaGlmdCIpOworICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgICAg
IHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyc2hpZnQiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdXJzaGlmdDogeworICAg
ICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVyc2hpZnQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0YW5k
OiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Yml0YW5kIik7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXR4b3IiKTsKKyAgICAgICAgICAgICsraXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdG9yOiB7Cisg
ICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYml0b3Ii
KTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2U6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm92ZXJyaWRl
c19oYXNfaW5zdGFuY2UiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfaW5zdGFuY2VvZjogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5zdGFuY2VvZiIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pbnN0YW5jZW9mX2N1c3RvbTog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0
YW5jZW9mX2N1c3RvbSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Vuc2lnbmVkOiB7CisgICAgICAg
ICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ1bnNpZ25lZCIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90eXBlb2Y6IHsK
KyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInR5cGVv
ZiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19l
bXB0eTogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiaXNfZW1wdHkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfaXNfdW5kZWZpbmVkOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJpc191bmRlZmluZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogeworICAgICAgICAgICAgcHJpbnRV
bmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfYm9vbGVhbiIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19udW1iZXI6IHsKKyAgICAg
ICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX251bWJlciIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19jZWxs
X3dpdGhfdHlwZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCB0
eXBlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19jZWxsX3dpdGhfdHlwZSIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2lzX29iamVjdDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfb2JqZWN0Iik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOiB7CisgICAg
ICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3Rf
b3JfbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9pc19mdW5jdGlvbjogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiaXNfZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfaW46IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJpbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF90cnlfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidHJ5X2dldF9ieV9p
ZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmll
cihpZDApKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQs
IGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xvYWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Vuc2V0OgorICAgICAgICBjYXNlIG9w
X2dldF9hcnJheV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0KTsKKyAgICAgICAgICAgIHByaW50R2V0QnlJZENhY2hlU3RhdHVzKG91
dCwgZXhlYywgbG9jYXRpb24sIHN0dWJJbmZvcyk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9m
aWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6IHsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9i
eV9pZF93aXRoX3RoaXMiKTsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjIpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOworICAg
ICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlf
dmFsX3dpdGhfdGhpczogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJnZXRfYnlfdmFsX3dpdGhfdGhpcyIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRh
dGEoKSk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRl
ZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3B1dF9ieV9pZDogeworICAgICAgICAgICAgcHJpbnRQdXRCeUlkT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJwdXRfYnlfaWQiKTsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZENhY2hl
U3RhdHVzKG91dCwgbG9jYXRpb24sIHN0dWJJbmZvcyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pZF93aXRo
X3RoaXMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBp
ZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX3dpdGhf
dGhpczogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJwdXRfYnlfdmFsX3dpdGhfdGhpcyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
LCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
YnlfaWQ6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgInB1dF9nZXR0ZXJfYnlfaWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIo
aWQwKSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X2lkOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBp
ZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0
dGVyX2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEo
KSwgbjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQ6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgbjAsIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfYnlfdmFs
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
dF9nZXR0ZXJfYnlfdmFsIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgbjAs
IHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3NldHRlcl9ieV92YWwiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRh
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kZWZp
bmVfZGF0YV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIzID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJkZWZpbmVfZGF0YV9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMp
LmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIz
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjQgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIz
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyNCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVsX2J5
X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlm
aWVyKGlkMCkpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9ieV92YWwiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAg
ICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAicHV0X2J5X3ZhbCIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcEFycmF5UHJv
ZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicHV0X2J5X3ZhbF9kaXJlY3QiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1bXBBcnJheVByb2ZpbGluZyhv
dXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVsX2J5X3ZhbCIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlf
aW5kZXg6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgdW5zaWduZWQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2luZGV4Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXUsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIG4wLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2ptcDogeworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiam1wIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlZCgtPiVkKSIsIG9mZnNldCwg
bG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0
LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9uLCAianRydWUiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CisgICAgICAgICAgICBwcmlu
dENvbmRpdGlvbmFsSnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqZmFsc2Ui
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamVxX251
bGw6IHsKKyAgICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4s
IGl0LCBsb2NhdGlvbiwgImplcV9udWxsIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogeworICAgICAgICAgICAgcHJpbnRDb25kaXRp
b25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9uLCAiam5lcV9udWxsIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIFNw
ZWNpYWw6OlBvaW50ZXIgcG9pbnRlciA9ICgrK2l0KS0+dS5zcGVjaWFsUG9pbnRlcjsKKyAgICAg
ICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpuZXFfcHRyIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQgKCVwKSwgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcG9pbnRlciwgbV9nbG9iYWxPYmplY3QtPmFjdHVhbFBvaW50ZXJGb3IocG9p
bnRlciksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgKytpdDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJqbGVzcyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgt
PiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
b2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2psZXNzZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbGVzc2VxIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqZ3JlYXRlciIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJqZ3JlYXRlcmVxIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+
JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBv
ZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5sZXNzIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNz
ZXE6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3NlcSIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImpuZ3JlYXRlciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0
LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5ncmVhdGVyZXEiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBv
ZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9s
b29wX2hpbnQ6IHsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImxvb3BfaGludCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF93YXRjaGRvZzogeworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAid2F0Y2hkb2ciKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xv
Z3VlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxvZ19zaGFk
b3dfY2hpY2tlbl9wcm9sb2d1ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAibG9nX3NoYWRvd19jaGlja2VuX3RhaWwiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3
aXRjaF9pbW06IHsKKyAgICAgICAgICAgIGludCB0YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJz
d2l0Y2hfaW1tIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCksICVzIiwg
dGFibGVJbmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdp
c3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7CisgICAgICAgICAgICBp
bnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGRlZmF1
bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY3J1dGluZWVS
ZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic3dpdGNoX2NoYXIiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwgJXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0
LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVyTmFtZShzY3J1dGluZWVSZWdpc3Rl
cikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3Bfc3dpdGNoX3N0cmluZzogeworICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInN3aXRjaF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgt
PiVkKSwgJXMiLCB0YWJsZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRU
YXJnZXQsIHJlZ2lzdGVyTmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm5ld19mdW5jIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19nZW5lcmF0b3JfZnVuYyIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hc3luY19mdW5jIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5l
d19mdW5jX2V4cCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9m
dW5jX2V4cDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jX2V4cCIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbmV3X2FzeW5jX2Z1bmNfZXhwOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXN5
bmNfZnVuY19leHAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3NldF9mdW5jdGlvbl9u
YW1lOiB7CisgICAgICAgICAgICBpbnQgZnVuY1JlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IG5hbWVSZWcgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInNldF9mdW5jdGlvbl9u
YW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZnVu
Y1JlZykuZGF0YSgpLCByZWdpc3Rlck5hbWUobmFtZVJlZykuZGF0YSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAg
cHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsIiwgRHVtcENhY2hlcywg
aGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDogeworICAgICAgICAgICAgcHJp
bnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0YWlsX2NhbGwiLCBEdW1wQ2FjaGVz
LCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBw
cmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGxfZXZhbCIsIERvbnREdW1w
Q2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzOiB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgY2FsbGVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgdGhpc1ZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYXJn
dW1lbnRzID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZmlyc3RGcmVlUmVn
aXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCB2YXJBcmdPZmZzZXQg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBvcE5hbWU7CisgICAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX2NhbGxfdmFyYXJn
cykKKyAgICAgICAgICAgICAgICBvcE5hbWUgPSAiY2FsbF92YXJhcmdzIjsKKyAgICAgICAgICAg
IGVsc2UgaWYgKG9wY29kZSA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykKKyAgICAgICAgICAgICAg
ICBvcE5hbWUgPSAiY29uc3RydWN0X3ZhcmFyZ3MiOworICAgICAgICAgICAgZWxzZSBpZiAob3Bj
b2RlID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAgICAgICAgICAgIG9wTmFtZSA9ICJ0
YWlsX2NhbGxfdmFyYXJncyI7CisgICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICAgICAgICAgIG9wTmFtZSA9ICJ0YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3BOYW1lKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUocmVzdWx0
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHRoaXNW
YWx1ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0RnJlZVJl
Z2lzdGVyLCB2YXJBcmdPZmZzZXQpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91
dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX3JldDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJh
bmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyZXQiLCByMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAgICAg
cHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb25zdHJ1Y3QiLCBEdW1wQ2Fj
aGVzLCBoYXNQcmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGNvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJz
dHJjYXQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGNvdW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fcHJpbWl0aXZlIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKSAt
IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19p
bmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUgPSBpdFs0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19pbmRleGVk
X3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcCIsIHJl
Z2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkgLSAxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAg
ICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVy
dHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBp
dFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Iik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0
YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9
IE9QQ09ERV9MRU5HVEgob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkgLSAxOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFt
ZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19nZW5lcmljX3Byb3BlcnR5Iik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRh
KCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfZ2VuZXJpY19wcm9w
ZXJ0eSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlu
ZGV4ID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFs1
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBpdFs2XS51
LnByb2ZpbGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9nZXRfZGlyZWN0X3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0
YSgpLCBwcm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2Rp
cmVjdF9wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0
ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvciIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3Byb3BlcnR5
X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBk
c3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVy
YXRvcikuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBp
dCArPSBPUENPREVfTEVOR1RIKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKSAtIDE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCByZWdpc3Rlck5h
bWUoaW5kZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAgIGludCBk
c3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFsyXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJvcF90b19pbmRleF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRh
KCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF90b19pbmRleF9zdHJpbmcp
IC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHVz
aF93aXRoX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgbmV3U2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBjdXJyZW50U2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1c2hfd2l0aF9zY29w
ZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShk
c3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKG5ld1Njb3BlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShj
dXJyZW50U2NvcGUpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwYXJlbnRTY29wZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZ2V0X3BhcmVudF9zY29wZSIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocGFyZW50U2Nv
cGUpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0g
KCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGluaXRpYWxWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzIiwgCisgICAgICAgICAgICAgICAgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHN5bWJvbFRhYmxlKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShpbml0aWFsVmFsdWUpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgICAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiY2F0Y2giKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93OiB7CisgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFu
ZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRocm93IiwgcjApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90aHJvd19zdGF0
aWNfZXJyb3I6IHsKKyAgICAgICAgICAgIGludCBrMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgRXJyb3JUeXBlIGsxID0gc3RhdGljX2Nhc3Q8RXJyb3JUeXBlPigoKytpdCktPnUu
dW5zaWduZWRWYWx1ZSk7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJ0aHJvd19zdGF0aWNfZXJyb3IiKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAiLCBjb25zdGFudE5hbWUoazApLmRhdGEoKSk7CisgICAgICAgICAgICBvdXQu
cHJpbnQoazEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9kZWJ1ZzogeworICAgICAgICAgICAgaW50IGRlYnVnSG9va1R5cGUgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBoYXNCcmVha3BvaW50RmxhZyA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZGVidWciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCIsIGRlYnVnSG9v
a05hbWUoZGVidWdIb29rVHlwZSksIGhhc0JyZWFrcG9pbnRGbGFnKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYXNzZXJ0OiB7CisgICAgICAgICAgICBp
bnQgY29uZGl0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGluZSA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiYXNzZXJ0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJWQiLCByZWdpc3Rlck5hbWUoY29uZGl0aW9uKS5kYXRhKCksIGxpbmUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbmQ6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZW5kIiwgcjApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBzY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oKCsraXQpLT51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgaW50IGRlcHRoID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICB2b2lkKiBwb2lu
dGVyID0gKCsraXQpLT51LnBvaW50ZXI7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJyZXNvbHZlX3Njb3BlIik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzLCA8JXM+LCAlZCwgJXAiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIo
aWQwKSkuZGF0YSgpLCByZXNvbHZlVHlwZU5hbWUocmVzb2x2ZVR5cGUpLCBkZXB0aCwgcG9pbnRl
cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9m
cm9tX3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlk
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZv
ID0gR2V0UHV0SW5mbygoKytpdCktPnUub3BlcmFuZCk7CisgICAgICAgICAgICArK2l0OyAvLyBT
dHJ1Y3R1cmUKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8v
IE9wZXJhbmQKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImdldF9mcm9tX3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJpbnQocmVnaXN0
ZXJOYW1lKHIwKSwgIiwgIiwgcmVnaXN0ZXJOYW1lKHIxKSk7CisgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGlkMCkgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIsIGFub255bW91cyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCAiLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSwgIjwiLCByZXNvbHZlTW9k
ZU5hbWUoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpKSwgInwiLCByZXNvbHZlVHlwZU5hbWUoZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpKSwgInwiLCBpbml0aWFsaXphdGlvbk1vZGVOYW1lKGdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLCAiPiwgIiwgb3BlcmFuZCk7CisgICAgICAgICAg
ICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dElu
Zm8oKCsraXQpLT51Lm9wZXJhbmQpOworICAgICAgICAgICAgKytpdDsgLy8gU3RydWN0dXJlCisg
ICAgICAgICAgICBpbnQgb3BlcmFuZCA9ICgrK2l0KS0+dS5vcGVyYW5kOyAvLyBPcGVyYW5kCisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJw
dXRfdG9fc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludChyZWdpc3Rlck5hbWUocjApKTsK
KyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgYW5vbnltb3VzIik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZp
ZXIoaWQwKSkpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIsIHJlZ2lzdGVyTmFtZShyMSks
ICIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29sdmVNb2RlTmFtZShnZXRQdXRJ
bmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFtZShnZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUoZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSksICI+LCA8c3RydWN0dXJlPiwgIiwgb3BlcmFuZCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9mcm9tX2FyZ3VtZW50cyIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQs
IGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF90
b19hcmd1bWVudHMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgb2Zmc2V0LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBkdW1wUmFyZUNh
c2VQcm9maWxlKG91dCwgInJhcmUgY2FzZTogIiwgcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQobG9jYXRpb24pLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB7CisgICAgICAgIGR1
bXBBcml0aFByb2ZpbGUob3V0LCBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChsb2NhdGlv
biksIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBWZWN0b3I8REZHOjpGcmVxdWVudEV4aXRTaXRlPiBleGl0U2l0ZXMgPSBleGl0UHJv
ZmlsZSgpLmV4aXRTaXRlc0Zvcihsb2NhdGlvbik7CisgICAgaWYgKCFleGl0U2l0ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIG91dC5wcmludCgiICEhIGZyZXF1ZW50IGV4aXRzOiAiKTsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXhpdFNpdGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBleGl0
U2l0ZXNbaV0ua2luZCgpLCAiICIsIGV4aXRTaXRlc1tpXS5qaXRUeXBlKCkpOworICAgIH0KKyNl
bHNlIC8vIEVOQUJMRShERkdfSklUKQorICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7CisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgb3V0LnByaW50KCJcbiIpOworfQorCit2b2lkIENv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LAorICAgIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0IENh
bGxMaW5rSW5mb01hcCYgY2FsbExpbmtJbmZvcykKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpdCA9
IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldDsKKyAgICBkdW1wQnl0ZWNv
ZGUob3V0LCBleGVjLCBpbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBpdCwgc3R1YkluZm9zLCBjYWxs
TGlua0luZm9zKTsKK30KKworI2RlZmluZSBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SKG1hY3JvKSBc
CisgICAgbWFjcm8oaW5zdHJ1Y3Rpb25zKSBcCisgICAgbWFjcm8oY2FsbExpbmtJbmZvcykgXAor
ICAgIG1hY3JvKGxpbmtlZENhbGxlckxpc3QpIFwKKyAgICBtYWNybyhpZGVudGlmaWVycykgXAor
ICAgIG1hY3JvKGZ1bmN0aW9uRXhwcmVzc2lvbnMpIFwKKyAgICBtYWNybyhjb25zdGFudFJlZ2lz
dGVycykKKworI2RlZmluZSBGT1JfRUFDSF9NRU1CRVJfVkVDVE9SX1JBUkVfREFUQShtYWNybykg
XAorICAgIG1hY3JvKHJlZ2V4cHMpIFwKKyAgICBtYWNybyhmdW5jdGlvbnMpIFwKKyAgICBtYWNy
byhleGNlcHRpb25IYW5kbGVycykgXAorICAgIG1hY3JvKHN3aXRjaEp1bXBUYWJsZXMpIFwKKyAg
ICBtYWNybyhzdHJpbmdTd2l0Y2hKdW1wVGFibGVzKSBcCisgICAgbWFjcm8oZXZhbENvZGVDYWNo
ZSkgXAorICAgIG1hY3JvKGV4cHJlc3Npb25JbmZvKSBcCisgICAgbWFjcm8obGluZUluZm8pIFwK
KyAgICBtYWNybyhjYWxsUmV0dXJuSW5kZXhWZWN0b3IpCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorewor
ICAgIHJldHVybiB2ZWN0b3IuY2FwYWNpdHkoKSAqIHNpemVvZihUKTsKK30KKworbmFtZXNwYWNl
IHsKKworY2xhc3MgUHV0VG9TY29wZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Citw
dWJsaWM6CisgICAgUHV0VG9TY29wZUZpcmVEZXRhaWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
KyAgICAgICAgLCBtX2lkZW50KGlkZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBvdXQu
cHJpbnQoIkxpbmtpbmcgcHV0X3RvX3Njb3BlIGluICIsIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAo
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSkpLCAiIGZvciAiLCBtX2lkZW50KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CisgICAgY29uc3QgSWRlbnRpZmllciYgbV9pZGVudDsKK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3Ro
ZXIpCisgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChv
dGhlci5tX2dsb2JhbE9iamVjdCkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVyLm1fbnVt
Q2FsbGVlTG9jYWxzKQorICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKKyAgICAsIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2Fw
YWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCisjZW5kaWYKKyAg
ICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9kaWRGYWlsRlRMQ29t
cGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisg
ICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQorICAgICwgbV9pc1N0
cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCisgICAgLCBtX2NvZGVUeXBlKG90aGVyLm1f
Y29kZVR5cGUpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgdGhpcywgb3RoZXIu
bV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNl
KQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251
bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgdGhp
cywgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBtX3ZtKG90aGVyLm1fdm0p
CisgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQorICAgICwgbV9zY29wZVJlZ2lzdGVyKG90
aGVyLm1fc2NvcGVSZWdpc3RlcikKKyAgICAsIG1faGFzaChvdGhlci5tX2hhc2gpCisgICAgLCBt
X3NvdXJjZShvdGhlci5tX3NvdXJjZSkKKyAgICAsIG1fc291cmNlT2Zmc2V0KG90aGVyLm1fc291
cmNlT2Zmc2V0KQorICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQob3RoZXIubV9maXJzdExp
bmVDb2x1bW5PZmZzZXQpCisgICAgLCBtX2NvbnN0YW50UmVnaXN0ZXJzKG90aGVyLm1fY29uc3Rh
bnRSZWdpc3RlcnMpCisgICAgLCBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihv
dGhlci5tX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKKyAgICAsIG1fZnVuY3Rp
b25EZWNscyhvdGhlci5tX2Z1bmN0aW9uRGVjbHMpCisgICAgLCBtX2Z1bmN0aW9uRXhwcnMob3Ro
ZXIubV9mdW5jdGlvbkV4cHJzKQorICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAgICwgbV9v
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIoMCkKKyAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6
Om5vdygpKQoreworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKworICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJy
ZWQoKSk7CisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisgICAgc2V0
TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworfQorCit2b2lkIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYg
b3RoZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgb3B0aW1pemVB
ZnRlcldhcm1VcCgpOworICAgIGppdEFmdGVyV2FybVVwKCk7CisKKyAgICBpZiAob3RoZXIubV9y
YXJlRGF0YSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
IAorICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzID0gb3RoZXIubV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9jb25zdGFu
dEJ1ZmZlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyczsKKyAgICAgICAg
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzOworICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgfQor
ICAgIAorICAgIGhlYXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7Cit9CisKK0NvZGVCbG9j
azo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAorICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpCisgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVj
dChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZtKCksIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3Qo
KSkKKyAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxl
ZUxvY2FscykKKyAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQor
ICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKKyNpZiBFTkFCTEUoSklUKQorICAg
ICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKKyNl
bmRpZgorICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChm
YWxzZSkKKyAgICAsIG1faXNDb25zdHJ1Y3Rvcih1bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpKQorICAgICwgbV9pc1N0cmljdE1vZGUodW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKQorICAgICwgbV9jb2RlVHlwZSh1bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSkK
KyAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB1bmxpbmtl
ZENvZGVCbG9jaykKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisgICAgLCBt
X3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJlYWtwb2lu
dHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlz
LCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKHVubGlua2VkQ29kZUJsb2NrLT52bSgpKQor
ICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpKQor
ICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkp
CisgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKKyAgICAsIG1fc291cmNlT2Zmc2V0KHNv
dXJjZU9mZnNldCkKKyAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KGZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCisg
ICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkKK3sK
KyAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisKKyAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOworICAg
IEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsKKworICAgIEFTU0VSVChtX3NvdXJj
ZSk7CisgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2ssCisgICAgSlNTY29wZSogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworCisgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJv
ZmlsZXIoKSkKKyAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVu
ZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG93bmVyRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ0VuZE9mZnNldCgpKTsKKworICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycygpLCB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkpOworICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+
dXNlc0dsb2JhbE9iamVjdCgpKQorICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2Vk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQo
Km1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgeworICAgICAgICBMaW5rVGlt
ZUNvbnN0YW50IHR5cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsKKyAgICAg
ICAgaWYgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+cmVnaXN0
ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpCisgICAgICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhpcywgbV9nbG9iYWxPYmplY3Qt
PmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOworICAgIH0KKworICAgIC8vIFdlIGFs
cmVhZHkgaGF2ZSB0aGUgY2xvbmVkIHN5bWJvbCB0YWJsZSBmb3IgdGhlIG1vZHVsZSBlbnZpcm9u
bWVudCBzaW5jZSB3ZSBuZWVkIHRvIGluc3RhbnRpYXRlCisgICAgLy8gdGhlIG1vZHVsZSBlbnZp
cm9ubWVudHMgYmVmb3JlIGxpbmtpbmcgdGhlIGNvZGUgYmxvY2suIFdlIHJlcGxhY2UgdGhlIHN0
b3JlZCBzeW1ib2wgdGFibGUgd2l0aCB0aGUgYWxyZWFkeSBjbG9uZWQgb25lLgorICAgIGlmIChV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKj4odW5s
aW5rZWRDb2RlQmxvY2spKSB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZWRTeW1ib2xUYWJs
ZSA9IGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPm1v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKTsKKyAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9m
aWxlcigpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjbG9uZWRT
eW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGNsb25lZFN5bWJvbFRhYmxlLT5wcmVw
YXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisgICAgICAgIHJlcGxhY2VD
b25zdGFudCh1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2stPm1vZHVsZUVudmlyb25tZW50
U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zmc2V0KCksIGNsb25lZFN5bWJvbFRhYmxlKTsK
KyAgICB9CisKKyAgICBib29sIHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSA9
IHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKTsKKyAgICBtX2Z1
bmN0aW9uRGVjbHMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0
YWJsZT4+KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSk7CisgICAg
Zm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChpKTsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSkKKyAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRV
bmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQo
Km1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRh
YmxlLT5zb3VyY2UoKSkpOworICAgIH0KKworICAgIG1fZnVuY3Rpb25FeHBycyA9IFJlZkNvdW50
ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4odW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpKTsKKyAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4
ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOworICAgICAgICBp
ZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKQorICAgICAgICAgICAgdm0u
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgp
KTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CisgICAg
fQorCisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT5oYXNSYXJlRGF0YSgpKSB7CisgICAgICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9
IHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlckNvdW50KCkpIHsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmdyb3coY291bnQpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRDb2RlQmxvY2s6OkNvbnN0YW50QnVmZmVyJiBidWZmZXIgPSB1bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIoaSk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkV4
Y2VwdGlvbkhhbmRsZXJzKCkpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5k
bGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4Y2VwdGlvbkhh
bmRsZXIoaSk7CisgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAg
ICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFi
ZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoTExJ
bnQ6OmdldENvZGVQdHIob3BfY2F0Y2gpKSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBoYW5k
bGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyKTsKKyNlbmRpZgorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBwdHIgPSB1
bmxpbmtlZENvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGkpLm9mZnNldFRhYmxlLmJl
Z2luKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09m
ZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB1bmxpbmtlZENvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKGkpLm9mZnNldFRhYmxlLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoOyBw
dHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgICAgICAgICBPZmZzZXRMb2NhdGlvbiBv
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldC5icmFuY2hPZmZzZXQgPSBwdHItPnZh
bHVlLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmFkZChwdHItPmtleSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRh
YmxlcygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuZ3Jv
dyhjb3VudCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc291cmNlVGFibGUg
PSB1bmxpbmtlZENvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICAgICAgICAg
IFNpbXBsZUp1bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzW2ldOworICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0gc291cmNl
VGFibGUuYnJhbmNoT2Zmc2V0czsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUubWluID0gc291
cmNlVGFibGUubWluOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
QWxsb2NhdGUgbWV0YWRhdGEgYnVmZmVycyBmb3IgdGhlIGJ5dGVjb2RlCisgICAgaWYgKHNpemVf
dCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mTExpbnRDYWxsTGlua0luZm9zKCkp
CisgICAgICAgIG1fbGxpbnRDYWxsTGlua0luZm9zID0gUmVmQ291bnRlZEFycmF5PExMSW50Q2Fs
bExpbmtJbmZvPihzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkpCisgICAgICAgIG1fYXJyYXlQcm9maWxlcy5ncm93
KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZkFycmF5QWxsb2NhdGlvblByb2ZpbGVzKCkpCisgICAgICAgIG1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZT4oc2l6ZSk7Cisg
ICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVmFsdWVQcm9m
aWxlcygpKQorICAgICAgICBtX3ZhbHVlUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8VmFsdWVQ
cm9maWxlPihzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMoKSkKKyAgICAgICAgbV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU+
KHNpemUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyNlbmRpZgor
CisgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBVbmxpbmtlZEluc3RydWN0aW9ucworICAg
IHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuY291bnQoKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtOjpSZWFkZXIgaW5z
dHJ1Y3Rpb25SZWFkZXIodW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKKworICAg
IC8vIEJvb2trZWVwIHRoZSBzdHJvbmdseSByZWZlcmVuY2VkIG1vZHVsZSBlbnZpcm9ubWVudHMu
CisgICAgSGFzaFNldDxKU01vZHVsZUVudmlyb25tZW50Kj4gc3Ryb25nbHlSZWZlcmVuY2VkTW9k
dWxlRW52aXJvbm1lbnRzOworCisgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBpbnN0
cnVjdGlvbnMoaW5zdHJ1Y3Rpb25Db3VudCk7CisKKyAgICB1bnNpZ25lZCB2YWx1ZVByb2ZpbGVD
b3VudCA9IDA7CisgICAgYXV0byBsaW5rVmFsdWVQcm9maWxlID0gWyZdKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCB1bnNpZ25lZCBvcExlbmd0aCkgeworICAgICAgICB1bnNpZ25lZCB2YWx1ZVBy
b2ZpbGVJbmRleCA9IHZhbHVlUHJvZmlsZUNvdW50Kys7CisgICAgICAgIFZhbHVlUHJvZmlsZSog
cHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbdmFsdWVQcm9maWxlSW5kZXhdOworICAgICAgICBB
U1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgIHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPSBieXRlY29kZU9mZnNldDsKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
W2J5dGVjb2RlT2Zmc2V0ICsgb3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CisgICAgfTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7ICFpbnN0cnVjdGlvblJlYWRlci5hdEVuZCgpOyApIHsKKyAg
ICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSBpbnN0cnVjdGlvblJlYWRlci5u
ZXh0KCk7CisKKyAgICAgICAgdW5zaWduZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgocGNbMF0u
dS5vcGNvZGUpOworCisgICAgICAgIGluc3RydWN0aW9uc1tpXSA9IHZtLmludGVycHJldGVyLT5n
ZXRPcGNvZGUocGNbMF0udS5vcGNvZGUpOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8
IG9wTGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0gc2l6
ZW9mKGludHB0cl90KSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUucG9p
bnRlciA9IDA7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFuZCA9IHBj
W2pdLnUub3BlcmFuZDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBjWzBdLnUub3Bjb2Rl
KSB7CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6IHsKKyAgICAgICAgICAg
IGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmls
ZShpKTsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1f
YXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90
YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNb
b3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJy
YXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworCisgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUlu
ZGV4XTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKKyAgICAgICAgY2FzZSBvcF90cnlfZ2V0X2J5
X2lkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgorICAgICAgICBjYXNl
IG9wX2dldF9mcm9tX2FyZ3VtZW50czoKKyAgICAgICAgY2FzZSBvcF90b19udW1iZXI6IHsKKyAg
ICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAg
ICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2Zp
bGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9h
cnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6IHsKKyAgICAgICAgICAg
IGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmls
ZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2Fy
cmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICAgICAgY2FzZSBvcF9uZXdf
YXJyYXlfYnVmZmVyOgorICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKKyAg
ICAgICAgICAgIGludCBhcnJheUFsbG9jYXRpb25Qcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAt
IDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAx
XSA9ICZtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzW2FycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRl
eF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19v
YmplY3Q6IHsKKyAgICAgICAgICAgIGludCBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4ID0g
cGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUgPSAmbV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZXNbb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBpbnQgaW5m
ZXJyZWRJbmxpbmVDYXBhY2l0eSA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworCisgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBvYmplY3RBbGxvY2F0aW9u
UHJvZmlsZTsKKyAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5pbml0aWFsaXpl
KHZtLAorICAgICAgICAgICAgICAgIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSwgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6
CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBsaW5rVmFsdWVQcm9m
aWxlKGksIG9wTGVuZ3RoKTsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBj
W29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2Fy
cmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5k
ZXhdOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XSA9ICZtX2xsaW50Q2FsbExpbmtJ
bmZvc1twY1s1XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbNV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAg
IGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICAgICAgQ1JB
U0goKTsKKworICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKKyAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihwY1s0
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHlwZSAhPSBMb2NhbENs
b3N1cmVWYXIpOworICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzVdLnUub3Bl
cmFuZDsKKworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNv
bHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUs
IGlkZW50LCBHZXQsIHR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24p
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBvcC50eXBlOwor
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51Lm9wZXJhbmQgPSBvcC5kZXB0aDsKKyAg
ICAgICAgICAgIGlmIChvcC5sZXhpY2FsRW52aXJvbm1lbnQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAob3AudHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCB0
aGUgbGlua2VkIG1vZHVsZSBlbnZpcm9ubWVudCBzdHJvbmdseSByZWZlcmVuY2VkLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoc3Ryb25nbHlSZWZlcmVuY2VkTW9kdWxlRW52aXJvbm1lbnRzLmFk
ZChqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KG9wLmxleGljYWxFbnZpcm9ubWVudCkpLmlz
TmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb25zdGFudChvcC5sZXhpY2Fs
RW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUu
anNDZWxsLnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnN5
bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJs
ZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2sob3AudHlwZSwgdGhpcykpCisgICAgICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIGNvbnN0
YW50U2NvcGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNl0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogeworICAgICAgICAgICAgbGlu
a1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisKKyAgICAgICAgICAgIC8vIGdldF9mcm9tX3Nj
b3BlIGRzdCwgc2NvcGUsIGlkLCBHZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKworICAg
ICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5wb2ludGVyID0gbnVsbHB0cjsKKworICAgICAgICAg
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhwY1s0XS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgQVNTRVJUKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6
YXRpb25Nb2RlKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkg
PT0gTG9jYWxDbG9zdXJlVmFyKSB7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0
XSA9IEdldFB1dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBDbG9zdXJlVmFyLCBnZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUmVzb2x2ZU9w
IG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJ
bmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2Rl
KCkpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IE1vZHVsZVZhcikKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1dEluZm8o
Z2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBDbG9zdXJlVmFyLCBnZXRQdXRJbmZvLmluaXRpYWxp
emF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CisgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9i
YWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9w
LnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUu
c3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3Bl
cmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3Bf
cHV0X3RvX3Njb3BlOiB7CisgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2
YWx1ZSwgR2V0UHV0SW5mbywgU3RydWN0dXJlLCBPcGVyYW5kCisgICAgICAgICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgeworICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1
dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHBjWzJdLnUub3BlcmFuZCkgIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXggPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxl
LT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChp
dGVyICE9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7CisgICAgICAgICAgICAgICAgICAgIGl0
ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgp
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gaWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaW50IGxvY2FsU2Nv
cGVEZXB0aCA9IHBjWzVdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2Nv
cGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNj
b3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgUHV0LCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGdl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworCisgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgp
LCBvcC50eXBlLCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7Cisg
ICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0
Y2hwb2ludFNldDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhciB8
fCBvcC50eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wLndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAgICAgIG9wLndh
dGNocG9pbnRTZXQtPmludmFsaWRhdGUodm0sIFB1dFRvU2NvcGVGaXJlRGV0YWlsKHRoaXMsIGlk
ZW50KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CisKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6IHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxlcigpKTsKKyAgICAgICAgICAgIC8vIFRoZSBm
b3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogb3BfcHJvZmlsZV90eXBlIHJlZ1RvUHJvZmls
ZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRpZmllcj8sIHJlc29sdmVUeXBlPworICAgICAg
ICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOworICAgICAgICAgICAgR2xvYmFs
VmFyaWFibGVJRCBnbG9iYWxWYXJpYWJsZUlEID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxUeXBl
U2V0PiBnbG9iYWxUeXBlU2V0OworICAgICAgICAgICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91
bmxpbmtlZENvZGUtPnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQo
aW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9maWxlUmVnaXN0ZXIocGNbMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIFByb2ZpbGVUeXBlQnl0ZWNvZGVGbGFnIGZsYWcgPSBzdGF0aWNfY2FzdDxQcm9maWxlVHlw
ZUJ5dGVjb2RlRmxhZz4ocGNbM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZmxhZykgewor
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2RlQ2xvc3VyZVZhcjogeworICAgICAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1s0XS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1syXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICAgICAgUmVzb2x2ZVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFJl
c29sdmVUeXBlPihwY1s1XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhv
dWdoIHR5cGUgcHJvZmlsaW5nIG1heSBiZSBwcm9maWxpbmcgZWl0aGVyIGEgR2V0IG9yIGEgUHV0
LCB3ZSBjYW4gYWx3YXlzIGNsYWltIGEgR2V0IGJlY2F1c2UKKyAgICAgICAgICAgICAgICAvLyB3
ZSdyZSBhYnN0cmFjdGx5ICJyZWFkImluZyBmcm9tIGEgSlNTY29wZS4KKyAgICAgICAgICAgICAg
ICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSwg
SW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisKKyAgICAgICAgICAgICAg
ICBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gTW9kdWxlVmFyKQorICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG9wLmxleGljYWxFbnZpcm9ubWVudC0+c3lt
Ym9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcC50eXBlID09IEdsb2JhbFZh
cikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBtX2dsb2JhbE9iamVjdC5nZXQo
KS0+c3ltYm9sVGFibGUoKTsKKworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
bXBsID0gKG9wLnR5cGUgPT0gTW9kdWxlVmFyKSA/IG9wLmltcG9ydGVkTmFtZS5nZXQoKSA6IGlk
ZW50LmltcGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVGFibGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0
ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJl
ZCBmb3IgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnBy
ZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bFZhcmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlt
cGwsIHZtKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxl
LT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBUeXBl
UHJvZmlsZXJOb0dsb2JhbElERXhpc3RzOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVMb2NhbGx5UmVz
b2x2ZWQ6IHsKKyAgICAgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nh
c3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3
YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZl
IHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgorICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlh
YmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50Lmlt
cGwoKSwgdm0pOworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+
Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7CisKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHJv
ZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQ6IAorICAgICAgICAgICAgY2FzZSBQ
cm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25Bcmd1bWVudDogeworICAgICAgICAgICAgICAgIGds
b2JhbFZhcmlhYmxlSUQgPSBUeXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlw
ZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvd25lckV4ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkpOworICAg
ICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKS0+cmV0dXJuU3RhdGVtZW50VHlwZVNldCgpOworICAgICAgICAgICAg
ICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBUeXBlUHJvZmlsZXJSZXR1cm5TdGF0ZW1lbnQ7CisgICAg
ICAgICAgICAgICAgaWYgKCFzaG91bGRBbmFseXplKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEJlY2F1c2UgYSByZXR1cm4gc3RhdGVtZW50IGNhbiBiZSBhZGRlZCBpbXBsaWNpdGx5IHRvIHJl
dHVybiB1bmRlZmluZWQgYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAvLyBhbmQgdGhlc2Ugbm9kZXMgZG9uJ3QgZW1pdCBleHByZXNzaW9uIHJhbmdlcyBiZWNh
dXNlIHRoZXkgYXJlbid0IGluIHRoZSBhY3R1YWwgc291cmNlIHRleHQgb2YKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIHVzZXIncyBwcm9ncmFtLCBnaXZlIHRoZSB0eXBlIHByb2ZpbGVyIHNv
bWUgcmFuZ2UgdG8gaWRlbnRpZnkgdGhlc2UgcmV0dXJuIHN0YXRlbWVudHMuCisgICAgICAgICAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIHRleHQgb2Zmc2V0IHRoYXQgaXMgdXNlZCBhcyBp
ZGVudGlmaWNhdGlvbiBpcyAiZiIgaW4gdGhlIGZ1bmN0aW9uIGtleXdvcmQKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIGlzIHN0b3JlZCBvbiBUeXBlTG9jYXRpb24ncyBtX2Rpdm90Rm9yRnVu
Y3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCBtZW1iZXIgdmFyaWFibGUuCisgICAgICAgICAg
ICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVuZCA9IG93bmVyRXhlY3V0YWJsZS0+dHlwZVBy
b2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEFuYWx5emUg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2Nh
dGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9IHZtLnR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRp
b25DYWNoZSgpLT5nZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKKyAgICAgICAgICAg
ICAgICBvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBn
bG9iYWxUeXBlU2V0LCAmdm0pOworICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9
IGxvY2F0aW9uUGFpci5maXJzdDsKKyAgICAgICAgICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGxv
Y2F0aW9uUGFpci5zZWNvbmQ7CisKKyAgICAgICAgICAgIGlmIChmbGFnID09IFByb2ZpbGVUeXBl
Qnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCkKKyAgICAgICAgICAgICAgICBsb2NhdGlv
bi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25lckV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworCisgICAgICAgICAgICBpZiAoc2hv
dWxkQW5hbHl6ZSAmJiBpc05ld0xvY2F0aW9uKQorICAgICAgICAgICAgICAgIHZtLnR5cGVQcm9m
aWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CisKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgMl0udS5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CisgICAgICAgICAgICBpZiAo
cGNbMV0udS5pbmRleCA9PSBEaWRSZWFjaEJyZWFrcG9pbnQpCisgICAgICAgICAgICAgICAgbV9o
YXNEZWJ1Z2dlclN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0aW9uc1tpICsgM10udS5vcGVyYW5kOworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAgPj0gMCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwID09IG51bVBhcmFtZXRlcnMoKSAtIDEsICJXZSBhc3N1bWUg
dGhhdCB0aGlzIGlzIHRydWUgd2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3QgcGFyYW1ldGVy
IGR1cmluZyBPU1IgZXhpdCBpbiB0aGUgRlRMIEpJVC4iKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGkgKz0gb3BMZW5ndGg7CisgICAgfQorCisgICAgaWYgKHZtLmNvbnRyb2xG
bG93UHJvZmlsZXIoKSkKKyAgICAgICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250
cm9sRmxvd1Byb2ZpbGVyKGluc3RydWN0aW9ucyk7CisKKyAgICBtX2luc3RydWN0aW9ucyA9IFdU
Rk1vdmUoaW5zdHJ1Y3Rpb25zKTsKKworICAgIC8vIFNldCBvcHRpbWl6YXRpb24gdGhyZXNob2xk
cyBvbmx5IGFmdGVyIG1faW5zdHJ1Y3Rpb25zIGlzIGluaXRpYWxpemVkLCBzaW5jZSB0aGVzZQor
ICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBw
ZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQorICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0
byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KKyAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKCk7CisgICAgaml0QWZ0ZXJXYXJtVXAoKTsKKworICAgIC8vIElmIHRoZSBj
b25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0aGVuIGNv
bXB1dGUgaXQgaGVyZQorICAgIC8vIHN5bmNocm9ub3VzbHkuCisgICAgaWYgKE9wdGlvbnM6OmFs
d2F5c0NvbXB1dGVIYXNoKCkpCisgICAgICAgIGhhc2goKTsKKworICAgIGlmIChPcHRpb25zOjpk
dW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCisgICAgICAgIGR1bXBCeXRlY29kZSgpOworICAgIAor
ICAgIGhlYXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7CisgICAgaGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1
Y3Rpb24pKTsKK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK0NvZGVCbG9jazo6Q29kZUJs
b2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogSlND
ZWxsKCp2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52
bSgpLCB0aGlzLCBnbG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZUxvY2FscygwKQorICAg
ICwgbV9udW1WYXJzKDApCisgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZChmYWxzZSkKKyNp
ZiBFTkFCTEUoSklUKQorICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhbm5vdENv
bXBpbGUpCisjZW5kaWYKKyAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQorICAg
ICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxl
ZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2lzQ29uc3RydWN0b3IoZmFsc2UpCisgICAgLCBtX2lz
U3RyaWN0TW9kZShmYWxzZSkKKyAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQorICAgICwg
bV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBw
aW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVha3BvaW50cygwKQorICAgICwgbV9vd25l
ckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93bmVyRXhlY3V0YWJsZSkK
KyAgICAsIG1fdm0odm0pCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigwKQorICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93
KCkpCit7CisgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgpKTsKK30KKwordm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIGhl
YXAoKS0+bV9jb2RlQmxvY2tzLT5hZGQodGhpcyk7Cit9CisjZW5kaWYKKworQ29kZUJsb2NrOjp+
Q29kZUJsb2NrKCkKK3sKKyAgICBpZiAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAg
ICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMp
OworCisgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkgPT0gTWl4ZWRU
cmlTdGF0ZSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoRmFs
c2VUcmlTdGF0ZSk7CisKKyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgIGR1
bXBWYWx1ZVByb2ZpbGVzKCk7CisjZW5kaWYKKworICAgIC8vIFdlIG1heSBiZSBkZXN0cm95ZWQg
YmVmb3JlIGFueSBDb2RlQmxvY2tzIHRoYXQgcmVmZXIgdG8gdXMgYXJlIGRlc3Ryb3llZC4KKyAg
ICAvLyBDb25zaWRlciB0aGF0IHR3byBDb2RlQmxvY2tzIGJlY29tZSB1bnJlYWNoYWJsZSBhdCB0
aGUgc2FtZSB0aW1lLiBUaGVyZQorICAgIC8vIGlzIG5vIGd1YXJhbnRlZSBhYm91dCB0aGUgb3Jk
ZXIgaW4gd2hpY2ggdGhlIENvZGVCbG9ja3MgYXJlIGRlc3Ryb3llZC4KKyAgICAvLyBTbywgaWYg
d2UgZG9uJ3QgcmVtb3ZlIGluY29taW5nIGNhbGxzLCBhbmQgZ2V0IGRlc3Ryb3llZCBiZWZvcmUg
dGhlCisgICAgLy8gQ29kZUJsb2NrKHMpIHRoYXQgaGF2ZSBjYWxscyBpbnRvIHVzLCB0aGVuIHRo
ZSBDYWxsTGlua0luZm8gdmVjdG9yJ3MKKyAgICAvLyBkZXN0cnVjdG9yIHdpbGwgdHJ5IHRvIHJl
bW92ZSBub2RlcyBmcm9tIG91ciAobm8gbG9uZ2VyIHZhbGlkKSBsaW5rZWQgbGlzdC4KKyAgICB1
bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgCisgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2lu
ZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJworICAgIC8vIG1f
aW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+
Q2FsbExpbmtJbmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCisKKyNpZiBFTkFCTEUoSklUKQorICAg
IGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9z
LmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViID0gKml0ZXI7CisgICAgICAgIHN0dWItPmFib3V0VG9EaWUoKTsKKyAgICAgICAgc3R1Yi0+
ZGVyZWYoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBj
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCit7CisgICAgQVNTRVJUKGNvbnN0YW50
cy5zaXplKCkgPT0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNpemUoKSk7Cisg
ICAgc2l6ZV90IGNvdW50ID0gY29uc3RhbnRzLnNpemUoKTsKKyAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICBib29sIGhhc1R5cGVQcm9maWxlciA9ICEhbV92
bS0+dHlwZVByb2ZpbGVyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBjb25zdGFudHNbaV0uZ2V0KCk7CisKKyAg
ICAgICAgaWYgKCFjb25zdGFudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4oY29uc3RhbnQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc1R5cGVQcm9maWxlcikgeworICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5n
KGxvY2tlcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgU3ltYm9sVGFi
bGUqIGNsb25lID0gc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKTsKKyAgICAgICAg
ICAgICAgICBpZiAod2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpKQorICAgICAgICAg
ICAgICAgICAgICBjbG9uZS0+c2V0UmFyZURhdGFDb2RlQmxvY2sodGhpcyk7CisKKyAgICAgICAg
ICAgICAgICBjb25zdGFudCA9IGNsb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIHRoaXMsIGNvbnN0YW50KTsK
KyAgICB9CisKKyAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNldEFs
dGVybmF0aXZlKFZNJiB2bSwgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSkKK3sKKyAgICBtX2FsdGVy
bmF0aXZlLnNldCh2bSwgdGhpcywgYWx0ZXJuYXRpdmUpOworfQorCit2b2lkIENvZGVCbG9jazo6
c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpCit7CisgICAgbV9udW1QYXJhbWV0ZXJzID0g
bmV3VmFsdWU7CisKKyAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJh
eTxWYWx1ZVByb2ZpbGU+KG5ld1ZhbHVlKTsKK30KKwordm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBFdmFsQ2FjaGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fY2FjaGVNYXAuZW5kKCk7CisgICAgZm9yIChFdmFsQ2FjaGVNYXA6Oml0
ZXJhdG9yIHB0ciA9IG1fY2FjaGVNYXAuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnZhbHVlKTsKK30KKworQ29kZUJsb2NrKiBDb2RlQmxv
Y2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkKK3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KyAgICBpZiAoaml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKKyAgICByZXR1
cm4gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCit9CisKK3ZvaWQgQ29kZUJs
b2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBib29sIHNldEJ5
TWUgPSAhbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZh
bHNlLCB0cnVlKTsKKyAgICBpZiAoIXNldEJ5TWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwg
ZmluYWxpemVyczogaW5saW5lIGNhY2hlIGNsZWFyaW5nCisgICAgLy8gYW5kIGpldHRpc29uaW5n
LiBUaGUgcHJvYmFiaWxpdHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhv
c2UgdGhpbmdzCisgICAgLy8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRk
IG9uZSBubyBtYXR0ZXIgd2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAorICAgIC8vIGZpZ3VyZXMg
b3V0IHdoZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgorICAgIHZpc2l0b3IuYWRkVW5jb25k
aXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKworICAgIGlmICgh
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIElmIHdlIGpldHRpc29uIG91cnNlbHZlcyB3ZSdsbCBpbnN0YWxsIG91ciBhbHRlcm5h
dGl2ZSwgc28gbWFrZSBzdXJlIHRoYXQgaXQKKyAgICAvLyBzdXJ2aXZlcyBHQyBldmVuIGlmIHdl
IGRvbid0LgorICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVybmF0aXZlKTsKKyAgICAKKyAgICAv
LyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IHdlIHVzZSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0
ZXJzIGZvcjogREZHIGZpeHBvaW50IGZvcgorICAgIC8vIGpldHRpc29uaW5nLCBhbmQgdHJ5aW5n
IHRvIGZpbmQgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGxpdmUgYmFzZWQgb24gc29tZQorICAg
IC8vIGlubGluZSBjYWNoZS4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gcmVnaXN0ZXIgdGhlbSByZWdh
cmRsZXNzLgorICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcigmbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVyKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFdlIGdldCBo
ZXJlIGlmIHdlJ3JlIGxpdmUgaW4gdGhlIHNlbnNlIHRoYXQgb3VyIG93bmVyIGV4ZWN1dGFibGUg
aXMgbGl2ZSwKKyAgICAvLyBidXQgd2UncmUgbm90IHlldCBsaXZlIGZvciBzdXJlIGluIGFub3Ro
ZXIgc2Vuc2U6IHdlIG1heSB5ZXQgZGVjaWRlIHRoYXQgdGhpcworICAgIC8vIGNvZGUgYmxvY2sg
c2hvdWxkIGJlIGpldHRpc29uZWQgYmFzZWQgb24gaXRzIG91dGdvaW5nIHdlYWsgcmVmZXJlbmNl
cyBiZWluZworICAgIC8vIHN0YWxlLiBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2UncmUg
c3RpbGwgYXNzdW1pbmcgdGhhdCB3ZSdyZSBkZWFkLCBhbmQKKyAgICAvLyBwZXJmb3JtIG9uZSBy
b3VuZCBvZiBkZXRlcm1pbmluZyBpZiB3ZSdyZSBsaXZlLiBUaGUgR0MgbWF5IGRldGVybWluZSwg
YmFzZWQgb24KKyAgICAvLyBlaXRoZXIgdXMgbWFya2luZyBhZGRpdGlvbmFsIG9iamVjdHMsIG9y
IGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2VkIGZvcgorICAgIC8vIG90aGVyIHJlYXNvbnMs
IHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1biBhZ2FpbjsgaXQgd2lsbCBub3RpZnkgdXMg
b2YgdGhpcworICAgIC8vIGRlY2lzaW9uIGJ5IGNhbGxpbmcgaGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCkuCisKKyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKKyAgICBw
cm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKworICAgIG1faml0Q29kZS0+ZGZnQ29tbW9u
KCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAgIGRldGVybWluZUxpdmVuZXNz
KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCitzaXplX3QgQ29kZUJs
b2NrOjplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBDb2RlQmxvY2sqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CisgICAgc2l6ZV90IGV4dHJhTWVtb3J5
QWxsb2NhdGVkID0gdGhpc09iamVjdC0+bV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKElu
c3RydWN0aW9uKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9qaXRDb2RlKQorICAgICAgICBleHRy
YU1lbW9yeUFsbG9jYXRlZCArPSB0aGlzT2JqZWN0LT5tX2ppdENvZGUtPnNpemUoKTsKKyAgICBy
ZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIGV4dHJhTWVtb3J5QWxsb2NhdGVkOwor
fQorCit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxDb2Rl
QmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3ZvaWQgQ29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIC8vIFRo
ZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6
IGlubGluZSBjYWNoZSBjbGVhcmluZworICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2Jh
YmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwor
ICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0
dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKKyAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVy
IGl0IGhhcyBhbnkgd29yayB0byBkby4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisKKyAgICBpZiAoQ29kZUJsb2NrKiBv
dGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihvdGhlckJsb2NrKTsKKworICAgIGlm
IChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1f
aml0Q29kZS0+c2l6ZSgpKTsKKyAgICBpZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgpKQorICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX2luc3RydWN0aW9ucy5zaXplKCkg
KiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7CisKKyAg
ICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICBzdHJvbmdseVZp
c2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisKKyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJl
ZW5NYXJrZWQgPSBmYWxzZTsKKyAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKK30K
KworYm9vbCBDb2RlQmxvY2s6OnNob3VsZFZpc2l0U3Ryb25nbHkoKQoreworICAgIGlmIChPcHRp
b25zOjpmb3JjZUNvZGVCbG9ja0xpdmVuZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0
IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2Vz
IGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCisgICAgLy8gc2Nh
bm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpCit7CisgICAgaWYgKCFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAh
SGVhcDo6aXNNYXJrZWQodGhpcyk7Cit9CisKK3N0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIHRpbWVUb0xpdmUoSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQoreworICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp1c2VFYWdlckNvZGVCbG9ja0pldHRpc29uVGltaW5nKCkpKSB7CisgICAg
ICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgICAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVy
VGh1bms6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMCk7
CisgICAgICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMCArIDIwKTsKKyAgICAgICAgY2FzZSBKSVRDb2Rl
OjpERkdKSVQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg0
MCk7CisgICAgICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTIwKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN3aXRjaCAoaml0VHlwZSkgeworICAgIGNhc2UgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuazoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpKTsKKyAgICBj
YXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgorICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRp
dGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAorICAgICAgICAvLyBJbnRlcnBy
ZXRlclRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86
OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNl
Y29uZHMoNSArIDEwKSk7CisgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CisgICAgICAgIHJldHVy
biBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihz
dGQ6OmNocm9ubzo6c2Vjb25kcygyMCkpOworICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNjApKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7CisgICAgfQorfQorCiti
b29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpCit7CisgICAgaWYgKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9P
bGRBZ2UoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICh0aW1lU2luY2VD
cmVhdGlvbigpIDwgdGltZVRvTGl2ZShqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3N0YXRp
YyBib29sIHNob3VsZE1hcmtUcmFuc2l0aW9uKERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24m
IHRyYW5zaXRpb24pCit7CisgICAgaWYgKHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luICYmICFIZWFw
Ojppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KHRyYW5zaXRpb24ubV9mcm9tLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit2
b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworCisgICAgaWYgKG1fYWxsVHJhbnNpdGlv
bnNIYXZlQmVlbk1hcmtlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBhbGxBcmVNYXJr
ZWRTb0ZhciA9IHRydWU7CisgICAgICAgIAorICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOworICAgIGlmIChqaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykgeworICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV1dOwor
ICAgICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUpKSB7CisgICAgICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogeworICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb25bNF0udS5z
dHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9
IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQ7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRT
dHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJlSUQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0KKyAgICAgICAgICAg
ICAgICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlE
KTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9CisgICAgICAgICAg
ICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJ
RCk7CisgICAgICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KG9sZFN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRS
ZWFkT25seVBvaW50ZXIobmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisjaWYgRU5B
QkxFKEpJVCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBm
b3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikKKyAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyICY9
ICgqaXRlciktPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOworICAgIH0KKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgIGZvciAoYXV0byYg
d2Vha1JlZmVyZW5jZSA6IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCisgICAg
ICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciAmPSB3ZWFrUmVmZXJlbmNlLT5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdD
b21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxk
TWFya1RyYW5zaXRpb24oZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXSkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUg
dGFyZ2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZl
OgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBUaGlzIGNvZGUgYmxv
Y2suIFdlIGtub3cgaXQncyBsaXZlIGFscmVhZHkgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAgICAg
ICAgICAgICAvLyAgIHdlIHdvdWxkbid0IGJlIHNjYW5uaW5nIG91cnNlbHZlcy4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gVGhlIGNvZGUgb3JpZ2luIG9mIHRoZSB0
cmFuc2l0aW9uLiBUcmFuc2l0aW9ucyBtYXkgYXJpc2UgZnJvbQorICAgICAgICAgICAgICAgIC8v
ICAgY29kZSB0aGF0IHdhcyBpbmxpbmVkLiBUaGV5IGFyZSBub3QgcmVsZXZhbnQgaWYgdGhlIHVz
ZXIncworICAgICAgICAgICAgICAgIC8vICAgb2JqZWN0IHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRo
ZSBpbmxpbmVlIHRvIHJ1biBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyAgIGxpdmUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBzb3VyY2Ugb2Yg
dGhlIHRyYW5zaXRpb24uIFRoZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisgICAgICAgICAg
ICAgICAgLy8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3Rv
cmVzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291cmNlIG11
c3QgYmUgbGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2hvcnQtY2lyY3VpdCB0aGUgbGl2ZW5l
c3MgaWYgdGhlIHN0cnVjdHVyZSBpcyBoYXJtbGVzcworICAgICAgICAgICAgICAgIC8vIHRvIG1h
cmsgKGkuZS4gaXRzIGdsb2JhbCBvYmplY3QgYW5kIHByb3RvdHlwZSBhcmUgYm90aCBhbHJlYWR5
CisgICAgICAgICAgICAgICAgLy8gbGl2ZSkuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90byk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorICAgIAor
ICAgIGlmIChhbGxBcmVNYXJrZWRTb0ZhcikKKyAgICAgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVC
ZWVuTWFya2VkID0gdHJ1ZTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNz
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAg
ICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFueSByZW1h
aW5pbmcgd29yayB0byBkby4KKyAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0
Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgaWYgKGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJv
dmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gTm93IGNoZWNrIGFsbCBvZiBvdXIg
d2VhayByZWZlcmVuY2VzLiBJZiBhbGwgb2YgdGhlbSBhcmUgbGl2ZSwgdGhlbiB3ZQorICAgIC8v
IGhhdmUgcHJvdmVkIGxpdmVuZXNzIGFuZCBzbyB3ZSBzY2FuIG91ciBzdHJvbmcgcmVmZXJlbmNl
cy4gSWYgYXQgZW5kIG9mCisgICAgLy8gR0Mgd2Ugc3RpbGwgaGF2ZSBub3QgcHJvdmVkIGxpdmVu
ZXNzLCB0aGVuIHRoaXMgY29kZSBibG9jayBpcyB0b2FzdC4KKyAgICBib29sIGFsbEFyZUxpdmVT
b0ZhciA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vh
a1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENv
bmN1cnJlbnRseShkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpKSkgeworICAgICAg
ICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoYWxsQXJlTGl2ZVNvRmFyKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGRm
Z0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7CisgICAgICAgICAg
ICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgc29tZSB3ZWFr
IHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBmaXhwb2ludCBpdGVyYXRpb24gd2FzCisg
ICAgLy8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3Jk
IHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAgICAvLyBjb21lIGJhY2sgaGVyZSBhZ2Fp
biwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgorICAgIGRmZ0NvbW1vbi0+bGl2ZW5l
c3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVh
ZE9ubHlQb2ludGVyKHRoaXMpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lk
IENvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9CisgICAg
ICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIpKTsKKworICAgIGNvZGVCbG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRv
cik7CisgICAgY29kZUJsb2NrLT5kZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OmNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQoreworICAgIGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShv
cF9nZXRfYnlfaWQpOworICAgIGluc3RydWN0aW9uWzRdLnUucG9pbnRlciA9IG51bGxwdHI7Cisg
ICAgaW5zdHJ1Y3Rpb25bNV0udS5wb2ludGVyID0gbnVsbHB0cjsKKyAgICBpbnN0cnVjdGlvbls2
XS51LnBvaW50ZXIgPSBudWxscHRyOworfQorCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTElu
dElubGluZUNhY2hlcygpCit7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChtX293
bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCisKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnBy
ZXRlcjsKKyAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOworICAg
IGZvciAoc2l6ZV90IHNpemUgPSBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlv
biA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CisgICAg
ICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlKSkgeworICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfcHJvdG9fbG9hZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6IHsK
KyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gY3VySW5zdHJ1Y3Rpb25b
NF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgSGVh
cDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVy
ZUlEKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBw
cm9wZXJ0eSBhY2Nlc3MuXG4iKTsKKyAgICAgICAgICAgIGNsZWFyTExJbnRHZXRCeUlkQ2FjaGUo
Y3VySW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVy
ZUlEID0gY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRDsKKyAgICAgICAgICAgIFN0cnVj
dHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsK
KyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGN1ckluc3RydWN0aW9uWzddLnUu
c3RydWN0dXJlQ2hhaW4uZ2V0KCk7CisgICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8
fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3Ry
dWN0dXJlSUQpKSkgJiYKKyAgICAgICAgICAgICAgICAoIW5ld1N0cnVjdHVyZUlEIHx8IEhlYXA6
OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJ
RCkpKSAmJgorICAgICAgICAgICAgICAgICghY2hhaW4gfHwgSGVhcDo6aXNNYXJrZWQoY2hhaW4p
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHB1dCB0
cmFuc2l0aW9uLlxuIik7CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVy
ZUlEID0gMDsKKyAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzVdLnUub3BlcmFuZCA9IDA7Cisg
ICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEID0gMDsKKyAgICAgICAg
ICAgIGN1ckluc3RydWN0aW9uWzddLnUuc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgICAgICAg
ICBpZiAoIWN1ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKGN1
ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHRvX3RoaXMgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4i
LCBjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBjdXJJ
bnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgY3VySW5zdHJ1
Y3Rpb25bM10udS50b1RoaXNTdGF0dXMgPSBtZXJnZSgKKyAgICAgICAgICAgICAgICBjdXJJbnN0
cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5R0MpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKKyAgICAgICAgICAgIGF1
dG8mIGNhY2hlV3JpdGVCYXJyaWVyID0gY3VySW5zdHJ1Y3Rpb25bNF0udS5qc0NlbGw7CisgICAg
ICAgICAgICBpZiAoIWNhY2hlV3JpdGVCYXJyaWVyIHx8IGNhY2hlV3JpdGVCYXJyaWVyLnVudmFs
aWRhdGVkR2V0KCkgPT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBKU0NlbGwqIGNhY2hlZEZ1bmN0aW9uID0g
Y2FjaGVXcml0ZUJhcnJpZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQo
Y2FjaGVkRnVuY3Rpb24pKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgTExJbnQgY3JlYXRlX3RoaXMgd2l0aCBjYWNoZWQgY2FsbGVlICVwLlxuIiwgY2FjaGVkRnVu
Y3Rpb24pOworICAgICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewor
ICAgICAgICAgICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBB
bnkgc3ltYm9sIHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZlciB0bworICAgICAgICAgICAgLy8g
YXJlIGZvciBvdXRlciBmdW5jdGlvbnMsIGFuZCB3ZSByZWZlciB0byB0aG9zZSBmdW5jdGlvbnMg
c3Ryb25nbHksIGFuZCB0aGV5IHJlZmVyCisgICAgICAgICAgICAvLyB0byB0aGUgc3ltYm9sIHRh
YmxlIHN0cm9uZ2x5LiBCdXQgaXQncyBuaWNlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuCisgICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUgPSBjdXJJ
bnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlOworICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJs
ZSB8fCBIZWFwOjppc01hcmtlZChzeW1ib2xUYWJsZS5nZXQoKSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIHN5bWJvbFRhYmxlICVwLlxuIiwgc3ltYm9s
VGFibGUuZ2V0KCkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Cisg
ICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CisgICAgICAgICAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1ckluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhciB8fCBnZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyAK
KyAgICAgICAgICAgICAgICB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9z
dXJlVmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiYgc3RydWN0dXJlID0gY3VySW5zdHJ1Y3Rpb25bNV0udS5z
dHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtlZChz
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgc2NvcGUgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0g
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2RlKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKG9wY29kZUlELCBmYWxzZSwgIlVu
aGFuZGxlZCBvcGNvZGUgaW4gQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSwgJXMo
JWQpIGF0IGJjICV1Iiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCBvcGNvZGVJRCwgcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgY2Fu
J3QganVzdCByZW1vdmUgYWxsIHRoZSBzZXRzIHdoZW4gd2UgY2xlYXIgdGhlIGNhY2hlcyBzaW5j
ZSB3ZSBtaWdodCBoYXZlIGNyZWF0ZWQgYSB3YXRjaHBvaW50IHNldAorICAgIC8vIHRoZW4gY2xl
YXJlZCB0aGUgY2FjaGUgd2l0aG91dCBHQ2luZyBpbiBiZXR3ZWVuLgorICAgIG1fbGxpbnRHZXRC
eUlkV2F0Y2hwb2ludE1hcC5yZW1vdmVJZihbXShjb25zdCBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFw
OjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWlyKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuICFIZWFw
Ojppc01hcmtlZChwYWlyLmtleSk7CisgICAgfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9sbGludENhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
bGxpbnRDYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxp
bnRDYWxsTGlua0luZm9zW2ldLmNhbGxlZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgTExJ
bnQgY2FsbCBmcm9tICIsICp0aGlzLCAiXG4iKTsKKyAgICAgICAgICAgIG1fbGxpbnRDYWxsTGlu
a0luZm9zW2ldLnVubGluaygpOworICAgICAgICB9CisgICAgICAgIGlmICghIW1fbGxpbnRDYWxs
TGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlICYmICFIZWFwOjppc01hcmtlZChtX2xsaW50Q2Fs
bExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZS5nZXQoKSkpCisgICAgICAgICAgICBtX2xsaW50
Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZS5jbGVhcigpOworICAgIH0KK30KKwordm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQoreworI2lmIEVO
QUJMRShKSVQpCisgICAgZm9yIChhdXRvIGl0ZXIgPSBjYWxsTGlua0luZm9zQmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnZpc2l0V2Vhaygqdm0oKSk7CisKKyAgICBm
b3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSAqKml0ZXI7CisgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXModGhp
cyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmlu
YWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXIpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChjb2RlQmxvY2stPnNo
b3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCkpIHsKKyAgICAgICAgY29kZUJsb2NrLT5q
ZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisgICAgaWYgKGNvZGVC
bG9jay0+c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKSB7CisgICAgICAgIGNvZGVCbG9jay0+
amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChjb2RlQmxvY2st
PmppdFR5cGUoKSkpCisgICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoISFjb2RlQmxvY2stPmppdENvZGUoKSkK
KyAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KQoreworI2lmIEVOQUJMRShKSVQpCisg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpCisgICAgICAgIHRvSGFzaE1hcChtX3N0
dWJJbmZvcywgZ2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luLCByZXN1bHQpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6
Z2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCkKK3sKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldFN0dWJJbmZvTWFwKGxvY2tlciwgcmVzdWx0
KTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb01hcChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpCit7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKKyAgICAgICAgdG9IYXNoTWFw
KG1fY2FsbExpbmtJbmZvcywgZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbiwgcmVzdWx0KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxv
Y2s6OmdldENhbGxMaW5rSW5mb01hcChDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKK3sKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGdldENhbGxMaW5rSW5mb01h
cChsb2NrZXIsIHJlc3VsdCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXAo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KQoreworI2lm
IEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKKyAgICAg
ICAgZm9yIChhdXRvKiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCisgICAgICAgICAgICByZXN1
bHQuYWRkKENvZGVPcmlnaW4oYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KSwgYnlWYWxJbmZvKTsK
KyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpnZXRCeVZhbEluZm9NYXAoQnlWYWxJbmZvTWFwJiByZXN1bHQpCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBnZXRCeVZhbEluZm9N
YXAobG9ja2VyLCByZXN1bHQpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK1N0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKK3sKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBtX3N0dWJJ
bmZvcy5hZGQoYWNjZXNzVHlwZSk7Cit9CisKK0pJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFk
ZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsKK30KKworSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMo
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fbXVsSUNzLmFkZChh
cml0aFByb2ZpbGUpOworfQorCitKSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQyhBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7Cit9CisKK0pJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9m
aWxlKTsKK30KKworU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29kZU9yaWdpbiA9
PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworQnlWYWxJbmZvKiBDb2RlQmxvY2s6OmFkZEJ5VmFsSW5mbygp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4g
bV9ieVZhbEluZm9zLmFkZCgpOworfQorCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6YWRkQ2Fs
bExpbmtJbmZvKCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIHJldHVybiBtX2NhbGxMaW5rSW5mb3MuYWRkKCk7Cit9CisKK0NhbGxMaW5rSW5mbyogQ29k
ZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGluZGV4KQor
eworICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7ICEhaXRlcjsg
KytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdp
bihpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gKml0ZXI7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIENvZGVCbG9jazo6cmVzZXRKSVREYXRhKCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSk7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICAvLyBXZSBjYW4gY2xlYXIgdGhlc2Ug
YmVjYXVzZSBubyBvdGhlciB0aHJlYWQgd2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gYW55IHN0dWIg
aW5mb3MsIGNhbGwKKyAgICAvLyBsaW5rIGluZm9zLCBvciBieSB2YWwgaW5mb3MgaWYgd2UgZG9u
J3QgaGF2ZSBKSVQgY29kZS4gQXR0ZW1wdHMgdG8gcXVlcnkgdGhlc2UgZGF0YQorICAgIC8vIHN0
cnVjdHVyZXMgdXNpbmcgdGhlIGNvbmN1cnJlbnQgQVBJIChnZXRTdHViSW5mb01hcCBhbmQgZnJp
ZW5kcykgd2lsbCByZXR1cm4gbm90aGluZyBpZiB3ZQorICAgIC8vIGRvbid0IGhhdmUgSklUIGNv
ZGUuCisgICAgbV9zdHViSW5mb3MuY2xlYXIoKTsKKyAgICBtX2NhbGxMaW5rSW5mb3MuY2xlYXIo
KTsKKyAgICBtX2J5VmFsSW5mb3MuY2xlYXIoKTsKKyAgICAKKyAgICAvLyBXZSBjYW4gY2xlYXIg
dGhpcyBiZWNhdXNlIHRoZSBERkcncyBxdWVyaWVzIHRvIHRoZXNlIGRhdGEgc3RydWN0dXJlcyBh
cmUgZ3VhcmRlZCBieSB3aGV0aGVyCisgICAgLy8gdGhlcmUgaXMgSklUIGNvZGUuCisgICAgbV9y
YXJlQ2FzZVByb2ZpbGVzLmNsZWFyKCk7Cit9CisjZW5kaWYKKwordm9pZCBDb2RlQmxvY2s6OnZp
c2l0T1NSRXhpdFRhcmdldHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gV2Ugc3Ry
b25nbHkgdmlzaXQgT1NSIGV4aXRzIHRhcmdldHMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRl
YWwgd2l0aAorICAgIC8vIHRoZSBjb21wbGV4aXR5IG9mIGdlbmVyYXRpbmcgYW4gZXhpdCB0YXJn
ZXQgQ29kZUJsb2NrIG9uIGRlbWFuZCBhbmQKKyAgICAvLyBndWFyYW50ZWVpbmcgdGhhdCBpdCBt
YXRjaGVzIHRoZSBkZXRhaWxzIG9mIHRoZSBDb2RlQmxvY2sgd2UgY29tcGlsZWQKKyAgICAvLyB0
aGUgT1NSIGV4aXQgYWdhaW5zdC4KKworICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVybmF0aXZl
KTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICBpZiAoZGZnQ29tbW9uLT5pbmxpbmVDYWxs
RnJhbWVzKSB7CisgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmRmZ0NvbW1v
bi0+aW5saW5lQ2FsbEZyYW1lcykgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICB9CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3Qp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKKyAgICBpZiAobV9yYXJlRGF0YSkKKyAgICAgICAgbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKG1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgpLCBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9u
RXhwcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRXhw
cnNbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlY2xzLnNpemUo
KTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9mdW5jdGlvbkRlY2xzW2ldKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzW2ldLnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3IgKEJ5VmFsSW5mbyog
YnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnlWYWxJ
bmZvLT5jYWNoZWRTeW1ib2wpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAgIHZpc2l0T1NS
RXhpdFRhcmdldHModmlzaXRvcik7CisjZW5kaWYKKworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworCisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgh
IWRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luKQorICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luKTsgLy8g
QWxtb3N0IGNlcnRhaW5seSBub3QgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgY29kZSBvcmlnaW4gc2hv
dWxkIGFsc28gYmUgYSB3ZWFrIHJlZmVyZW5jZS4gQmV0dGVyIHRvIGJlIHNhZmUsIHRob3VnaC4K
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9mcm9t
KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV90
byk7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24t
PndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZn
Q29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXNbaV0p
OworCisgICAgZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSB0cnVlOworI2VuZGlm
ICAgIAorfQorCitDb2RlQmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVBbHRlcm5hdGl2ZSgpCit7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHRoaXM7CisgICAgd2hp
bGUgKHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5hbHRl
cm5hdGl2ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUocmVzdWx0LT5qaXRUeXBlKCkpIHx8IHJlc3VsdC0+
aml0VHlwZSgpID09IEpJVENvZGU6Ok5vbmUpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIHJldHVybiB0aGlzOworI2VuZGlmCit9CisKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNl
bGluZVZlcnNpb24oKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIENvZGVCbG9j
ayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAv
LyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UncmUgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIENvZGVCbG9j
ayBmb3IgYW4gZXhlY3V0YWJsZS4KKyAgICAgICAgLy8gQXNzdW1lIHRoYXQgd2UncmUgdGhlIGJh
c2VsaW5lIENvZGVCbG9jay4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJ
VENvZGU6Ok5vbmUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgcmVzdWx0ID0g
cmVzdWx0LT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShKSVQpCitib29sIENv
ZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9S
ZXBsYWNlKQoreworICAgIHJldHVybiBKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQo
KS0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNlKTsKK30KKworYm9vbCBDb2RlQmxvY2s6Omhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1l
bnQoaml0VHlwZSgpKTsKK30KKyNlbmRpZgorCitIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5k
bGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFu
ZGxlciByZXF1aXJlZEhhbmRsZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZz
ZXQgPCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgo
Ynl0ZWNvZGVPZmZzZXQsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK0hhbmRsZXJJbmZvKiBDb2Rl
QmxvY2s6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJl
cXVpcmVkSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQorCitDYWxsU2l0
ZUluZGV4IENvZGVCbG9jazo6bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxT
aXRlSW5kZXggb3JpZ2luYWxDYWxsU2l0ZSkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKSk7CisgICAg
QVNTRVJUKCEhaGFuZGxlckZvckluZGV4KG9yaWdpbmFsQ2FsbFNpdGUuYml0cygpKSk7CisgICAg
Q29kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IGNvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0ZSk7
CisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmFkZFVuaXF1ZUNhbGxTaXRlSW5k
ZXgob3JpZ2luYWxPcmlnaW4pOworI2Vsc2UKKyAgICAvLyBXZSBuZXZlciBjcmVhdGUgbmV3IG9u
LXRoZS1mbHkgZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgLy8gY2FsbCBzaXRlcyBvdXRzaWRlIHRo
ZSBERkcvRlRMIGlubGluZSBjYWNoZXMuCisgICAgVU5VU0VEX1BBUkFNKG9yaWdpbmFsQ2FsbFNp
dGUpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENhbGxT
aXRlSW5kZXgoMHUpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpyZW1vdmVFeGNlcHRp
b25IYW5kbGVyRm9yQ2FsbFNpdGUoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOworICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4
Y2VwdGlvbkhhbmRsZXJzID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyc1tpXTsKKyAgICAgICAgaWYgKGhhbmRs
ZXIuc3RhcnQgPD0gaW5kZXggJiYgaGFuZGxlci5lbmQgPiBpbmRleCkgeworICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlcnMucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordW5z
aWduZWQgQ29kZUJsb2NrOjpsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVPZmZzZXQgPCBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHJldHVybiBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+
Zmlyc3RMaW5lKCkgKyBtX3VubGlua2VkQ29kZS0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KTsKK30KKwordW5zaWduZWQgQ29kZUJsb2NrOjpjb2x1bW5OdW1iZXJG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBpbnQgZGl2
b3Q7CisgICAgaW50IHN0YXJ0T2Zmc2V0OworICAgIGludCBlbmRPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgbGluZTsKKyAgICB1bnNpZ25lZCBjb2x1bW47CisgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCBsaW5lLCBjb2x1bW4pOworICAgIHJldHVybiBjb2x1bW47Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgaW50JiBkaXZvdCwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQsIHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdAoreworICAgIG1fdW5saW5rZWRDb2RlLT5l
eHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CisgICAgZGl2b3QgKz0gbV9zb3Vy
Y2VPZmZzZXQ7CisgICAgY29sdW1uICs9IGxpbmUgPyAxIDogZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KCk7CisgICAgbGluZSArPSBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+Zmlyc3RMaW5lKCk7Cit9
CisKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNpZ25lZCBs
aW5lLCB1bnNpZ25lZCBjb2x1bW4pCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogZW5kID0gaW5zdHJ1Y3Rp
b25zKCkuZW5kKCk7CisgICAgZm9yIChjb25zdCBJbnN0cnVjdGlvbiogaXQgPSBiZWdpbjsgaXQg
IT0gZW5kOykgeworICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChpdC0+dS5vcGNvZGUpOworICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfZGVidWcp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gaXQgLSBiZWdpbjsKKyAg
ICAgICAgICAgIGludCB1bnVzZWQ7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnTGluZTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdDb2x1bW47CisgICAgICAgICAgICBleHByZXNz
aW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgdW51c2VkLCB1bnVzZWQs
IHVudXNlZCwgb3BEZWJ1Z0xpbmUsIG9wRGVidWdDb2x1bW4pOworICAgICAgICAgICAgaWYgKGxp
bmUgPT0gb3BEZWJ1Z0xpbmUgJiYgKGNvbHVtbiA9PSBCcmVha3BvaW50Ojp1bnNwZWNpZmllZENv
bHVtbiB8fCBjb2x1bW4gPT0gb3BEZWJ1Z0NvbHVtbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaXQgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNocmlua1Rv
Rml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworCisgICAgbV9yYXJlQ2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7Cisg
ICAgCisgICAgaWYgKHNocmlua01vZGUgPT0gRWFybHlTaHJpbmspIHsKKyAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbi5zaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
cmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5z
aHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKyAgICB9IC8vIGVsc2UgZG9uJ3Qgc2hy
aW5rIHRoZXNlLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBwb2ludGVkIHBvaW50ZXJz
IGludG8gdGhlc2UgdGFibGVzLgorfQorCisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29kZUJsb2Nr
OjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyog
aW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBt
X2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpsaW5r
SW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBo
aWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5nKTsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCit2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdD
YWxscygpCit7CisgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9p
bmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJl
Z2luKCktPnVubGluaygpOworI2lmIEVOQUJMRShKSVQpCisgICAgd2hpbGUgKG1faW5jb21pbmdD
YWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWlu
Z0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0oKSk7CisgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5
bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkp
CisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluaygqdm0o
KSk7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29t
aW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNv
bWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKK0NvZGVCbG9jayogQ29kZUJsb2Nr
OjpuZXdSZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgp
LT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7Cit9CisK
KyNpZiBFTkFCTEUoSklUKQorQ29kZUJsb2NrKiBDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sK
KyAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygpOworCisg
ICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICBy
ZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2Fs
bCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrKCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6OmluZm8o
KSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+Y29kZUJsb2NrKCk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGNsYXNzSW5mbyA9PSBXZWJBc3NlbWJseUNvZGVCbG9j
azo6aW5mbygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworREZHOjpD
YXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCkKK3sKKyAg
ICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHRoaXMtPmNsYXNzSW5mbygpOworCisgICAg
aWYgKGNsYXNzSW5mbyA9PSBGdW5jdGlvbkNvZGVCbG9jazo6aW5mbygpKSB7CisgICAgICAgIGlm
IChtX2lzQ29uc3RydWN0b3IpCisgICAgICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNv
bnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIERGRzo6ZnVuY3Rp
b25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworICAgIH0KKworICAgIGlmIChjbGFzc0lu
Zm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpldmFsQ2Fw
YWJpbGl0eUxldmVsKHRoaXMpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9ncmFtQ29kZUJs
b2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwo
dGhpcyk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6Omlu
Zm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7
CisjZW5kaWYKKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IERGRzo6Q2Fubm90Q29tcGlsZTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK3ZvaWQg
Q29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9w
dGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQoreworI2lmICFF
TkFCTEUoREZHX0pJVCkKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VEX1BBUkFN
KGRldGFpbCk7CisjZW5kaWYKKyAgICAKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKHRoaXMsICJq
ZXR0aXNvbiIsICgiZHVlIHRvICIsIHJlYXNvbiwgIiwgY291bnRpbmcgPSAiLCBtb2RlID09IENv
dW50UmVvcHRpbWl6YXRpb24sICIsIGRldGFpbCA9ICIsIHBvaW50ZXJEdW1wKGRldGFpbCkpKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKHJlYXNvbiAhPSBQcm9maWxlcjo6Tm90SmV0dGlzb25lZCk7
CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fz
c2VtYmx5KCkpIHsKKyAgICAgICAgZGF0YUxvZygiSmV0dGlzb25pbmcgIiwgKnRoaXMpOworICAg
ICAgICBpZiAobW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uKQorICAgICAgICAgICAgZGF0YUxv
ZygiIGFuZCBjb3VudGluZyByZW9wdGltaXphdGlvbiIpOworICAgICAgICBkYXRhTG9nKCIgZHVl
IHRvICIsIHJlYXNvbik7CisgICAgICAgIGlmIChkZXRhaWwpCisgICAgICAgICAgICBkYXRhTG9n
KCIsICIsICpkZXRhaWwpOworICAgICAgICBkYXRhTG9nKCIuXG4iKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHJlYXNvbiA9PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UpIHsK
KyAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coKnRoaXMsICIgd2lsbCBiZSBqZXR0aXNvbmVkIGJlY2F1c2Ugb2YgdGhlIGZvbGxv
d2luZyBkZWFkIHJlZmVyZW5jZXM6XG4iKTsKKyAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSog
ZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbiA9
IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV07CisgICAgICAgICAgICAgICAgSlNDZWxsKiBvcmln
aW4gPSB0cmFuc2l0aW9uLm1fY29kZU9yaWdpbi5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU0Nl
bGwqIGZyb20gPSB0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU0Nl
bGwqIHRvID0gdHJhbnNpdGlvbi5tX3RvLmdldCgpOworICAgICAgICAgICAgICAgIGlmICgoIW9y
aWdpbiB8fCBIZWFwOjppc01hcmtlZChvcmlnaW4pKSAmJiBIZWFwOjppc01hcmtlZChmcm9tKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFRyYW5zaXRpb24gdW5kZXIgIiwgUmF3UG9pbnRlcihvcmlnaW4pLCAiLCAiLCBSYXdQb2lu
dGVyKGZyb20pLCAiIC0+ICIsIFJhd1BvaW50ZXIodG8pLCAiLlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVm
ZXJlbmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogd2VhayA9IGRm
Z0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKEhl
YXA6OmlzTWFya2VkKHdlYWspKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgV2VhayByZWZlcmVuY2UgIiwgUmF3UG9pbnRlcih3ZWFr
KSwgIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKCkpOwor
ICAgIAorICAgIC8vIFdlIHdhbnQgdG8gYWNjb21wbGlzaCB0d28gdGhpbmdzIGhlcmU6CisgICAg
Ly8gMSkgTWFrZSBzdXJlIHRoYXQgaWYgdGhpcyBDb2RlQmxvY2sgaXMgb24gdGhlIHN0YWNrIHJp
Z2h0IG5vdywgdGhlbiBpZiB3ZSByZXR1cm4gdG8gaXQKKyAgICAvLyAgICB3ZSBzaG91bGQgT1NS
IGV4aXQgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBhZnRlciB0
aGUgcmV0dXJuLgorICAgIC8vIDIpIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIGNhbGwgdGhlIG93bmVy
IGV4ZWN1dGFibGUsIHRoZW4gd2Ugc2hvdWxkbid0IGNhbGwgdGhpcyBDb2RlQmxvY2suCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1
ZVRvT2xkQWdlKSB7CisgICAgICAgIGlmIChQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uID0gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCkpCisgICAgICAg
ICAgICBjb21waWxhdGlvbi0+c2V0SmV0dGlzb25SZWFzb24ocmVhc29uLCBkZXRhaWwpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDEpLCBhbmQgZG9lcyBpdHMgb3du
IGJvb2sta2VlcGluZyBhYm91dCB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGhhcHBlbmVkLgorICAg
ICAgICBpZiAoIWppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmludmFsaWRhdGUoKSkgeworICAgICAg
ICAgICAgLy8gV2UndmUgYWxyZWFkeSBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhpcyAhPSByZXBsYWNlbWVudCgpIHx8IChtX3ZtLT5oZWFwLmlzQ3VycmVu
dFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3JpcHRFeGVjdXRhYmxlKCkp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYg
KERGRzo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIiAgICBEaWQg
aW52YWxpZGF0ZSAiLCAqdGhpcywgIlxuIik7CisgICAgCisgICAgLy8gQ291bnQgdGhlIHJlb3B0
aW1pemF0aW9uIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KKyAgICBpZiAobW9kZSA9
PSBDb3VudFJlb3B0aW1pemF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNo
b3VsZCBjYWxsIGFsdGVybmF0aXZlKCkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKKyAgICAgICAgYmFzZWxpbmVBbHRlcm5hdGl2ZSgp
LT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNh
c3NlbWJseSgpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIERpZCBjb3VudCByZW9wdGltaXph
dGlvbiBmb3IgIiwgKnRoaXMsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAodGhpcyAhPSBy
ZXBsYWNlbWVudCgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSB3ZXJlIG5ldmVy
IHRoZSBlbnRyeXBvaW50LiBUaGlzIGNhbiBoYXBwZW4gZm9yIE9TUiBlbnRyeSBjb2RlCisgICAg
ICAgIC8vIGJsb2Nrcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhbHRlcm5h
dGl2ZSgpKQorICAgICAgICBhbHRlcm5hdGl2ZSgpLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisK
KyAgICBpZiAocmVhc29uICE9IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKQorICAgICAg
ICB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyAgICAvLyBKZXR0aXNvbiBjYW4gaGFwcGVuIGR1cmluZyBHQy4gV2UgZG9uJ3Qgd2FudCB0byBp
bnN0YWxsIGNvZGUgdG8gYSBkZWFkIGV4ZWN1dGFibGUKKyAgICAvLyBiZWNhdXNlIHRoYXQgd291
bGQgYWRkIGEgZGVhZCBvYmplY3QgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgorICAgIGlmIChtX3Zt
LT5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhSGVhcDo6aXNNYXJrZWQob3duZXJTY3Jp
cHRFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGFjY29tcGxp
c2hlcyAoMikuCisgICAgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKAorICAg
ICAgICBtX2dsb2JhbE9iamVjdC0+dm0oKSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwgc3Bl
Y2lhbGl6YXRpb25LaW5kKCkpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKERGRzo6
c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIiAgICBEaWQgaW5zdGFs
bCBiYXNlbGluZSB2ZXJzaW9uIG9mICIsICp0aGlzLCAiXG4iKTsKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKK30KKworSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9y
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7
Cit9CisKK2NsYXNzIFJlY3Vyc2lvbkNoZWNrRnVuY3RvciB7CitwdWJsaWM6CisgICAgUmVjdXJz
aW9uQ2hlY2tGdW5jdG9yKENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBkZXB0aFRvQ2hlY2spCisgICAgICAgIDogbV9zdGFydENhbGxGcmFt
ZShzdGFydENhbGxGcmFtZSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAg
ICAgICwgbV9kZXB0aFRvQ2hlY2soZGVwdGhUb0NoZWNrKQorICAgICAgICAsIG1fZm91bmRTdGFy
dENhbGxGcmFtZShmYWxzZSkKKyAgICAgICAgLCBtX2RpZFJlY3Vyc2UoZmFsc2UpCisgICAgeyB9
CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIENhbGxGcmFtZSogY3VycmVudENhbGxGcmFtZSA9
IHZpc2l0b3ItPmNhbGxGcmFtZSgpOworCisgICAgICAgIGlmIChjdXJyZW50Q2FsbEZyYW1lID09
IG1fc3RhcnRDYWxsRnJhbWUpCisgICAgICAgICAgICBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUgPSB0
cnVlOworCisgICAgICAgIGlmIChtX2ZvdW5kU3RhcnRDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
IGlmICh2aXNpdG9yLT5jYWxsRnJhbWUoKS0+Y29kZUJsb2NrKCkgPT0gbV9jb2RlQmxvY2spIHsK
KyAgICAgICAgICAgICAgICBtX2RpZFJlY3Vyc2UgPSB0cnVlOworICAgICAgICAgICAgICAgIHJl
dHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghbV9kZXB0aFRvQ2hlY2stLSkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGlu
dWU7CisgICAgfQorCisgICAgYm9vbCBkaWRSZWN1cnNlKCkgY29uc3QgeyByZXR1cm4gbV9kaWRS
ZWN1cnNlOyB9CisKK3ByaXZhdGU6CisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0Q2FsbEZyYW1lOwor
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlcHRo
VG9DaGVjazsKKyAgICBtdXRhYmxlIGJvb2wgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lOworICAgIG11
dGFibGUgYm9vbCBtX2RpZFJlY3Vyc2U7Cit9OworCit2b2lkIENvZGVCbG9jazo6bm90aWNlSW5j
b21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUpCit7CisgICAgQ29kZUJsb2NrKiBjYWxs
ZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICBkYXRhTG9nKCJOb3RpY2luZyBjYWxs
IGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIsICp0aGlz
LCAiXG4iKTsKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoIW1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFjYWxsZXJDb2Rl
QmxvY2spIHsKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgbmF0aXZlLlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNhbklubGluZShjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghREZHOjppc1NtYWxsRW5v
dWdoVG9JbmxpbmVDb2RlSW50byhjYWxsZXJDb2RlQmxvY2spKSB7CisgICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2Fs
bExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2Ug
Y2FsbGVyIGlzIHRvbyBsYXJnZS5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBzdGlsbCBpbiB0aGUgaW50ZXJwcmV0
ZXIsIHRoZW4gd2UgY2FuJ3QgZXhwZWN0IGlubGluaW5nIHRvCisgICAgICAgIC8vIGhhcHBlbiBh
bnl0aW1lIHNvb24uIEFzc3VtZSBpdCdzIHByb2ZpdGFibGUgdG8gb3B0aW1pemUgaXQgc2VwYXJh
dGVseS4gVGhpcworICAgICAgICAvLyBlbnN1cmVzIHRoYXQgYSBmdW5jdGlvbiBpcyBTQUJJIG9u
bHkgaWYgaXQgaXMgY2FsbGVkIG5vIG1vcmUgZnJlcXVlbnRseSB0aGFuCisgICAgICAgIC8vIGFu
eSBvZiBpdHMgY2FsbGVycy4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAg
ZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgaW4gTExJbnQuXG4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgICAgICBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNh
bGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2Ug
Y2FsbGVyIHdhcyBhbHJlYWR5IG9wdGltaXplZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25D
b2RlKSB7CisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgZWl0aGVyIGV2YWwgb3IgZ2xvYmFs
IGNvZGUsIGFzc3VtZSB0aGF0IHRoYXQgd29uJ3QgYmUKKyAgICAgICAgLy8gb3B0aW1pemVkIGFu
eXRpbWUgc29vbi4gRm9yIGV2YWwgY29kZSB0aGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIHNpbmNl
IHdlCisgICAgICAgIC8vIGRlbGF5IGV2YWwgb3B0aW1pemF0aW9uIGJ5IGEgKmxvdCouCisgICAg
ICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBT
QUJJIGJlY2F1c2UgY2FsbGVyIGlzIG5vdCBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBSZWN1cnNpdmUgY2FsbHMgd29uJ3QgYmUgaW5saW5lZC4KKyAg
ICBSZWN1cnNpb25DaGVja0Z1bmN0b3IgZnVuY3RvcihjYWxsZXJGcmFtZSwgdGhpcywgT3B0aW9u
czo6bWF4aW11bUlubGluaW5nRGVwdGgoKSk7CisgICAgdm0oKS0+dG9wQ2FsbEZyYW1lLT5pdGVy
YXRlKGZ1bmN0b3IpOworCisgICAgaWYgKGZ1bmN0b3IuZGlkUmVjdXJzZSgpKSB7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgcmVjdXJzaW9uIHdhcyBkZXRlY3RlZC5cbiIpOworICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRl
KCkgPT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxvZygiSW4g
Y2FsbCBmcm9tICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmln
aW4oKSwgIiB0byAiLCAqdGhpcywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2ZWwgaXMg
bm90IHNldC5cbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBpZiAoY2Fu
Q29tcGlsZShjYWxsZXJDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAg
ICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgbm90
IGEgREZHIGNhbmRpZGF0ZS5cbiIpOworICAgIAorICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7CisjZW5kaWYKK30KKwordW5zaWduZWQgQ29kZUJsb2NrOjpyZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBBU1NFUlQobV9y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5
Q291bnRlck1heCgpKTsKKyAgICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsK
KyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKworI2lmIEVO
QUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3Rl
clNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQoreworICAgIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KGNhbGxlZVNhdmVSZWdpc3Rl
cnMpOworfQorCit2b2lkIENvZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVu
aXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IHJlZ2lzdGVyQXRPZmZzZXRMaXN0KQorewor
ICAgIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3Qp
OworfQorICAgIAorc3RhdGljIHNpemVfdCByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycyhzaXplX3QgY2FsbGVlU2F2ZVJlZ2lzdGVycykKK3sKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgY3B1UmVnaXN0ZXJTaXplID0gc2l6ZW9mKHZvaWQqKTsKKyAgICByZXR1cm4gKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzaXplb2YoUmVnaXN0ZXIpLCBjYWxsZWVTYXZlUmVnaXN0
ZXJzICogY3B1UmVnaXN0ZXJTaXplKSAvIHNpemVvZihSZWdpc3RlcikpOworCit9CisKK3NpemVf
dCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKQoreworICAgIHJldHVybiByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cyhudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitzaXpl
X3QgQ29kZUJsb2NrOjpjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKQoreworICAg
IHJldHVybiByb3VuZENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyhtX2NhbGxlZVNh
dmVSZWdpc3RlcnMtPnNpemUoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3VudFJlb3B0aW1p
emF0aW9uKCkKK3sKKyAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7CisgICAgaWYg
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiBPcHRpb25zOjpyZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCgpKQorICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0g
T3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKK30KKwordW5zaWduZWQg
Q29kZUJsb2NrOjpudW1iZXJPZkRGR0NvbXBpbGVzKCkKK3sKKyAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7CisgICAgaWYgKE9wdGlvbnM6OnRlc3RUaGVGVEwo
KSkgeworICAgICAgICBpZiAobV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCisgICAgICAgICAgICBy
ZXR1cm4gMTAwMDAwMDsKKyAgICAgICAgcmV0dXJuIChtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwg
PyAxIDogMCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOworICAgIH0KKyAgICByZXR1
cm4gKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpID8g
MSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKK30KKworaW50MzJfdCBDb2Rl
QmxvY2s6OmNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0Cit7CisgICAgaWYgKGNv
ZGVUeXBlKCkgPT0gRXZhbENvZGUpCisgICAgICAgIHJldHVybiBPcHRpb25zOjpldmFsVGhyZXNo
b2xkTXVsdGlwbGllcigpOworICAgIAorICAgIHJldHVybiAxOworfQorCitkb3VibGUgQ29kZUJs
b2NrOjpvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCkKK3sKKyAgICAvLyBUaGlz
IGV4cHJlc3Npb24gYXJpc2VzIGZyb20gZG9pbmcgYSBsZWFzdC1zcXVhcmVzIGZpdCBvZgorICAg
IC8vCisgICAgLy8gRlt4X10gPTogYSAqIFNxcnRbeCArIGJdICsgQWJzW2MgKiB4XSArIGQKKyAg
ICAvLworICAgIC8vIGFnYWluc3QgdGhlIGRhdGEgcG9pbnRzOgorICAgIC8vCisgICAgLy8gICAg
eCAgICAgICBGW3hfXQorICAgIC8vICAgIDEwICAgICAgIDAuOSAgICAgICAgICAoc21hbGxlc3Qg
cmVhc29uYWJsZSBjb2RlIGJsb2NrKQorICAgIC8vICAgMjAwICAgICAgIDEuMCAgICAgICAgICAo
dHlwaWNhbCBzbWFsbC1pc2ggY29kZSBibG9jaykKKyAgICAvLyAgIDMyMCAgICAgICAxLjIgICAg
ICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1jdWJlIHRoYXQgSSB3YW50ZWQgdG8gb3B0aW1p
emUpCisgICAgLy8gIDEyNjggICAgICAgNS4wICAgICAgICAgIChzb21ldGhpbmcgSSBzYXcgaW4g
M2QtY3ViZSB0aGF0IEkgZGlkbid0IHdhbnQgdG8gb3B0aW1pemUpCisgICAgLy8gIDQwMDAgICAg
ICAgNS41ICAgICAgICAgIChyYW5kb20gbGFyZ2Ugc2l6ZSwgdXNlZCB0byBjYXVzZSB0aGUgZnVu
Y3Rpb24gdG8gY29udmVyZ2UgdG8gYSBzaGFsbG93IGN1cnZlIG9mIHNvbWUgc29ydCkKKyAgICAv
LyAxMDAwMCAgICAgICA2LjAgICAgICAgICAgKHNpbWlsYXIgdG8gYWJvdmUpCisgICAgLy8KKyAg
ICAvLyBJIGFjaGlldmUgdGhlIG1pbmltaXphdGlvbiB1c2luZyB0aGUgZm9sbG93aW5nIE1hdGhl
bWF0aWNhIGNvZGU6CisgICAgLy8KKyAgICAvLyBNeUZ1bmN0aW9uVGVtcGxhdGVbeF8sIGFfLCBi
XywgY18sIGRfXSA6PSBhKlNxcnRbeCArIGJdICsgQWJzW2MqeF0gKyBkCisgICAgLy8KKyAgICAv
LyBzYW1wbGVzID0ge3sxMCwgMC45fSwgezIwMCwgMX0sIHszMjAsIDEuMn0sIHsxMjY4LCA1fSwg
ezQwMDAsIDUuNX0sIHsxMDAwMCwgNn19CisgICAgLy8KKyAgICAvLyBzb2x1dGlvbiA9IAorICAg
IC8vICAgICBNaW5pbWl6ZVtQbHVzIEBAICgoTXlGdW5jdGlvblRlbXBsYXRlWyNbWzFdXSwgYSwg
YiwgYywgZF0gLSAjW1syXV0pXjIgJiAvQCBzYW1wbGVzKSwKKyAgICAvLyAgICAgICAgIHthLCBi
LCBjLCBkfV1bWzJdXQorICAgIC8vCisgICAgLy8gQW5kIHRoZSBjb2RlIGJlbG93ICh0byBpbml0
aWFsaXplIGEsIGIsIGMsIGQpIGlzIGdlbmVyYXRlZCBieToKKyAgICAvLworICAgIC8vIFByaW50
WyJjb25zdCBkb3VibGUgIiA8PiBUb1N0cmluZ1sjW1sxXV1dIDw+ICIgPSAiIDw+CisgICAgLy8g
ICAgIElmWyNbWzJdXSA8IDAuMDAwMDEsICIwLjAiLCBUb1N0cmluZ1sjW1syXV1dXSA8PiAiOyJd
ICYgL0Agc29sdXRpb24KKyAgICAvLworICAgIC8vIFdlJ3ZlIGxvbmcga25vd24gdGhlIGZvbGxv
d2luZyB0byBiZSB0cnVlOgorICAgIC8vIC0gU21hbGwgY29kZSBibG9ja3MgYXJlIGNoZWFwIHRv
IG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgZG8gaXQgc29vbmVyIHJhdGhlcgorICAgIC8vICAg
dGhhbiBsYXRlci4KKyAgICAvLyAtIExhcmdlIGNvZGUgYmxvY2tzIGFyZSBleHBlbnNpdmUgdG8g
b3B0aW1pemUgYW5kIHNvIHdlIHNob3VsZCBwb3N0cG9uZSBkb2luZyBzbywKKyAgICAvLyAgIGFu
ZCBzb21ldGltZXMgaGF2ZSBhIGxhcmdlIGVub3VnaCB0aHJlc2hvbGQgdGhhdCB3ZSBuZXZlciBv
cHRpbWl6ZSB0aGVtLgorICAgIC8vIC0gVGhlIGRpZmZlcmVuY2UgaW4gY29zdCBpcyBub3QgdG90
YWxseSBsaW5lYXIgYmVjYXVzZSAoYSkganVzdCBpbnZva2luZyB0aGUKKyAgICAvLyAgIERGRyBp
bmN1cnMgc29tZSBiYXNlIGNvc3QgYW5kIChiKSBmb3IgbGFyZ2UgY29kZSBibG9ja3MgdGhlcmUg
aXMgZW5vdWdoIHNsb3AKKyAgICAvLyAgIGluIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIGluc3Ry
dWN0aW9uIGNvdW50IGFuZCB0aGUgYWN0dWFsIGNvbXBpbGF0aW9uIGNvc3QKKyAgICAvLyAgIHRo
YXQgZm9yIHRob3NlIGxhcmdlIGJsb2NrcywgdGhlIGluc3RydWN0aW9uIGNvdW50IHNob3VsZCBu
b3QgaGF2ZSBhIHN0cm9uZworICAgIC8vICAgaW5mbHVlbmNlIG9uIG91ciB0aHJlc2hvbGQuCisg
ICAgLy8KKyAgICAvLyBJIGtuZXcgdGhlIGdvYWxzIGJ1dCBJIGRpZG4ndCBrbm93IGhvdyB0byBh
Y2hpZXZlIHRoZW07IHNvIEkgcGlja2VkIGFuIGludGVyZXN0aW5nCisgICAgLy8gZXhhbXBsZSB3
aGVyZSB0aGUgaGV1cmlzdGljcyB3ZXJlIHJpZ2h0IChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0
aCBpbnN0cnVjdGlvbgorICAgIC8vIGNvdW50IDMyMCwgd2hpY2ggZ290IGNvbXBpbGVkIGVhcmx5
IGFzIGl0IHNob3VsZCBoYXZlIGJlZW4pIGFuZCBvbmUgd2hlcmUgdGhleSB3ZXJlCisgICAgLy8g
dG90YWxseSB3cm9uZyAoY29kZSBibG9jayBpbiAzZC1jdWJlIHdpdGggaW5zdHJ1Y3Rpb24gY291
bnQgMTI2OCwgd2hpY2ggd2FzIGV4cGVuc2l2ZQorICAgIC8vIHRvIGNvbXBpbGUgYW5kIGRpZG4n
dCBydW4gb2Z0ZW4gZW5vdWdoIHRvIHdhcnJhbnQgY29tcGlsYXRpb24gaW4gbXkgb3Bpbmlvbiks
IGFuZAorICAgIC8vIHRoZW4gdGhyZXcgaW4gYWRkaXRpb25hbCBkYXRhIHBvaW50cyB0aGF0IHJl
cHJlc2VudGVkIG15IG93biBndWVzcyBvZiB3aGF0IG91cgorICAgIC8vIGhldXJpc3RpY3Mgc2hv
dWxkIGRvIGZvciBzb21lIHJvdW5kLW51bWJlcmVkIGV4YW1wbGVzLgorICAgIC8vCisgICAgLy8g
VGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggSSBkZWNpZGVkIHRvIGZpdCB0aGUgZGF0YSBhcm9zZSBi
ZWNhdXNlIEkgc3RhcnRlZCB3aXRoIGFuCisgICAgLy8gYWZmaW5lIGZ1bmN0aW9uLCBhbmQgdGhl
biBkaWQgdHdvIHRoaW5nczogcHV0IHRoZSBsaW5lYXIgcGFydCBpbiBhbiBBYnMgdG8gZW5zdXJl
CisgICAgLy8gdGhhdCB0aGUgZml0IGRpZG4ndCBlbmQgdXAgY2hvb3NpbmcgYSBuZWdhdGl2ZSB2
YWx1ZSBvZiBjICh3aGljaCB3b3VsZCByZXN1bHQgaW4KKyAgICAvLyB0aGUgZnVuY3Rpb24gdHVy
bmluZyBvdmVyIGFuZCBnb2luZyBuZWdhdGl2ZSBmb3IgbGFyZ2UgeCkgYW5kIEkgdGhyZXcgaW4g
YSBTcXJ0CisgICAgLy8gdGVybSBiZWNhdXNlIFNxcnQgcmVwcmVzZW50cyBteSBpbnR1dGlvbiB0
aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgbW9yZSBzZW5zaXRpdmUKKyAgICAvLyB0byBzbWFs
bCBjaGFuZ2VzIGluIHNtYWxsIHZhbHVlcyBvZiB4LCBidXQgbGVzcyBzZW5zaXRpdmUgd2hlbiB4
IGdldHMgbGFyZ2UuCisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBjdXJyZW50IGZpdCBlc3Nl
bnRpYWxseSBlbGltaW5hdGVzIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUKKyAgICAvLyBleHBy
ZXNzaW9uIChjID09IDAuMCkuCisgICAgY29uc3QgZG91YmxlIGEgPSAwLjA2MTUwNDsKKyAgICBj
b25zdCBkb3VibGUgYiA9IDEuMDI0MDY7CisgICAgY29uc3QgZG91YmxlIGMgPSAwLjA7CisgICAg
Y29uc3QgZG91YmxlIGQgPSAwLjgyNTkxNDsKKyAgICAKKyAgICBkb3VibGUgaW5zdHJ1Y3Rpb25D
b3VudCA9IHRoaXMtPmluc3RydWN0aW9uQ291bnQoKTsKKyAgICAKKyAgICBBU1NFUlQoaW5zdHJ1
Y3Rpb25Db3VudCk7IC8vIE1ha2Ugc3VyZSB0aGlzIGlzIGNhbGxlZCBvbmx5IGFmdGVyIHdlIGhh
dmUgYW4gaW5zdHJ1Y3Rpb24gc3RyZWFtOyBvdGhlcndpc2UgaXQnbGwganVzdCByZXR1cm4gdGhl
IHZhbHVlIG9mIGQsIHdoaWNoIG1ha2VzIG5vIHNlbnNlLgorICAgIAorICAgIGRvdWJsZSByZXN1
bHQgPSBkICsgYSAqIHNxcnQoaW5zdHJ1Y3Rpb25Db3VudCArIGIpICsgYyAqIGluc3RydWN0aW9u
Q291bnQ7CisgICAgCisgICAgcmVzdWx0ICo9IGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigp
OworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICp0aGlzLCAiOiBpbnN0cnVjdGlvbiBjb3VudCBpcyAiLCBpbnN0cnVj
dGlvbkNvdW50LAorICAgICAgICAgICAgIiwgc2NhbGluZyBleGVjdXRpb24gY291bnRlciBieSAi
LCByZXN1bHQsICIgKiAiLCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSwKKyAgICAgICAg
ICAgICJcbiIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJf
dCBjbGlwVGhyZXNob2xkKGRvdWJsZSB0aHJlc2hvbGQpCit7CisgICAgaWYgKHRocmVzaG9sZCA8
IDEuMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgaWYgKHRocmVzaG9sZCA+IHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCk7CisgICAgCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHRocmVzaG9sZCk7Cit9CisKK2ludDMyX3Qg
Q29kZUJsb2NrOjphZGp1c3RlZENvdW50ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQp
Cit7CisgICAgcmV0dXJuIGNsaXBUaHJlc2hvbGQoCisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4oZGVzaXJlZFRocmVzaG9sZCkgKgorICAgICAgICBvcHRpbWl6YXRpb25UaHJlc2hvbGRTY2Fs
aW5nRmFjdG9yKCkgKgorICAgICAgICAoMSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigp
KSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKERGRzo6V29ya2xpc3QqIHdv
cmtsaXN0ID0gREZHOjpleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKHdvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKERGRzo6Q29tcGlsYXRpb25LZXkodGhp
cywgREZHOjpERkdNb2RlKSkKKyAgICAgICAgICAgID09IERGRzo6V29ya2xpc3Q6OkNvbXBpbGVk
KSB7CisgICAgICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIAorICAgIHJldHVybiBt
X2ppdEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwor
fQorCit2b2lkIENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbigpCit7CisgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1p
emluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5l
d1RocmVzaG9sZCgwLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBk
YXRhTG9nKCp0aGlzLCAiOiBOb3Qgb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4iKTsKKyAgICBt
X2ppdEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAu
XG4iKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5l
d1RocmVzaG9sZCgKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisjZW5kaWYKK30KKwordm9pZCBD
b2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKK3sKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVy
IGxvbmcgd2FybS11cC5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1faml0RXhlY3V0
ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShP
cHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgdGhpcyk7Cisj
ZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6Om9wdGltaXplU29vbigpCit7CisgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemlu
ZyBzb29uLlxuIik7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9qaXRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9wdGltaXplU29vbigpKSwgdGhpcyk7CisjZW5kaWYKK30KKwordm9pZCBD
b2RlQmxvY2s6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKQoreworICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IEZv
cmNpbmcgc2xvdyBwYXRoIGNvbmN1cnJlbnRseS5cbiIpOworICAgIG1faml0RXhlY3V0ZUNvdW50
ZXIuZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQp
Cit2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBKSVRDb2RlOjpKSVRU
eXBlIHR5cGUgPSBqaXRUeXBlKCk7CisgICAgaWYgKHR5cGUgIT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpIHsKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogZXhwZWN0ZWQgdG8gaGF2ZSBiYXNlbGlu
ZSBjb2RlIGJ1dCBoYXZlICIsIHR5cGUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIHRoZVJlcGxhY2VtZW50
ID0gcmVwbGFjZW1lbnQoKTsKKyAgICBpZiAoKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWwpICE9ICh0aGVSZXBsYWNlbWVudCAhPSB0aGlzKSkgeworICAgICAgICBkYXRhTG9nKCp0aGlz
LCAiOiB3ZSBoYXZlIHJlc3VsdCA9ICIsIHJlc3VsdCwgIiBidXQgIik7CisgICAgICAgIGlmICh0
aGVSZXBsYWNlbWVudCA9PSB0aGlzKQorICAgICAgICAgICAgZGF0YUxvZygid2UgYXJlIG91ciBv
d24gcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YUxvZygi
b3VyIHJlcGxhY2VtZW50IGlzICIsIHBvaW50ZXJEdW1wKHRoZVJlcGxhY2VtZW50KSwgIlxuIik7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgp
LT5qaXRUeXBlKCkpKTsKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAgICAgZG9udE9wdGlt
aXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25E
ZWZlcnJlZDoKKyAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGRvIGRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCkgYnV0IHdlIGNhbm5vdCBiZWNhdXNlCisgICAgICAgIC8vIGZvcmNlT3B0aW1pemF0aW9u
U2xvd1BhdGhDb25jdXJyZW50bHkoKSBpcyBpbmhlcmVudGx5IHJhY3kuIEl0IHdvbid0CisgICAg
ICAgIC8vIG5lY2Vzc2FyaWx5IGd1YXJhbnRlZSBhbnl0aGluZy4gU28sIHdlIG1ha2Ugc3VyZSB0
aGF0IGV2ZW4gaWYgdGhhdAorICAgICAgICAvLyBmdW5jdGlvbiBlbmRzIHVwIGJlaW5nIGEgbm8t
b3AsIHdlIHN0aWxsIGV2ZW50dWFsbHkgcmV0cnkgYW5kIHJlYWxpemUKKyAgICAgICAgLy8gdGhh
dCB3ZSBoYXZlIG9wdGltaXplZCBjb2RlIHJlYWR5LgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6
CisgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KKyAgICAgICAgY291
bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZGF0YUxvZygiVW5yZWNvZ25pemVkIHJlc3Vs
dDogIiwgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCisjZW5kaWYKKyAgICAKK3VpbnQzMl90IENvZGVCbG9jazo6
YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKK3sK
KyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIC8v
IENvbXB1dGUgdGhpcyB0aGUgbGFtZSB3YXkgc28gd2UgZG9uJ3Qgc2F0dXJhdGUuIFRoaXMgaXMg
Y2FsbGVkIGluZnJlcXVlbnRseQorICAgIC8vIGVub3VnaCB0aGF0IHRoaXMgbG9vcCB3b24ndCBo
dXJ0IHVzLgorICAgIHVuc2lnbmVkIHJlc3VsdCA9IGRlc2lyZWRUaHJlc2hvbGQ7CisgICAgZm9y
ICh1bnNpZ25lZCBuID0gYmFzZWxpbmVWZXJzaW9uKCktPnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCk7IG4tLTspIHsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVzdWx0ID0gcmVzdWx0IDw8IDE7
CisgICAgICAgIGlmIChuZXdSZXN1bHQgPCByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXN1bHQgPSBuZXdS
ZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3VpbnQzMl90IENvZGVCbG9j
azo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKQoreworICAgIHJldHVybiBh
ZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGlt
aXphdGlvbigpICogY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkpOworfQorCit1aW50MzJf
dCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3Ao
KQoreworICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JF
eGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkgKiBjb2RlVHlwZVRocmVzaG9sZE11
bHRpcGxpZXIoKSk7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplTm93KCkK
K3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbigpOworfQorCitib29sIENvZGVCbG9jazo6c2hvdWxkUmVvcHRpbWl6ZUZy
b21Mb29wTm93KCkKK3sKKyAgICByZXR1cm4gb3NyRXhpdENvdW50ZXIoKSA+PSBleGl0Q291bnRU
aHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7Cit9CisjZW5kaWYKKworQXJyYXlQ
cm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hcnJh
eVByb2ZpbGVzW2ldLmJ5dGVjb2RlT2Zmc2V0KCkgPT0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gJm1fYXJyYXlQcm9maWxlc1tpXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICByZXR1cm4gZ2V0QXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworfQor
CitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBtX2FycmF5UHJv
ZmlsZXMuYXBwZW5kKEFycmF5UHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAm
bV9hcnJheVByb2ZpbGVzLmxhc3QoKTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmFk
ZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBhZGRBcnJheVByb2ZpbGUobG9j
a2VyLCBieXRlY29kZU9mZnNldCk7Cit9CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRP
ckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFycmF5UHJvZmlsZSogcmVzdWx0ID0gZ2V0QXJy
YXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworICAgIGlmIChyZXN1bHQpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGFkZEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5
dGVjb2RlT2Zmc2V0KTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRkQXJy
YXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldE9yQWRkQXJyYXlQcm9maWxlKGxv
Y2tlciwgYnl0ZWNvZGVPZmZzZXQpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitWZWN0b3I8
Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBDb2RlQmxvY2s6OmNvZGVPcmln
aW5zKCkKK3sKKyAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+Y29kZU9yaWdpbnM7
Cit9CisKK3NpemVfdCBDb2RlQmxvY2s6Om51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdAor
eworICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5kZmdJ
ZGVudGlmaWVycy5zaXplKCk7Cit9CisKK2NvbnN0IElkZW50aWZpZXImIENvZGVCbG9jazo6aWRl
bnRpZmllcihpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHVubGlua2VkSWRlbnRpZmll
cnMgPSBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOworICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgdW5saW5rZWRJZGVudGlmaWVycykKKyAgICAgICAg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsKKyAgICBBU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOworICAgIHJldHVybiBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpLT5kZmdJZGVudGlmaWVyc1tpbmRleCAtIHVubGlua2VkSWRlbnRpZmllcnNd
OworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRl
QWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25B
cmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAg
bnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICBudW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6
bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVl
IHByb2ZpbGVzIGFyZSBmdWxsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51
bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9m
aWxlID0gZ2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMoaSk7CisgICAgICAgIHVuc2lnbmVkIG51bVNh
bXBsZXMgPSBwcm9maWxlLT50b3RhbE51bWJlck9mU2FtcGxlcygpOworICAgICAgICBpZiAobnVt
U2FtcGxlcyA+IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzKQorICAgICAgICAgICAgbnVt
U2FtcGxlcyA9IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50
IHByb2ZpbGVzIHRoYXQgYXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQu
CisgICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKKyAgICAg
ICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICBwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSB8
fCBwcm9maWxlLT5tX3ByZWRpY3Rpb24gIT0gU3BlY05vbmUpCisgICAgICAgICAgICBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMrKzsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdf
SklUKQorICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbnMobG9ja2VyKTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFs
dWVQcm9maWxlUHJlZGljdGlvbnMoKQoreworICAgIHVuc2lnbmVkIGlnbm9yZWRWYWx1ZTEsIGln
bm9yZWRWYWx1ZTI7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKGln
bm9yZWRWYWx1ZTEsIGlnbm9yZWRWYWx1ZTIpOworfQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRl
QWxsQXJyYXlQcmVkaWN0aW9ucygpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJvZmlsZXMuc2l6
ZSgpOyBpLS07KQorICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgdGhpcyk7CisgICAgCisgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgZWl0
aGVyLCBmb3Igc2ltaWxhciByZWFzb25zLgorICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2FycmF5QWxsb2NhdGlv
blByb2ZpbGVzW2ldLnVwZGF0ZUluZGV4aW5nVHlwZSgpOworfQorCit2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsUHJlZGljdGlvbnMoKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBp
ZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgorICAgIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7
CisgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworfQorCitib29sIENvZGVCbG9jazo6
c2hvdWxkT3B0aW1pemVOb3coKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi5cbiIp
OworCisgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1heGlt
dW1PcHRpbWl6YXRpb25EZWxheSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB1
cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXM7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyk7CisKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFM
b2dGKAorICAgICAgICAgICAgIlByb2ZpbGUgaG90bmVzczogJWxmICgldSAvICV1KSwgJWxmICgl
dSAvICV1KVxuIiwKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCisgICAgICAgICAgICBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mVmFsdWVQcm9maWxlcygp
LAorICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQ
cm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKKyAgICAg
ICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzICogbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOworICAgIH0KKworICAgIGlmICgoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJl
ZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKKyAgICAgICAgJiYgKCF0b3RhbE51bWJlck9mVmFsdWVQ
cm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBP
cHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQorICAgICAgICAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIpICsgMSA+PSBPcHRpb25z
OjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgQVNTRVJUKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyIDwgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50OF90Pjo6bWF4KCkpOworICAgIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKys7
CisgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lm
IEVOQUJMRShERkdfSklUKQordm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KQoreworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Cisg
ICAgQVNTRVJUKGFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsK
KyAgICAKKyAgICBzd2l0Y2ggKGppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6REZHSklU
OiB7CisgICAgICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZnKCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBERkc6Ok9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0
W2ldOworICAgICAgICAgICAgZXhpdC5jb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShw
cm9maWxlZEJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogeworICAgICAgICAvLyBU
aGVyZSBpcyBubyBlYXN5IHdheSB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGlzIGNvZGUgc2luY2Ug
dGhlIEZUTDo6SklUQ29kZTo6b3NyRXhpdAorICAgICAgICAvLyB2ZWN0b3IgY29udGFpbnMgYSB0
b3RhbGx5IGRpZmZlcmVudCB0eXBlLCB0aGF0IGp1c3Qgc28gaGFwcGVucyB0byBiZWhhdmUgbGlr
ZQorICAgICAgICAvLyBERkc6OkpJVENvZGU6Om9zckV4aXQuCisgICAgICAgIEZUTDo6SklUQ29k
ZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZnRsKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBGVEw6
Ok9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAgZXhpdC5j
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZEJsb2NrKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjaWYgRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCit7Cisg
ICAgZGF0YUxvZygiVmFsdWVQcm9maWxlIGZvciAiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsK
KyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMo
aSk7CisgICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgeworICAgICAg
ICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgIGFyZyA9ICV1OiAiLCBpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCk7
CisgICAgICAgIGlmICghcHJvZmlsZS0+bnVtYmVyT2ZTYW1wbGVzKCkgJiYgcHJvZmlsZS0+bV9w
cmVkaWN0aW9uID09IFNwZWNOb25lKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiPGVtcHR5Plxu
Iik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwcm9maWxlLT5k
dW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2dGKCJcbiIpOworICAgIH0KKyAg
ICBkYXRhTG9nKCJSYXJlQ2FzZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpOyArK2kpIHsK
KyAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQcm9maWxlKGkpOwor
ICAgICAgICBkYXRhTG9nRigiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVP
ZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShW
RVJCT1NFX1ZBTFVFX1BST0ZJTEUpCisKK3Vuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3Rl
ckNvdW50KCkKK3sKKyAgICBzd2l0Y2ggKGppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuazoKKyAgICAgICAgcmV0dXJuIExMSW50OjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IodGhpcyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGNhc2UgSklUQ29kZTo6QmFzZWxp
bmVKSVQ6CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgY2FzZSBK
SVRDb2RlOjpERkdKSVQ6CisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgIHJldHVy
biBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5mcmFtZVJlZ2lzdGVyQ291bnQ7CisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworaW50
IENvZGVCbG9jazo6c3RhY2tQb2ludGVyT2Zmc2V0KCkKK3sKKyAgICByZXR1cm4gdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50KCkgLSAxKS5vZmZzZXQoKTsKK30KKwor
c2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKK3sKKyAgICAvLyBU
aGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gQ29kZUJsb2NrOjpDb2RlQmxvY2sgYmVmb3JlIGVpdGhl
ciBtX3ZtIG9yIHRoZQorICAgIC8vIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQu
IEl0J3MgT0sgdG8gcmV0dXJuIDAgYmVjYXVzZSB3aGF0IHdpbGwgcmVhbGx5CisgICAgLy8gbWF0
dGVyIGlzIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoaXMgdmFsdWUgd2hlbiB0aGUgc2xvdyBwYXRo
IGlzIHRyaWdnZXJlZC4KKyAgICBpZiAoIW1fdm0pCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghKm1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGlu
ZUpJVCkKKyAgICAgICAgcmV0dXJuIDA7IC8vIEl0J3MgYXMgZ29vZCBvZiBhIHByZWRpY3Rpb24g
YXMgd2UnbGwgZ2V0LgorICAgIAorICAgIC8vIEJlIGNvbnNlcnZhdGl2ZTogcmV0dXJuIGEgc2l6
ZSB0aGF0IHdpbGwgYmUgYW4gb3ZlcmVzdGltYXRpb24gODQlIG9mIHRoZSB0aW1lLgorICAgIGRv
dWJsZSBtdWx0aXBsaWVyID0gbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklULT5tZWFuKCkgKworICAgICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPnN0YW5kYXJkRGV2aWF0aW9uKCk7CisgICAgCisg
ICAgLy8gQmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCBib2d1cyBtdWx0aXBpZXJzLiBTaWxl
bnRseSBkb2luZyB0aGUgIndyb25nIiB0aGluZworICAgIC8vIGhlcmUgaXMgT0ssIHNpbmNlIHRo
aXMgd2hvbGUgbWV0aG9kIGlzIGp1c3QgYSBoZXVyaXN0aWMuCisgICAgaWYgKG11bHRpcGxpZXIg
PCAwIHx8IG11bHRpcGxpZXIgPiAxMDAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBk
b3VibGUgZG91YmxlUmVzdWx0ID0gbXVsdGlwbGllciAqIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsK
KyAgICAKKyAgICAvLyBCZSBldmVuIG1vcmUgcGFyYW5vaWQ6IHNpbGVudGx5IHJlamVjdCB2YWx1
ZXMgdGhhdCB3b24ndCBmaXQgaW50byBhIHNpemVfdC4gSWYKKyAgICAvLyB0aGUgZnVuY3Rpb24g
aXMgc28gaHVnZSB0aGF0IHdlIGNhbid0IGV2ZW4gZml0IGl0IGludG8gdmlydHVhbCBtZW1vcnkg
dGhlbiB3ZQorICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIHNvbWUgb3RoZXIgZ3VhcmRzIGlu
IHBsYWNlIHRvIHByZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcKKyAgICAvLyB0byB0aGlzIHBv
aW50LgorICAgIGlmIChkb3VibGVSZXN1bHQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihkb3VibGVSZXN1bHQpOworfQorCitib29sIENvZGVCbG9jazo6dXNlc09wY29kZShP
cGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSB2bSgp
LT5pbnRlcnByZXRlcjsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0
cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIHN3
aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2Rl
T2Zmc2V0XS51Lm9wY29kZSkpIHsKKyNkZWZpbmUgREVGSU5FX09QKGN1ck9wY29kZSwgbGVuZ3Ro
KSAgICAgICAgXAorICAgICAgICBjYXNlIGN1ck9wY29kZTogICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoY3VyT3Bjb2RlID09IG9wY29kZUlEKSAgICAgIFwKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnl0ZWNv
ZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9JRChERUZJTkVfT1ApCisjdW5kZWYgREVGSU5FX09QCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9jb25zdGFudFJl
Z2lzdGVyc1tpXS5nZXQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFi
bGUqPihtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKSkgeworICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBh
dXRvIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKKyAgICAgICAgICAgIGZvciAoYXV0
byBwdHIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVuZDsgKytwdHIpIHsK
KyAgICAgICAgICAgICAgICBpZiAocHRyLT52YWx1ZS52YXJPZmZzZXQoKSA9PSBWYXJPZmZzZXQo
dmlydHVhbFJlZ2lzdGVyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3
b24ndCB3b3JrIGZyb20gdGhlIGNvbXBpbGF0aW9uIHRocmVhZC4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTMwMAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcHRyLT5rZXkuZ2V0KCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICh2aXJ0dWFsUmVnaXN0
ZXIgPT0gdGhpc1JlZ2lzdGVyKCkpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInRoaXMi
KTsKKyAgICBpZiAodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJhcmd1bWVudHNbJTNkXSIsIHZpcnR1YWxSZWdpc3Rlci50b0FyZ3Vt
ZW50KCkpOworCisgICAgcmV0dXJuICIiOworfQorCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAg
IE9wY29kZUlEIG9wY29kZUlEID0gbV92bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zKClbYnl0
ZWNvZGVPZmZzZXQgKyBsZW5ndGggLSAxXS51LnByb2ZpbGU7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
Ojp2YWxpZGF0ZSgpCit7CisgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRo
aXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVj
dCBDb2RlQmxvY2sgZm9vdHByaW50LgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVh
ZCA9IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoMCk7CisgICAgCisg
ICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1D
YWxsZWVMb2NhbHMpKSB7CisgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAg
ICAgZGF0YUxvZygiICAgIFdyb25nIG51bWJlciBvZiBiaXRzIGluIHJlc3VsdCFcbiIpOworICAg
ICAgICBkYXRhTG9nKCIgICAgUmVzdWx0OiAiLCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiICAgIEJpdCBjb3VudDogIiwgbGl2ZUF0SGVhZC5udW1CaXRzKCksICJcbiIpOwor
ICAgICAgICBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX251bUNhbGxlZUxvY2FsczsgaS0tOykgeworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobGl2ZUF0SGVhZFtpXSkgeworICAgICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFp
bCgpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIFZhcmlhYmxlICIsIHJlZywgIiBpcyBleHBl
Y3RlZCB0byBiZSBkZWFkLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVzdWx0OiAi
LCBsaXZlQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpiZWdpblZhbGlkYXRpb25E
aWRGYWlsKCkKK3sKKyAgICBkYXRhTG9nKCJWYWxpZGF0aW9uIGZhaWx1cmUgaW4gIiwgKnRoaXMs
ICI6XG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworfQorCit2b2lkIENvZGVCbG9jazo6ZW5kVmFs
aWRhdGlvbkRpZEZhaWwoKQoreworICAgIGRhdGFMb2coIlxuIik7CisgICAgZHVtcEJ5dGVjb2Rl
KCk7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCJWYWxpZGF0aW9uIGZhaWx1cmUu
XG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENvZGVC
bG9jazo6YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKK3sKKyAgICBtX251
bUJyZWFrcG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOworICAgIEFTU0VSVChtX251bUJyZWFrcG9p
bnRzKTsKKyAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
ICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJCcmVha3BvaW50KTsK
K30KKwordm9pZCBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBwaW5n
TW9kZSBtb2RlKQoreworICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKKyAgICBpZiAobW9kZSA9
PSBTdGVwcGluZ01vZGVFbmFibGVkICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyU3Rl
cHBpbmcpOworfQorCitSYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6YWRkUmFyZUNhc2VQcm9m
aWxlKGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBtX3JhcmVDYXNlUHJvZmlsZXMuYXBwZW5k
KFJhcmVDYXNlUHJvZmlsZShieXRlY29kZU9mZnNldCkpOworICAgIHJldHVybiAmbV9yYXJlQ2Fz
ZVByb2ZpbGVzLmxhc3QoKTsKK30KKworUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OnJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKKyAgICAgICAgbV9y
YXJlQ2FzZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNl
dCwKKyAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOworfQorCit1bnNp
Z25lZCBDb2RlQmxvY2s6OnJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAocHJv
ZmlsZSkKKyAgICAgICAgcmV0dXJuIHByb2ZpbGUtPm1fY291bnRlcjsKKyAgICByZXR1cm4gMDsK
K30KKworQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICByZXR1cm4gYXJpdGhQcm9maWxlRm9yUEMo
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworQXJpdGhQcm9m
aWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvclBDKEluc3RydWN0aW9uKiBwYykKK3sKKyAg
ICBhdXRvIG9wY29kZUlEID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHBjWzBdLnUu
b3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgY2FzZSBvcF9uZWdhdGU6Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzNdLnUub3BlcmFu
ZCk7CisgICAgY2FzZSBvcF9iaXRvcjoKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICBjYXNlIG9w
X2JpdHhvcjoKKyAgICBjYXNlIG9wX2FkZDoKKyAgICBjYXNlIG9wX211bDoKKyAgICBjYXNlIG9w
X3N1YjoKKyAgICBjYXNlIG9wX2RpdjoKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBcml0
aFByb2ZpbGUqPigmcGNbNF0udS5vcGVyYW5kKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBDb2RlQmxvY2s6OmNv
dWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgaWYgKCFo
YXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJp
dGhQcm9maWxlKiBwcm9maWxlID0gYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBwcm9maWxlLT50b29rU3BlY2lhbEZhc3RQYXRoKCk7Cit9CisKKyNpZiBFTkFCTEUo
SklUKQorREZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWwoKQor
eworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IGNvbXB1dGVDYXBhYmlsaXR5TGV2
ZWwoKTsKKyAgICBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlID0gcmVzdWx0OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisjZW5kaWYKKwordm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3Vu
ZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
JiBpbnN0cnVjdGlvbnMpCit7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaygpLT5oYXNPcFBy
b2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpKQorICAgICAgICByZXR1cm47CisgICAg
Y29uc3QgVmVjdG9yPHNpemVfdD4mIGJ5dGVjb2RlT2Zmc2V0cyA9IHVubGlua2VkQ29kZUJsb2Nr
KCktPm9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDAsIG9mZnNldHNMZW5ndGggPSBieXRlY29kZU9mZnNldHMuc2l6ZSgpOyBpIDwgb2Zm
c2V0c0xlbmd0aDsgaSsrKSB7CisgICAgICAgIC8vIEJlY2F1c2Ugb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cgaXMgZW1pdHRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGJhc2ljIGJsb2NrLCBm
aW5kaW5nIAorICAgICAgICAvLyB0aGUgbmV4dCBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyB3aWxs
IGdpdmUgdXMgdGhlIHRleHQgcmFuZ2Ugb2YgYSBzaW5nbGUgYmFzaWMgYmxvY2suCisgICAgICAg
IHNpemVfdCBzdGFydElkeCA9IGJ5dGVjb2RlT2Zmc2V0c1tpXTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc1tzdGFydElk
eF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKKyAgICAgICAgaW50IGJh
c2ljQmxvY2tTdGFydE9mZnNldCA9IGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUub3BlcmFu
ZDsKKyAgICAgICAgaW50IGJhc2ljQmxvY2tFbmRPZmZzZXQ7CisgICAgICAgIGlmIChpICsgMSA8
IG9mZnNldHNMZW5ndGgpIHsKKyAgICAgICAgICAgIHNpemVfdCBlbmRJZHggPSBieXRlY29kZU9m
ZnNldHNbaSArIDFdOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+aW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc1tlbmRJZHhdLnUub3Bjb2RlKSA9PSBvcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdyk7CisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0ID0gaW5z
dHJ1Y3Rpb25zW2VuZElkeCArIDFdLnUub3BlcmFuZCAtIDE7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zmc2V0ID0gbV9zb3VyY2VPZmZzZXQgKyBvd25lclNj
cmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCkubGVuZ3RoKCkgLSAxOyAvLyBPZmZzZXQgYmVmb3Jl
IHRoZSBjbG9zaW5nIGJyYWNlLgorICAgICAgICAgICAgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0g
c3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsgLy8g
U29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBhdCB0aGUgY2xvc2luZyBicmFjZSwgZW5zdXJlIGl0
IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgorICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBjaGVjayBhbGxvd3MgZm9yIHRoZSBzYW1lIHRleHR1YWwgSmF2YVNjcmlwdCBiYXNpYyBi
bG9jayB0byBoYXZlIGl0cyBieXRlY29kZSBlbWl0dGVkIG1vcmUKKyAgICAgICAgLy8gdGhhbiBv
bmNlIGFuZCBzdGlsbCBwbGF5IG5pY2Ugd2l0aCB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLiBX
aGVuIGJhc2ljQmxvY2tTdGFydE9mZnNldCBpcyBsYXJnZXIgdGhhbiAKKyAgICAgICAgLy8gYmFz
aWNCbG9ja0VuZE9mZnNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGJ5dGVjb2RlIGdlbmVyYXRv
ciBoYXMgZW1pdHRlZCBjb2RlIGZvciB0aGUgc2FtZSBBU1Qgbm9kZSAKKyAgICAgICAgLy8gbW9y
ZSB0aGFuIG9uY2UgKGZvciBleGFtcGxlOiBGb3JJbk5vZGUsIEZpbmFsbHkgYmxvY2tzIGluIFRy
eU5vZGUsIGV0YykuIFRob3VnaCB0aGVzZSBhcmUgZGlmZmVyZW50IAorICAgICAgICAvLyBiYXNp
YyBibG9ja3MgYXQgdGhlIGJ5dGVjb2RlIGxldmVsLCB0aGV5IGFyZSBnZW5lcmF0ZWQgZnJvbSB0
aGUgc2FtZSB0ZXh0dWFsIGJhc2ljIGJsb2NrIGluIHRoZSBKYXZhU2NyaXB0IAorICAgICAgICAv
LyBwcm9ncmFtLiBUaGUgY29uZGl0aW9uOiAKKyAgICAgICAgLy8gKGJhc2ljQmxvY2tFbmRPZmZz
ZXQgPCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQpIAorICAgICAgICAvLyBpcyBlbmNvdW50ZXJlZCB3
aGVuIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IGxpZXMgYWNyb3NzIHRoZSBib3VuZGFyeSBvZiB0
aGVzZSBkdXBsaWNhdGVkIGJ5dGVjb2RlIGJhc2ljIAorICAgICAgICAvLyBibG9ja3MgYW5kIHRo
ZSB0ZXh0dWFsIG9mZnNldCBnb2VzIGZyb20gdGhlIGVuZCBvZiB0aGUgZHVwbGljYXRlZCBibG9j
ayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuIFRoZXNlIAorICAgICAgICAvLyByYW5nZXMgYXJlIGR1
bW15IHJhbmdlcyBhbmQgYXJlIGlnbm9yZWQuIFRoZSBkdXBsaWNhdGVkIGJ5dGVjb2RlIGJhc2lj
IGJsb2NrcyBwb2ludCB0byB0aGUgc2FtZSAKKyAgICAgICAgLy8gaW50ZXJuYWwgZGF0YSBzdHJ1
Y3R1cmUsIHNvIGlmIGFueSBvZiB0aGVtIGV4ZWN1dGUsIGl0IHdpbGwgcmVjb3JkIHRoZSBzYW1l
IHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIAorICAgICAgICAvLyBKYXZhU2NyaXB0IHByb2dy
YW0gYXMgZXhlY3V0aW5nLgorICAgICAgICAvLyBBdCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoaXMg
c2l0dWF0aW9uIGxvb2tzIGxpa2U6CisgICAgICAgIC8vIGo6IG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93IChmcm9tIGotPmssIHdlIGhhdmUgYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tT
dGFydE9mZnNldCkKKyAgICAgICAgLy8gLi4uCisgICAgICAgIC8vIGs6IG9wX3Byb2ZpbGVfY29u
dHJvbF9mbG93ICh3ZSB3YW50IHRvIHNraXAgb3ZlciB0aGUgai0+ayBibG9jayBhbmQgc3RhcnQg
ZnJlc2ggYXQgb2Zmc2V0IGsgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3IGJhc2ljIGJsb2NrIGstPm0p
LgorICAgICAgICAvLyAuLi4KKyAgICAgICAgLy8gbTogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cK
KyAgICAgICAgaWYgKGJhc2ljQmxvY2tFbmRPZmZzZXQgPCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgKyAxIDwgb2Zmc2V0c0xlbmd0aCk7IC8v
IFdlIHNob3VsZCBuZXZlciBlbmNvdW50ZXIgZHVtbXkgYmxvY2tzIGF0IHRoZSBlbmQgb2YgYSBD
b2RlQmxvY2suCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2lj
QmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtbXlCYXNpY0Js
b2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2lj
QmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9m
aWxlcigpLT5nZXRCYXNpY0Jsb2NrTG9jYXRpb24ob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNv
dXJjZUlEKCksIGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldCk7CisK
KyAgICAgICAgLy8gRmluZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGVuY2xvc2VkIHdpdGhpbiB0
aGUgcmFuZ2U6IFtiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdCisg
ICAgICAgIC8vIGFuZCBpbnNlcnQgdGhlc2UgZnVuY3Rpb25zJyBzdGFydC9lbmQgb2Zmc2V0cyBh
cyBnYXBzIGluIHRoZSBjdXJyZW50IEJhc2ljQmxvY2tMb2NhdGlvbi4KKyAgICAgICAgLy8gVGhp
cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRleHQgb2YgYSBK
YXZhU2NyaXB0IHByb2dyYW0sIAorICAgICAgICAvLyBmdW5jdGlvbiBsaXRlcmFscyBmb3JtIG5l
dyBiYXNpYyBibG9ja3MgYm91bmRhcmllcywgYnV0IHRoZXkgYXJlbid0IHJlcHJlc2VudGVkIAor
ICAgICAgICAvLyBpbnNpZGUgdGhlIENvZGVCbG9jaydzIGluc3RydWN0aW9uIHN0cmVhbS4KKyAg
ICAgICAgYXV0byBpbnNlcnRGdW5jdGlvbkdhcHMgPSBbYmFzaWNCbG9ja0xvY2F0aW9uLCBiYXNp
Y0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXRdIChjb25zdCBXcml0ZUJhcnJp
ZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZnVuY3Rpb25FeGVjdXRhYmxlKSB7CisgICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxlKCk7CisgICAgICAgICAgICBpbnQgZnVuY3Rp
b25TdGFydCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAgICAg
ICAgICAgaW50IGZ1bmN0aW9uRW5kID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNl
dCgpOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uU3RhcnQgPj0gYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0ICYmIGZ1bmN0aW9uRW5kIDw9IGJhc2ljQmxvY2tFbmRPZmZzZXQpCisgICAgICAgICAgICAg
ICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5pbnNlcnRHYXAoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25F
bmQpOworICAgICAgICB9OworCisgICAgICAgIGZvciAoY29uc3QgV3JpdGVCYXJyaWVyPEZ1bmN0
aW9uRXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUgOiBtX2Z1bmN0aW9uRGVjbHMpCisgICAgICAgICAg
ICBpbnNlcnRGdW5jdGlvbkdhcHMoZXhlY3V0YWJsZSk7CisgICAgICAgIGZvciAoY29uc3QgV3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUgOiBtX2Z1bmN0aW9uRXhw
cnMpCisgICAgICAgICAgICBpbnNlcnRGdW5jdGlvbkdhcHMoZXhlY3V0YWJsZSk7CisKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5iYXNpY0Jsb2NrTG9jYXRpb24gPSBiYXNp
Y0Jsb2NrTG9jYXRpb247CisgICAgfQorfQorCisjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ29kZUJs
b2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5N
YXA+JiYgbWFwKSAKK3sgCisgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsK
K30KKworT3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCit7
CisgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApIHsKKyAgICAgICAgaWYgKE9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQor
ICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCisgICAgZm9yIChCYWc8U3Ry
dWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIgPSAqaXRlcjsK
KyAgICAgICAgaWYgKHN0dWItPmNvbnRhaW5zUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPENvZGVPcmlnaW4+KHN0dWItPmNvZGVPcmlnaW4pOworICAgIH0KKworICAgIGlmIChP
cHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9qaXRDb2RlLT5maW5kUEModGhpcywg
cGMpKQorICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKworICAgIHJldHVybiBOdWxsb3B0Owor
fQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKK09wdGlvbmFsPHVuc2lnbmVkPiBDb2RlQmxvY2s6
OmJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KQoreworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldDsKKyAgICBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUgPSB0aGlzLT5qaXRUeXBlKCk7CisgICAgaWYgKGppdFR5cGUg
PT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayB8fCBqaXRUeXBlID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBj
YWxsU2l0ZUluZGV4LmJpdHMoKTsKKyNlbHNlCisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGNhbGxTaXRlSW5kZXguYml0cygpKTsK
KyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9ucygpLmJl
Z2luKCk7CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklU
IHx8IGppdFR5cGUgPT0gSklUQ29kZTo6RlRMSklUKSB7CisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCkpOwor
ICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IGNvZGVPcmlnaW4oY2FsbFNpdGVJbmRleCk7Cisg
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gb3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisjZWxzZQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAg
cmV0dXJuIGJ5dGVjb2RlT2Zmc2V0OworfQorCitpbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xk
Rm9ySklUKGludDMyX3QgdGhyZXNob2xkKQoreworICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxv
Y2soKS0+ZGlkT3B0aW1pemUoKSkgeworICAgIGNhc2UgTWl4ZWRUcmlTdGF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIEZhbHNlVHJpU3RhdGU6CisgICAgICAgIHJldHVy
biB0aHJlc2hvbGQgKiA0OworICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHRocmVzaG9sZDsKK30KKwordm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3sK
KyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJ
VChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3sKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
KCkpLCB0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCit7Cisj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgZG91YmxlIG51bUFkZHMgPSAwLjA7CisgICAg
ZG91YmxlIHRvdGFsQWRkU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtTXVscyA9IDAuMDsKKyAg
ICBkb3VibGUgdG90YWxNdWxTaXplID0gMC4wOworICAgIGRvdWJsZSBudW1OZWdzID0gMC4wOwor
ICAgIGRvdWJsZSB0b3RhbE5lZ1NpemUgPSAwLjA7CisgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7
CisgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKKworICAgIGF1dG8gY291bnRJQ3MgPSBb
Jl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7CisgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElD
IDogY29kZUJsb2NrLT5tX2FkZElDcykgeworICAgICAgICAgICAgbnVtQWRkcysrOworICAgICAg
ICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBjb2RlQmxvY2stPm1fbXVsSUNzKSB7CisgICAg
ICAgICAgICBudW1NdWxzKys7CisgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNv
ZGVTaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJQyA6IGNv
ZGVCbG9jay0+bV9uZWdJQ3MpIHsKKyAgICAgICAgICAgIG51bU5lZ3MrKzsKKyAgICAgICAgICAg
IHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoSklUU3ViSUMqIHN1YklDIDogY29kZUJsb2NrLT5tX3N1YklDcykgeworICAgICAgICAg
ICAgbnVtU3VicysrOworICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgaGVh
cCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsKKworICAgIGRhdGFMb2coIk51bSBBZGRz
OiAiLCBudW1BZGRzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBBZGQgc2l6ZSBpbiBieXRl
czogIiwgdG90YWxBZGRTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIEFkZCBzaXpl
OiAiLCB0b3RhbEFkZFNpemUgLyBudW1BZGRzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOwor
ICAgIGRhdGFMb2coIk51bSBNdWxzOiAiLCBudW1NdWxzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJU
b3RhbCBNdWwgc2l6ZSBpbiBieXRlczogIiwgdG90YWxNdWxTaXplLCAiXG4iKTsKKyAgICBkYXRh
TG9nKCJBdmVyYWdlIE11bCBzaXplOiAiLCB0b3RhbE11bFNpemUgLyBudW1NdWxzLCAiXG4iKTsK
KyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIk51bSBOZWdzOiAiLCBudW1OZWdzLCAi
XG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBOZWcgc2l6ZSBpbiBieXRlczogIiwgdG90YWxOZWdT
aXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIE5lZyBzaXplOiAiLCB0b3RhbE5lZ1Np
emUgLyBudW1OZWdzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIk51
bSBTdWJzOiAiLCBudW1TdWJzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBTdWIgc2l6ZSBp
biBieXRlczogIiwgdG90YWxTdWJTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIFN1
YiBzaXplOiAiLCB0b3RhbFN1YlNpemUgLyBudW1TdWJzLCAiXG4iKTsKKworICAgIGRhdGFMb2co
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyNlbmRpZgorfQorCitCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMmIENvZGVCbG9jazo6bGl2ZW5lc3NBbmFseXNpc1Nsb3coKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IGFuYWx5c2lzID0gc3RkOjpt
YWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+KHRoaXMpOworICAgIHsKKyAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgaWYgKCFtX2xp
dmVuZXNzQW5hbHlzaXMpCisgICAgICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMgPSBXVEZNb3Zl
KGFuYWx5c2lzKTsKKyAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7CisgICAgfQor
fQorCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw0NjM4ICsyOCwxOCBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLQotI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5o
IgotI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCi0jaW5jbHVk
ZSAiQnl0ZWNvZGVVc2VEZWYuaCIKLSNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgotI2luY2x1
ZGUgIkNvZGVCbG9ja1NldC5oIgotI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgotI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkRGR0RyaXZlci5oIgotI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKLSNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
Ci0jaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgotI2luY2x1ZGUgIkdldFB1dElu
Zm8uaCIKLSNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgotI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgotI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCi0jaW5j
bHVkZSAiTExJbnREYXRhLmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCi0jaW5jbHVk
ZSAiTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5j
bHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlJlZHVjZVdoaXRl
c3BhY2UuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKLSNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIlR5cGVQ
cm9maWxlci5oIgotI2luY2x1ZGUgIlVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKLSNpbmNs
dWRlICJWTUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUV4ZWN1dGFibGUuaCIKLSNp
bmNsdWRlIDx3dGYvQmFnVG9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgotI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpbmNsdWRlICJS
ZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShGVExfSklUKQot
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlByb2dyYW1Db2RlQmxv
Y2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBDb2RlQmxvY2s6OnNf
aW5mbyA9IHsKLSAgICAiQ29kZUJsb2NrIiwgMCwgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxF
KENvZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBGdW5jdGlvbkNvZGVCbG9jazo6c19p
bmZvID0gewotICAgICJGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAg
Q1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkNvZGVCbG9jaykKLX07Ci0KLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi1jb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5m
byA9IHsKLSAgICAiV2ViQXNzZW1ibHlDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAg
IENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlDb2RlQmxvY2spCi19OwotI2VuZGlmCi0K
LWNvbnN0IENsYXNzSW5mbyBHbG9iYWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiR2xvYmFs
Q29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEds
b2JhbENvZGVCbG9jaykKLX07Ci0KIGNvbnN0IENsYXNzSW5mbyBQcm9ncmFtQ29kZUJsb2NrOjpz
X2luZm8gPSB7CiAgICAgIlByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAogICAg
IENSRUFURV9NRVRIT0RfVEFCTEUoUHJvZ3JhbUNvZGVCbG9jaykKIH07CiAKLWNvbnN0IENsYXNz
SW5mbyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIk1vZHVsZVByb2dy
YW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUo
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBFdmFsQ29kZUJs
b2NrOjpzX2luZm8gPSB7Ci0gICAgIkV2YWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAot
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbENvZGVCbG9jaykKLX07Ci0KLXZvaWQgRnVuY3Rp
b25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIGpzQ2FzdDxGdW5jdGlv
bkNvZGVCbG9jayo+KGNlbGwpLT5+RnVuY3Rpb25Db2RlQmxvY2soKTsKLX0KLQotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLXZvaWQgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIGpzQ2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5+V2Vi
QXNzZW1ibHlDb2RlQmxvY2soKTsKLX0KLSNlbmRpZgotCiB2b2lkIFByb2dyYW1Db2RlQmxvY2s6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4o
Y2VsbCktPn5Qcm9ncmFtQ29kZUJsb2NrKCk7CiB9CiAKLXZvaWQgTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAganNDYXN0PE1vZHVsZVByb2dyYW1D
b2RlQmxvY2sqPihjZWxsKS0+fk1vZHVsZVByb2dyYW1Db2RlQmxvY2soKTsKLX0KLQotdm9pZCBF
dmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBqc0Nhc3Q8RXZhbENv
ZGVCbG9jayo+KGNlbGwpLT5+RXZhbENvZGVCbG9jaygpOwotfQotCi1DU3RyaW5nIENvZGVCbG9j
azo6aW5mZXJyZWROYW1lKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKLSAg
ICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgICAgIHJldHVybiAiPGdsb2JhbD4iOwotICAgIGNhc2Ug
RXZhbENvZGU6Ci0gICAgICAgIHJldHVybiAiPGV2YWw+IjsKLSAgICBjYXNlIEZ1bmN0aW9uQ29k
ZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0g
ICAgICAgIHJldHVybiAiPG1vZHVsZT4iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7
Ci0gICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZUJs
b2NrOjpoYXNIYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX2hhc2g7Ci19Ci0KLWJvb2wg
Q29kZUJsb2NrOjppc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWlz
Q29tcGlsYXRpb25UaHJlYWQoKTsKLX0KLQotQ29kZUJsb2NrSGFzaCBDb2RlQmxvY2s6Omhhc2go
KSBjb25zdAotewotICAgIGlmICghbV9oYXNoKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
U2FmZVRvQ29tcHV0ZUhhc2goKSk7Ci0gICAgICAgIG1faGFzaCA9IENvZGVCbG9ja0hhc2gob3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBtX2hhc2g7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VD
b2RlRm9yVG9vbHMoKSBjb25zdAotewotICAgIGlmIChjb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29k
ZSkKLSAgICAgICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS50b1VU
RjgoKTsKLSAgICAKLSAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKTsKLSAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOwotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiB1bmxpbmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwotICAgIHVuc2ln
bmVkIHVubGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKLSAgICB1
bnNpZ25lZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zm
c2V0KCk7Ci0gICAgaW50IGRlbHRhID0gbGlua2VkU3RhcnRPZmZzZXQgLSB1bmxpbmtlZFN0YXJ0
T2Zmc2V0OwotICAgIHVuc2lnbmVkIHJhbmdlU3RhcnQgPSBkZWx0YSArIHVubGlua2VkLT51bmxp
bmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KCk7Ci0gICAgdW5zaWduZWQgcmFuZ2VFbmQgPSBkZWx0YSAr
IHVubGlua2VkLT5zdGFydE9mZnNldCgpICsgdW5saW5rZWQtPnNvdXJjZUxlbmd0aCgpOwotICAg
IHJldHVybiB0b0NTdHJpbmcoCi0gICAgICAgICJmdW5jdGlvbiAiLAotICAgICAgICBwcm92aWRl
ci0+c291cmNlKCkuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFuZ2VTdGFydCku
dXRmOCgpKTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVPbk9uZUxpbmUoKSBj
b25zdAotewotICAgIHJldHVybiByZWR1Y2VXaGl0ZXNwYWNlKHNvdXJjZUNvZGVGb3JUb29scygp
KTsKLX0KLQotQ1N0cmluZyBDb2RlQmxvY2s6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25z
dAotewotICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgpKQotICAgICAg
ICByZXR1cm4gdG9DU3RyaW5nKGhhc2goKSk7Ci0gICAgcmV0dXJuICI8bm8taGFzaD4iOwotfQot
Ci12b2lkIENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYgb3V0LCBK
SVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KGluZmVycmVk
TmFtZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7Ci0gICAgb3V0LnByaW50KCI6
WyIsIFJhd1BvaW50ZXIodGhpcyksICItPiIpOwotICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCi0g
ICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKGFsdGVybmF0aXZlKCkpLCAiLT4iKTsKLSAgICBv
dXQucHJpbnQoUmF3UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGppdFR5cGUsIGNv
ZGVUeXBlKCkpOwotCi0gICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQotICAgICAg
ICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOwotICAgIG91dC5wcmludCgiLCAiLCBp
bnN0cnVjdGlvbkNvdW50KCkpOwotICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQgJiYgbV9zaG91bGRBbHdheXNCZUlubGluZWQpCi0gICAgICAgIG91dC5wcmlu
dCgiIChTaG91bGRBbHdheXNCZUlubGluZWQpIik7Ci0gICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5uZXZlcklubGluZSgpKQotICAgICAgICBvdXQucHJpbnQoIiAoTmV2ZXJJbmxpbmUp
Iik7Ci0gICAgaWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlck9wdGltaXplKCkpCi0g
ICAgICAgIG91dC5wcmludCgiIChOZXZlck9wdGltaXplKSIpOwotICAgIGVsc2UgaWYgKG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5uZXZlckZUTE9wdGltaXplKCkpCi0gICAgICAgIG91dC5wcmlu
dCgiIChOZXZlckZUTE9wdGltaXplKSIpOwotICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFibGUo
KS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKQotICAgICAgICBvdXQucHJpbnQoIiAoRGlkVHJ5VG9F
bnRlckluTG9vcCkiKTsKLSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKLSAgICBpZiAobV9k
aWRGYWlsSklUQ29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChKSVRGYWlsKSIpOwot
ICAgIGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24pCi0gICAgICAgIG91dC5wcmludCgiIChGVExGYWlsKSIpOwotICAg
IGlmICh0aGlzLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQgJiYgbV9oYXNCZWVu
Q29tcGlsZWRXaXRoRlRMKQotICAgICAgICBvdXQucHJpbnQoIiAoSGFkRlRMUmVwbGFjZW1lbnQp
Iik7Ci0gICAgb3V0LnByaW50KCJdIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgZHVtcEFzc3VtaW5nSklUVHlwZShvdXQsIGppdFR5
cGUoKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGlkTmFtZShpbnQgaWQwLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKLXsKLSAgICByZXR1cm4gdG9DU3RyaW5nKGlkZW50LmltcGwoKSwgIihAaWQi
LCBpZDAsICIpIik7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjpyZWdpc3Rlck5hbWUoaW50IHIp
IGNvbnN0Ci17Ci0gICAgaWYgKGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHIpKQotICAgICAgICBy
ZXR1cm4gY29uc3RhbnROYW1lKHIpOwotCi0gICAgcmV0dXJuIHRvQ1N0cmluZyhWaXJ0dWFsUmVn
aXN0ZXIocikpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6Y29uc3RhbnROYW1lKGludCBpbmRl
eCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnQoaW5kZXgpOwotICAg
IHJldHVybiB0b0NTdHJpbmcodmFsdWUsICIoIiwgVmlydHVhbFJlZ2lzdGVyKGluZGV4KSwgIiki
KTsKLX0KLQotc3RhdGljIENTdHJpbmcgcmVnZXhwVG9Tb3VyY2VTdHJpbmcoUmVnRXhwKiByZWdF
eHApCi17Ci0gICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAgfTsKLSAgICBp
bnQgaW5kZXggPSAxOwotICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKQotICAgICAgICBwb3N0Zml4
W2luZGV4KytdID0gJ2cnOwotICAgIGlmIChyZWdFeHAtPmlnbm9yZUNhc2UoKSkKLSAgICAgICAg
cG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAocmVnRXhwLT5tdWx0aWxpbmUoKSkKLSAg
ICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7Ci0gICAgaWYgKHJlZ0V4cC0+c3RpY2t5KCkpCi0g
ICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAneSc7Ci0gICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgp
KQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ3UnOwotCi0gICAgcmV0dXJuIHRvQ1N0cmlu
ZygiLyIsIHJlZ0V4cC0+cGF0dGVybigpLmltcGwoKSwgcG9zdGZpeCk7Ci19Ci0KLXN0YXRpYyBD
U3RyaW5nIHJlZ2V4cE5hbWUoaW50IHJlLCBSZWdFeHAqIHJlZ2V4cCkKLXsKLSAgICByZXR1cm4g
dG9DU3RyaW5nKHJlZ2V4cFRvU291cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUsICIpIik7
Ci19Ci0KLU5FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVidWdIb29rTmFtZShpbnQg
ZGVidWdIb29rVHlwZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERlYnVnSG9va1R5cGU+
KGRlYnVnSG9va1R5cGUpKSB7Ci0gICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6Ci0gICAg
ICAgICAgICByZXR1cm4gImRpZEVudGVyQ2FsbEZyYW1lIjsKLSAgICAgICAgY2FzZSBXaWxsTGVh
dmVDYWxsRnJhbWU6Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxMZWF2ZUNhbGxGcmFtZSI7Ci0g
ICAgICAgIGNhc2UgV2lsbEV4ZWN1dGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gIndp
bGxFeGVjdXRlU3RhdGVtZW50IjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZUV4cHJlc3Npb246
Ci0gICAgICAgICAgICByZXR1cm4gIndpbGxFeGVjdXRlRXhwcmVzc2lvbiI7Ci0gICAgICAgIGNh
c2UgV2lsbEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgcmV0dXJuICJ3aWxsRXhlY3V0ZVBy
b2dyYW0iOwotICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOgotICAgICAgICAgICAgcmV0
dXJuICJkaWRFeGVjdXRlUHJvZ3JhbSI7Ci0gICAgICAgIGNhc2UgRGlkUmVhY2hCcmVha3BvaW50
OgotICAgICAgICAgICAgcmV0dXJuICJkaWRSZWFjaEJyZWFrcG9pbnQiOwotICAgIH0KLQotICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCi12b2lk
IENvZGVCbG9jazo6cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhl
YywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkK
LXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLQotICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgb3ApOwotICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmlu
dEJpbmFyeU9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9u
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkKLXsKLSAgICBpbnQgcjAg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjIpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENvbmRpdGlvbmFs
SnVtcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9u
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCkK
LXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgb2Zmc2V0ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotfQotCi12b2lkIENvZGVC
bG9jazo6cHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQpCi17Ci0gICAgY29uc3QgY2hhciog
b3A7Ci0gICAgc3dpdGNoIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5v
cGNvZGUpKSB7Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9p
ZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6Ci0g
ICAgICAgIG9wID0gImdldF9ieV9pZF9wcm90b19sb2FkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIG9wID0gImdldF9ieV9pZF91bnNldCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAg
b3AgPSAiYXJyYXlfbGVuZ3RoIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05T
SURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKLSAgICAgICAgb3AgPSAwOwotI2VuZGlmCi0gICAgfQot
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAgaXQgKz0gNDsg
Ly8gSW5jcmVtZW50IHVwIHRvIHRoZSB2YWx1ZSBwcm9maWxlci4KLX0KLQotc3RhdGljIHZvaWQg
ZHVtcFN0cnVjdHVyZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBuYW1lLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0gICAgaWYgKCFzdHJ1
Y3R1cmUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBvdXQucHJpbnRmKCIlcyA9ICVwIiwg
bmFtZSwgc3RydWN0dXJlKTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseShpZGVudC5pbXBsKCkpOwotICAgIGlmIChvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCkKLSAgICAgICAgb3V0LnByaW50ZigiIChvZmZzZXQgPSAlZCkiLCBvZmZz
ZXQpOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wQ2hhaW4oUHJpbnRTdHJlYW0mIG91dCwgU3RydWN0
dXJlQ2hhaW4qIGNoYWluLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICBvdXQucHJp
bnRmKCJjaGFpbiA9ICVwOiBbIiwgY2hhaW4pOwotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAg
IGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+
aGVhZCgpOwotICAgICAgICAgKmN1cnJlbnRTdHJ1Y3R1cmU7Ci0gICAgICAgICArK2N1cnJlbnRT
dHJ1Y3R1cmUpIHsKLSAgICAgICAgaWYgKGZpcnN0KQotICAgICAgICAgICAgZmlyc3QgPSBmYWxz
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAgICAgICAg
ZHVtcFN0cnVjdHVyZShvdXQsICJzdHJ1Y3QiLCBjdXJyZW50U3RydWN0dXJlLT5nZXQoKSwgaWRl
bnQpOwotICAgIH0KLSAgICBvdXQucHJpbnRmKCJdIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpw
cmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMs
IGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmIG1hcCkKLXsKLSAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbG9jYXRpb247Ci0KLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKLSAgICAKLSAgICBVTlVTRURfUEFSQU0oaWRlbnQpOyAvLyB0ZWxsIHRoZSBjb21w
aWxlciB0byBzaHV0IHVwIGluIGNlcnRhaW4gcGxhdGZvcm0gY29uZmlndXJhdGlvbnMuCi0gICAg
Ci0gICAgaWYgKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGluc3RydWN0aW9uWzBd
LnUub3Bjb2RlKSA9PSBvcF9nZXRfYXJyYXlfbGVuZ3RoKQotICAgICAgICBvdXQucHJpbnRmKCIg
bGxpbnQoYXJyYXlfbGVuZ3RoKSIpOwotICAgIGVsc2UgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJ
RCk7Ci0gICAgICAgIG91dC5wcmludGYoIiBsbGludCgiKTsKLSAgICAgICAgZHVtcFN0cnVjdHVy
ZShvdXQsICJzdHJ1Y3QiLCBzdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgb3V0LnByaW50Zigi
KSIpOwotICAgICAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1
Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9ieV9pZF9wcm90b19sb2FkKQotICAgICAgICAg
ICAgb3V0LnByaW50ZigiIHByb3RvKCVwKSIsIGluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJQ
dHIgPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkgewotICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSAqc3R1YlB0cjsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnJlc2V0
QnlHQykKLSAgICAgICAgICAgIG91dC5wcmludCgiIChSZXNldCBCeSBHQykiKTsKLSAgICAgICAg
Ci0gICAgICAgIG91dC5wcmludGYoIiBqaXQoIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgU3Ry
dWN0dXJlKiBiYXNlU3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3MqIHN0dWIgPSBudWxscHRyOwotICAgICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKLSAg
ICAgICAgICAgIG91dC5wcmludGYoInNlbGYiKTsKLSAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUg
PSBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCJzdHViIik7Ci0gICAgICAgICAgICBzdHViID0gc3R1YkluZm8udS5zdHViOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKLSAgICAg
ICAgICAgIG91dC5wcmludGYoInVuc2V0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJy
YXlMZW5ndGgiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUpIHsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiwgIik7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91
dCwgInN0cnVjdCIsIGJhc2VTdHJ1Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChzdHViKQotICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICpzdHViKTsKLQotICAgICAg
ICBvdXQucHJpbnRmKCIpIik7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWFwKTsK
LSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJp
bnRTdHJlYW0mIG91dCwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQotewot
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBs
b2NhdGlvbjsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihpbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgIAotICAgIFVOVVNFRF9QQVJBTShpZGVudCk7IC8v
IHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25maWd1
cmF0aW9ucy4KLQotICAgIG91dC5wcmludCgiLCAiLCBpbnN0cnVjdGlvbls4XS51LnB1dEJ5SWRG
bGFncyk7Ci0gICAgCi0gICAgaWYgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rp
b25bNF0udS5zdHJ1Y3R1cmVJRCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
dm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIG91
dC5wcmludCgiIGxsaW50KCIpOwotICAgICAgICBpZiAoU3RydWN0dXJlSUQgbmV3U3RydWN0dXJl
SUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInByZXYiLCBzdHJ1
Y3R1cmUsIGlkZW50KTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAg
IGR1bXBTdHJ1Y3R1cmUob3V0LCAibmV4dCIsIG5ld1N0cnVjdHVyZSwgaWRlbnQpOwotICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IGluc3RydWN0aW9uWzddLnUuc3RydWN0
dXJlQ2hhaW4uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgZHVtcENoYWluKG91dCwgY2hhaW4sIGlkZW50KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIs
IHN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICBvdXQucHJpbnQoIikiKTsKLSAgICB9Ci0KLSNp
ZiBFTkFCTEUoSklUKQotICAgIGlmIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0ciA9IG1hcC5n
ZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9ICpzdHViUHRyOwotICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRCeUdDKQotICAg
ICAgICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdDKSIpOwotICAgICAgICAKLSAgICAgICAg
b3V0LnByaW50ZigiIGppdCgiKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc3R1YkluZm8u
Y2FjaGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAg
ICAgICAgICAgIG91dC5wcmludCgicmVwbGFjZSwgIik7Ci0gICAgICAgICAgICBkdW1wU3RydWN0
dXJlKG91dCwgInN0cnVjdCIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgaWRlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FjaGVU
eXBlOjpTdHViOiB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoInN0dWIsICIsICpzdHViSW5mby51
LnN0dWIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgotICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG91
dC5wcmludGYoIikiKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBF
eGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29u
c3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRl
ZFByb2ZpbGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiBtYXApCi17Ci0gICAgaW50IGRzdCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShkc3QpLCAi
LCAiLCByZWdpc3Rlck5hbWUoZnVuYyksICIsICIsIGFyZ0NvdW50LCAiLCAiLCByZWdpc3Rlck9m
ZnNldCk7Ci0gICAgb3V0LnByaW50KCIgKHRoaXMgYXQgIiwgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgLXJlZ2lzdGVyT2Zmc2V0KSwgIikiKTsKLSAgICBpZiAoY2FjaGVEdW1wTW9kZSA9
PSBEdW1wQ2FjaGVzKSB7Ci0gICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBpdFsxXS51LmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+bGFzdFNl
ZW5DYWxsZWUpIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoCi0gICAgICAgICAgICAgICAgIiBs
bGludCglcCwgZXhlYyAlcCkiLAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNl
ZW5DYWxsZWUuZ2V0KCksCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNh
bGxlZS0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAg
IGlmIChDYWxsTGlua0luZm8qIGluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4obG9jYXRpb24pKSkg
ewotICAgICAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gaW5mby0+bGFzdFNlZW5DYWxsZWUo
KTsKLSAgICAgICAgICAgIGlmICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
IGppdCglcCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpGVExKSVQp
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGb3IodGhpcywgbG9jYXRpb24sIG1hcCksICIpIik7Ci0jZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0obWFwKTsKLSNlbmRpZgotICAgIH0KLSAgICArK2l0OwotICAgICsraXQ7Ci0gICAgZHVt
cEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIGR1bXBW
YWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhl
YywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCkK
LXsKLSAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVu
dGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgIGl0ICs9
IDU7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKCkKLXsKLSAgICBkdW1wU291cmNl
KFdURjo6ZGF0YUZpbGUoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wU291cmNlKFByaW50
U3RyZWFtJiBvdXQpCi17Ci0gICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0
YWJsZSgpKSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAg
ICAgICAgU3RyaW5nVmlldyBzb3VyY2UgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnNvdXJjZSgpLnBy
b3ZpZGVyKCktPmdldFJhbmdlKAotICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJh
bWV0ZXJzU3RhcnRPZmZzZXQoKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+dHlw
ZVByb2ZpbGluZ0VuZE9mZnNldCgpICsgMSk7IC8vIFR5cGUgcHJvZmlsaW5nIGVuZCBvZmZzZXQg
aXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlICd9Jy4KLSAgICAgICAgCi0gICAgICAgIG91dC5w
cmludCgiZnVuY3Rpb24gIiwgaW5mZXJyZWROYW1lKCksIHNvdXJjZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgb3V0LnByaW50KGV4ZWN1dGFibGUtPnNvdXJjZSgpLnZpZXcoKSk7Ci19
Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoKQotewotICAgIGR1bXBCeXRlY29kZShX
VEY6OmRhdGFGaWxlKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50
U3RyZWFtJiBvdXQpCi17Ci0gICAgLy8gV2Ugb25seSB1c2UgdGhlIEV4ZWNTdGF0ZSogZm9yIHRo
aW5ncyB0aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhlY3V0aW9uLAotICAgIC8vIGxp
a2UgY29udmVydGluZyBhIEpTU3RyaW5nIHRvIGEgU3RyaW5nLiBIZW5jZSB0aGUgZ2xvYmFsRXhl
YyBpcyBhcHByb3ByaWF0ZS4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwotICAgIAotICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBpICs9IG9w
Y29kZUxlbmd0aHNbZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25z
KClbaV0udS5vcGNvZGUpXSkKLSAgICAgICAgKytpbnN0cnVjdGlvbkNvdW50OwotCi0gICAgb3V0
LnByaW50KCp0aGlzKTsKLSAgICBvdXQucHJpbnRmKAotICAgICAgICAiOiAlbHUgbV9pbnN0cnVj
dGlvbnM7ICVsdSBieXRlczsgJWQgcGFyYW1ldGVyKHMpOyAlZCBjYWxsZWUgcmVnaXN0ZXIocyk7
ICVkIHZhcmlhYmxlKHMpIiwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCi0gICAgICAgIG1f
bnVtUGFyYW1ldGVycywgbV9udW1DYWxsZWVMb2NhbHMsIG1fbnVtVmFycyk7Ci0gICAgb3V0LnBy
aW50KCI7IHNjb3BlIGF0ICIsIHNjb3BlUmVnaXN0ZXIoKSk7Ci0gICAgb3V0LnByaW50ZigiXG4i
KTsKLSAgICAKLSAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7Ci0gICAgQ2FsbExpbmtJbmZvTWFw
IGNhbGxMaW5rSW5mb3M7Ci0gICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKLSAgICBnZXRD
YWxsTGlua0luZm9NYXAoY2FsbExpbmtJbmZvcyk7Ci0gICAgCi0gICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBjb25zdCBJbnN0cnVjdGlv
biogZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7Ci0gICAgZm9yIChjb25zdCBJbnN0cnVjdGlv
biogaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBkdW1wQnl0ZWNvZGUob3V0
LCBleGVjLCBiZWdpbiwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Ci0gICAgCi0gICAg
aWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJcbklkZW50
aWZpZXJzOlxuIik7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgb3V0LnByaW50ZigiICBpZCV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
KSwgaWRlbnRpZmllcihpKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICsr
aTsKLSAgICAgICAgfSB3aGlsZSAoaSAhPSBudW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAgIH0K
LQotICAgIGlmICghbV9jb25zdGFudFJlZ2lzdGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0
LnByaW50ZigiXG5Db25zdGFudHM6XG4iKTsKLSAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25E
ZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6RG91YmxlOgotICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGRvdWJsZSI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
SW50ZWdlcjoKLSAgICAgICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlw
dGlvbiA9ICI6IGluIHNvdXJjZSBhcyBpbnRlZ2VyIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjoKLSAgICAg
ICAgICAgICAgICBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb25EZXNjcmlwdGlvbiA9ICIiOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50
ZigiICAgayV1ID0gJXMlc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCB0b0NTdHJpbmco
bV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkuZGF0YSgpLCBzb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgaWYgKHNpemVfdCBj
b3VudCA9IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlJlZ0V4cHMoKSkgewotICAgICAgICBvdXQu
cHJpbnRmKCJcbm1fcmVnZXhwczpcbiIpOwotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgcmUldSA9ICVzXG4iLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaSksIHJlZ2V4cFRvU291cmNlU3RyaW5nKG1fdW5saW5rZWRDb2RlLT5yZWdl
eHAoaSkpLmRhdGEoKSk7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBj
b3VudCk7Ci0gICAgfQotCi0gICAgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKG91dCk7Ci0gICAgCi0g
ICAgaWYgKG1fcmFyZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIgICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgaW50IGVudHJ5ID0gMDsKLSAgICAg
ICAgICAgIFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKFZlY3RvcjxpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1tpXS5icmFuY2hPZmZzZXRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIsICsrZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoISppdGVyKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0JTRk
ID0+ICUwNGRcbiIsIGVudHJ5ICsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLm1p
biwgKml0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAg
fVxuIik7Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmFy
ZURhdGEgJiYgIW1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgb3V0LnByaW50ZigiXG5TdHJpbmcgU3dpdGNoIEp1bXAgVGFibGVzOlxuIik7
Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIgICUxZCA9IHtcbiIsIGkpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmVuZCgpOwotICAgICAgICAgICAgZm9y
IChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2ldLm9mZnNldFRhYmxlLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
XHRcdFwiJXNcIiA9PiAlMDRkXG4iLCBpdGVyLT5rZXktPnV0ZjgoKS5kYXRhKCksIGl0ZXItPnZh
bHVlLmJyYW5jaE9mZnNldCk7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsK
LSAgICAgICAgICAgICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwotICAgIH0KLQotICAgIG91dC5wcmludGYoIlxu
Iik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJl
YW0mIG91dCkKLXsKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgb3V0LnByaW50ZigiXG5FeGNlcHRpb24g
SGFuZGxlcnM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVyc1tpXTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlx0ICVkOiB7IHN0YXJ0OiBbJTRk
XSBlbmQ6IFslNGRdIHRhcmdldDogWyU0ZF0gfSAlc1xuIiwKLSAgICAgICAgICAgICAgICBpICsg
MSwgaGFuZGxlci5zdGFydCwgaGFuZGxlci5lbmQsIGhhbmRsZXIudGFyZ2V0LCBoYW5kbGVyLnR5
cGVOYW1lKCkpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpIDwgbV9yYXJl
RGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkpOwotICAgIH0KLX0KLQotdm9pZCBDb2Rl
QmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBib29sJiBoYXNQcmlu
dGVkUHJvZmlsaW5nKQotewotICAgIGlmIChoYXNQcmludGVkUHJvZmlsaW5nKSB7Ci0gICAgICAg
IG91dC5wcmludCgiOyAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBvdXQu
cHJpbnQoIiAgICAiKTsKLSAgICBoYXNQcmludGVkUHJvZmlsaW5nID0gdHJ1ZTsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJ
bnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQotewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgKytpdDsKLSAgICBDU3Ry
aW5nIGRlc2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIp
OwotICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBi
ZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICBvdXQucHJp
bnQoZGVzY3JpcHRpb24pOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5n
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAKLSAgICArK2l0OwotICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJvZmlsZS0+YnJp
ZWZEZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOwotICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKLSAgICBvdXQucHJpbnQoZGVzY3JpcHRpb24pOwotfQotCi12b2lkIENv
ZGVCbG9jazo6ZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFy
KiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpCi17Ci0gICAgaWYgKCFwcm9maWxlIHx8ICFwcm9maWxlLT5tX2NvdW50ZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwotICAgIG91dC5wcmludChuYW1lLCBwcm9maWxlLT5tX2NvdW50ZXIpOwotfQotCi12b2lk
IENvZGVCbG9jazo6ZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYgb3V0LCBBcml0aFByb2Zp
bGUqIHByb2ZpbGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAgaWYgKCFwcm9m
aWxlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwg
aGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgb3V0LnByaW50KCJyZXN1bHRzOiAiLCAqcHJvZmls
ZSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uQW5kT3AoUHJpbnRTdHJlYW0m
IG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25z
dCBjaGFyKiBvcCkKLXsKLSAgICBvdXQucHJpbnRmKCJbJTRkXSAlLTE3cyAiLCBsb2NhdGlvbiwg
b3ApOwotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVy
YW5kKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgaW50IG9wZXJhbmQpCi17Ci0gICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0
LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUob3BlcmFuZCkuZGF0YSgpKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKLSAgICBQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwK
LSAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAm
IGNhbGxMaW5rSW5mb3MpCi17Ci0gICAgaW50IGxvY2F0aW9uID0gaXQgLSBiZWdpbjsKLSAgICBi
b29sIGhhc1ByaW50ZWRQcm9maWxpbmcgPSBmYWxzZTsKLSAgICBPcGNvZGVJRCBvcGNvZGUgPSBl
eGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOwotICAgIHN3aXRj
aCAob3Bjb2RlKSB7Ci0gICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29wZTogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRf
c2NvcGUiLCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHM6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hcmd1bWVudF9j
b3VudDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJhcmd1bWVudF9jb3VudCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNldCA9ICgrK2l0KS0+dS51bnNp
Z25lZFZhbHVlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY3JlYXRlX3Jlc3QiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNldDogJXUiLCBhcmd1bWVudE9m
ZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dl
dF9yZXN0X2xlbmd0aDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJnZXRfcmVzdF9sZW5ndGgiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudE9mZnNl
dCA9ICgrK2l0KS0+dS51bnNpZ25lZFZhbHVlOwotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJn
dW1lbnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGluZUNhcGFjaXR5ID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRGdW5jdGlvbiA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3RoaXMiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXUsICV1IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5LCBjYWNoZWRGdW5jdGlvbik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX3RoaXM6IHsK
LSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
dG9fdGhpcyIsIHIwKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gKCsraXQp
LT51LnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIsIGNhY2hlKHN0cnVjdCA9ICIsIFJhd1BvaW50ZXIoc3RydWN0
dXJlKSwgIikiKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCAoKytpdCktPnUudG9UaGlz
U3RhdHVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Y2hlY2tfdGR6OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm9wX2NoZWNrX3RkeiIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewotICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmZlcnJlZElubGlu
ZUNhcGFjaXR5ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfb2JqZWN0Iik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eSk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTa2lwIG9iamVjdCBhbGxvY2F0
aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX25ld19hcnJheTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGFyZ3YgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBhcmdjID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXJyYXkiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShhcmd2KS5kYXRhKCksIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBh
cnJheSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6IHsKLSAgICAgICAgICAgIGludCBk
c3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm5ld19hcnJheV93aXRoX3NpemUiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0
aCkuZGF0YSgpKTsKLSAgICAgICAgICAgICsraXQ7IC8vIFNraXAgYXJyYXkgYWxsb2NhdGlvbiBw
cm9maWxlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9u
ZXdfYXJyYXlfYnVmZmVyOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheV9idWZmZXIiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlZCwgJWQiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIGFyZ3YsIGFyZ2MpOwotICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJheSBhbGxvY2F0
aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX25ld19yZWdleHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHJlMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X3JlZ2V4cCIp
OwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGlmIChyMCA+PTAgJiYgcjAgPCAoaW50KW1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlJlZ0V4cHMoKSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2V4
cE5hbWUocmUwLCByZWdleHAocmUwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBvdXQucHJpbnRmKCJiYWRfcmVnZXhwKCVkKSIsIHJlMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21vdjogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm1vdiIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgICsraXQ7
Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgICsraXQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJvcF9wcm9maWxlX3R5cGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogewotICAgICAgICAgICAgQmFzaWNCbG9j
a0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSAoKytpdCktPnUuYmFzaWNCbG9ja0xvY2F0
aW9uOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAicHJvZmlsZV9jb250cm9sX2Zsb3ciKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlsl
ZCwgJWRdIiwgYmFzaWNCbG9ja0xvY2F0aW9uLT5zdGFydE9mZnNldCgpLCBiYXNpY0Jsb2NrTG9j
YXRpb24tPmVuZE9mZnNldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3Bfbm90OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJub3QiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJlcV9udWxsIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIHBy
aW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzdHJpY3RlcSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uc3RyaWN0ZXE6IHsKLSAg
ICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuc3RyaWN0
ZXEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbGVz
czogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Imxlc3MiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
bGVzc2VxOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAibGVzc2VxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2dyZWF0ZXI6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJncmVhdGVyIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2dyZWF0ZXJlcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXJlcSIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pbmM6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0
ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW5jIiwgcjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWM6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9w
QW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVjIiwgcjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19udW1iZXI6
IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRv
X251bWJlciIpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1By
aW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF90b19zdHJpbmc6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgInRvX3N0cmluZyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5lZ2F0ZSIpOwotICAgICAgICAgICAgKytpdDsgLy8g
b3BfbmVnYXRlIGhhcyBhbiBleHRyYSBvcGVyYW5kIGZvciB0aGUgQXJpdGhQcm9maWxlLgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJhZGQiKTsKLSAg
ICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX211bDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgIm11bCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGl2OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFy
eU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGl2Iik7Ci0gICAgICAgICAgICArK2l0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tb2Q6IHsKLSAg
ICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJtb2QiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG93OiB7Ci0g
ICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicG93Iik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1Yjogewot
ICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN1YiIp
OwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibHNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgcHJp
bnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJzaGlmdCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7Ci0gICAgICAg
ICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidXJzaGlmdCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsK
LSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRh
bmQiKTsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImJpdHhvciIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKLSAgICAg
ICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJiaXRvciIpOwot
ICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZTogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3ZlcnJpZGVzX2hh
c19pbnN0YW5jZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbnN0YW5jZW9mIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3VzdG9tOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluc3RhbmNl
b2ZfY3VzdG9tIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdW5zaWduZWQ6IHsKLSAgICAgICAgICAg
IHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInVuc2lnbmVkIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3R5cGVvZjogewotICAg
ICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidHlwZW9mIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2VtcHR5
OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJp
c19lbXB0eSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9pc191bmRlZmluZWQ6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImlzX3VuZGVmaW5lZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9pc19ib29sZWFuOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19ib29sZWFuIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX251bWJlcjogewotICAgICAgICAg
ICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfbnVtYmVyIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2NlbGxfd2l0
aF90eXBlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHR5cGUg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2NlbGxfd2l0aF90eXBlIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6IHsKLSAgICAgICAg
ICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVjdF9vcl9u
dWxsIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lz
X2Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJpc19mdW5jdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9pbjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImluIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0cnlfZ2V0X2J5X2lkIik7
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlk
MCkpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG9fbG9h
ZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfdW5zZXQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0
X2FycmF5X2xlbmd0aDogewotICAgICAgICAgICAgcHJpbnRHZXRCeUlkT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQpOwotICAgICAgICAgICAgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMob3V0LCBl
eGVjLCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGlu
ZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczogewotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X2lk
X3dpdGhfdGhpcyIpOwotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MikuZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWxf
d2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIy
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImdldF9ieV92YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgp
KTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBwcmludFB1dEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInB1dF9ieV9pZCIpOwotICAgICAgICAgICAgcHJpbnRQdXRCeUlkQ2FjaGVTdGF0
dXMob3V0LCBsb2NhdGlvbiwgc3R1YkluZm9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3dpdGhfdGhpczogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkX3dpdGhfdGhp
cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50
aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfd2l0aF90aGlz
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
dF9ieV92YWxfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV9p
ZDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
cHV0X2dldHRlcl9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfaWQ6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9zZXR0ZXJf
YnlfaWQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBu
MCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZDogewotICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCBuMCwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9ieV92YWw6IHsK
LSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgbjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2dl
dHRlcl9ieV92YWwiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQsICVzIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBuMCwgcmVn
aXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyX2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfc2V0dGVyX2J5X3ZhbCIpOwotICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlZmluZV9k
YXRhX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImRlZmluZV9kYXRhX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0
YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVm
aW5lX2FjY2Vzc29yX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjMgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByNCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpLCByZWdpc3Rlck5hbWUocjMpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHI0KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfaWQi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIo
aWQwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbCIpOwotICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAg
ZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAg
ICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFs
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJwdXRfYnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxp
bmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7Ci0gICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJw
dXRfYnlfdmFsX2RpcmVjdCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwg
aXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWxfYnlfdmFsIik7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRl
eDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfYnlfaW5kZXgiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAldSwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3Bfam1wOiB7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJqbXAiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkKC0+JWQpIiwgb2Zmc2V0LCBsb2Nh
dGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2p0cnVlOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQsIGV4
ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqdHJ1ZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKLSAgICAgICAgICAgIHByaW50Q29u
ZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpmYWxzZSIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDog
ewotICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQs
IGxvY2F0aW9uLCAiamVxX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFs
SnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqbmVxX251bGwiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9wdHI6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgU3BlY2lh
bDo6UG9pbnRlciBwb2ludGVyID0gKCsraXQpLT51LnNwZWNpYWxQb2ludGVyOwotICAgICAgICAg
ICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5lcV9wdHIiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlZCAoJXApLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCBwb2ludGVyLCBtX2dsb2JhbE9iamVjdC0+YWN0dWFsUG9pbnRlckZvcihwb2ludGVy
KSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICArK2l0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbGVzczogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImpsZXNzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQp
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZz
ZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpsZXNzZXEiKTsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qZ3JlYXRl
cjogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImpncmVhdGVyIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcTogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImpncmVhdGVyZXEiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCki
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNl
dCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmxlc3MiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTog
ewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImpubGVzc2VxIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVkKC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOiB7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5n
cmVhdGVyIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxv
Y2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXJlcSIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNl
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3Bf
aGludDogewotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAibG9vcF9oaW50Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3dhdGNoZG9nOiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ3YXRjaGRvZyIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWw6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJsb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIpOwotICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNo
X2ltbTogewotICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRj
aF9pbW0iKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVkLCAlZCgtPiVkKSwgJXMiLCB0YWJs
ZUluZGV4LCBkZWZhdWx0VGFyZ2V0LCBsb2NhdGlvbiArIGRlZmF1bHRUYXJnZXQsIHJlZ2lzdGVy
TmFtZShzY3J1dGluZWVSZWdpc3RlcikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIGludCB0
YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZGVmYXVsdFRh
cmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lz
dGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfY2hhciIpOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxv
Y2F0aW9uICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5k
YXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9z
d2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAic3dpdGNoX3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+JWQp
LCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRhcmdl
dCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewotICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
bmV3X2Z1bmMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVu
YzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibmV3X2dlbmVyYXRvcl9mdW5jIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9uZXdfYXN5bmNfZnVuYzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1bmMiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Z1
bmNfZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgZjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNf
ZXhwOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9uZXdfYXN5bmNfZnVuY19leHA6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hc3luY19m
dW5jX2V4cCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6
IHsKLSAgICAgICAgICAgIGludCBmdW5jUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgbmFtZVJlZyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAic2V0X2Z1bmN0aW9uX25hbWUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShmdW5jUmVn
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuYW1lUmVnKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmlu
dENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQ
cmludGVkUHJvZmlsaW5nLCBjYWxsTGlua0luZm9zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmludENh
bGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRhaWxfY2FsbCIsIER1bXBDYWNoZXMsIGhh
c1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIHByaW50
Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNo
ZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOgotICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF90
YWlsX2NhbGxfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHM6IHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCB0aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBhcmd1bWVu
dHMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWdpc3Rl
ciA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHZhckFyZ09mZnNldCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG9wTmFtZTsKLSAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gb3BfY2FsbF92YXJhcmdzKQot
ICAgICAgICAgICAgICAgIG9wTmFtZSA9ICJjYWxsX3ZhcmFyZ3MiOwotICAgICAgICAgICAgZWxz
ZSBpZiAob3Bjb2RlID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQotICAgICAgICAgICAgICAgIG9w
TmFtZSA9ICJjb25zdHJ1Y3RfdmFyYXJncyI7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxf
Y2FsbF92YXJhcmdzIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gInRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcE5hbWUpOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVkLCAlZCIsIHJlZ2lzdGVyTmFtZShyZXN1bHQpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVl
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0
ZXIsIHZhckFyZ09mZnNldCk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBp
dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2Ugb3BfcmV0OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJldCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBwcmlu
dENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMs
IGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN0cmNh
dCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgY291bnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJ0b19wcmltaXRpdmUiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOwotICAgICAg
ICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpIC0gMTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVnaXN0
ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocHJvcGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7Ci0gICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBwcm9wZXJ0eU5h
bWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOwotICAgICAgICAgICAgaXQgKz0gT1BD
T0RFX0xFTkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7
Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0g
aXRbM10udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5
KSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dl
dF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXgg
PSBpdFs0XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzVdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0WzZdLnUucHJv
ZmlsZTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm9wX2dldF9kaXJlY3RfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCks
IHByb2ZpbGUpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZGlyZWN0
X3BuYW1lKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBp
dFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRh
KCkpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcikgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbM10udS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9y
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9
IE9QQ09ERV9MRU5HVEgob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpIC0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lOiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShp
bmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogewotICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
IiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0cmluZykgLSAx
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX3dp
dGhfc2NvcGU6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCBuZXdTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IGN1cnJlbnRTY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIik7
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUobmV3U2NvcGUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGN1cnJl
bnRTY29wZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHBhcmVudFNjb3BlID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJnZXRfcGFyZW50X3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwYXJlbnRTY29wZSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Y3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY29wZSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgaW5pdGlhbFZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywg
JXMiLCAKLSAgICAgICAgICAgICAgICByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShzY29wZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3ltYm9sVGFibGUpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGluaXRpYWxWYWx1ZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJjYXRjaCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3ciLCByMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19l
cnJvcjogewotICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBFcnJvclR5cGUgazEgPSBzdGF0aWNfY2FzdDxFcnJvclR5cGU+KCgrK2l0KS0+dS51bnNp
Z25lZFZhbHVlKTsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInRocm93X3N0YXRpY19lcnJvciIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICIsIGNvbnN0YW50TmFtZShrMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dChrMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Rl
YnVnOiB7Ci0gICAgICAgICAgICBpbnQgZGVidWdIb29rVHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGhhc0JyZWFrcG9pbnRGbGFnID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJkZWJ1ZyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgZGVidWdIb29rTmFt
ZShkZWJ1Z0hvb2tUeXBlKSwgaGFzQnJlYWtwb2ludEZsYWcpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hc3NlcnQ6IHsKLSAgICAgICAgICAgIGludCBj
b25kaXRpb24gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBsaW5lID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJhc3NlcnQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
ZCIsIHJlZ2lzdGVyTmFtZShjb25kaXRpb24pLmRhdGEoKSwgbGluZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VuZDogewotICAgICAgICAgICAgaW50
IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRS
ZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJlbmQiLCByMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0
YXRpY19jYXN0PFJlc29sdmVUeXBlPigoKytpdCktPnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
bnQgZGVwdGggPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHZvaWQqIHBvaW50ZXIg
PSAoKytpdCktPnUucG9pbnRlcjsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgInJlc29sdmVfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsIDwlcz4sICVkLCAlcCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoc2NvcGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KS5kYXRhKCksIHJlc29sdmVUeXBlTmFtZShyZXNvbHZlVHlwZSksIGRlcHRoLCBwb2ludGVyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBH
ZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKLSAgICAgICAgICAgICsraXQ7IC8vIFN0cnVj
dHVyZQotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8gT3Bl
cmFuZAotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiZ2V0X2Zyb21fc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludChyZWdpc3Rlck5h
bWUocjApLCAiLCAiLCByZWdpc3Rlck5hbWUocjEpKTsKLSAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaWQwKSA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgYW5vbnltb3VzIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0
LnByaW50KCIsICIsIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkpOwotICAgICAgICAgICAg
b3V0LnByaW50KCIsICIsIGdldFB1dEluZm8ub3BlcmFuZCgpLCAiPCIsIHJlc29sdmVNb2RlTmFt
ZShnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkpLCAifCIsIHJlc29sdmVUeXBlTmFtZShnZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCkpLCAifCIsIGluaXRpYWxpemF0aW9uTW9kZU5hbWUoZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSksICI+LCAiLCBvcGVyYW5kKTsKLSAgICAgICAgICAgIGR1
bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBp
ZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbygo
KytpdCktPnUub3BlcmFuZCk7Ci0gICAgICAgICAgICArK2l0OyAvLyBTdHJ1Y3R1cmUKLSAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gKCsraXQpLT51Lm9wZXJhbmQ7IC8vIE9wZXJhbmQKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF90
b19zY29wZSIpOwotICAgICAgICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShyMCkpOwotICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFYKQotICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihp
ZDApKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgcmVnaXN0ZXJOYW1lKHIxKSwgIiwg
IiwgZ2V0UHV0SW5mby5vcGVyYW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8u
cmVzb2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKSksICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0
aW9uTW9kZSgpKSwgIj4sIDxzdHJ1Y3R1cmU+LCAiLCBvcGVyYW5kKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7Ci0g
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiZ2V0X2Zyb21fYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCBvZmZzZXQpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQs
IGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX2Fy
Z3VtZW50cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCBvZmZzZXQsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGR1bXBSYXJlQ2FzZVBy
b2ZpbGUob3V0LCAicmFyZSBjYXNlOiAiLCByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChsb2NhdGlvbiksIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIHsKLSAgICAgICAgZHVtcEFy
aXRoUHJvZmlsZShvdXQsIGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwg
aGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIFZlY3RvcjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGV4aXRQcm9maWxl
KCkuZXhpdFNpdGVzRm9yKGxvY2F0aW9uKTsKLSAgICBpZiAoIWV4aXRTaXRlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgb3V0LnByaW50KCIgISEgZnJlcXVlbnQgZXhpdHM6ICIpOwotICAgICAgICBD
b21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0
U2l0ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRTaXRl
c1tpXS5raW5kKCksICIgIiwgZXhpdFNpdGVzW2ldLmppdFR5cGUoKSk7Ci0gICAgfQotI2Vsc2Ug
Ly8gRU5BQkxFKERGR19KSVQpCi0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKLSAgICBvdXQucHJpbnQoIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoCi0gICAgUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsCi0gICAgY29uc3QgU3R1YkluZm9NYXAmIHN0dWJJbmZvcywgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiBjYWxsTGlua0luZm9zKQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGl0ID0gaW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlT2Zmc2V0OwotICAgIGR1bXBCeXRlY29kZShv
dXQsIGV4ZWMsIGluc3RydWN0aW9ucygpLmJlZ2luKCksIGl0LCBzdHViSW5mb3MsIGNhbGxMaW5r
SW5mb3MpOwotfQotCi0jZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1IobWFjcm8pIFwKLSAg
ICBtYWNybyhpbnN0cnVjdGlvbnMpIFwKLSAgICBtYWNybyhjYWxsTGlua0luZm9zKSBcCi0gICAg
bWFjcm8obGlua2VkQ2FsbGVyTGlzdCkgXAotICAgIG1hY3JvKGlkZW50aWZpZXJzKSBcCi0gICAg
bWFjcm8oZnVuY3Rpb25FeHByZXNzaW9ucykgXAotICAgIG1hY3JvKGNvbnN0YW50UmVnaXN0ZXJz
KQotCi0jZGVmaW5lIEZPUl9FQUNIX01FTUJFUl9WRUNUT1JfUkFSRV9EQVRBKG1hY3JvKSBcCi0g
ICAgbWFjcm8ocmVnZXhwcykgXAotICAgIG1hY3JvKGZ1bmN0aW9ucykgXAotICAgIG1hY3JvKGV4
Y2VwdGlvbkhhbmRsZXJzKSBcCi0gICAgbWFjcm8oc3dpdGNoSnVtcFRhYmxlcykgXAotICAgIG1h
Y3JvKHN0cmluZ1N3aXRjaEp1bXBUYWJsZXMpIFwKLSAgICBtYWNybyhldmFsQ29kZUNhY2hlKSBc
Ci0gICAgbWFjcm8oZXhwcmVzc2lvbkluZm8pIFwKLSAgICBtYWNybyhsaW5lSW5mbykgXAotICAg
IG1hY3JvKGNhbGxSZXR1cm5JbmRleFZlY3RvcikKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCi17Ci0gICAg
cmV0dXJuIHZlY3Rvci5jYXBhY2l0eSgpICogc2l6ZW9mKFQpOwotfQotCi1uYW1lc3BhY2Ugewot
Ci1jbGFzcyBQdXRUb1Njb3BlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1Ymxp
YzoKLSAgICBQdXRUb1Njb3BlRmlyZURldGFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQpCi0gICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAg
ICAgICAsIG1faWRlbnQoaWRlbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG91dC5wcmlu
dCgiTGlua2luZyBwdXRfdG9fc2NvcGUgaW4gIiwgRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSks
ICIgZm9yICIsIG1faWRlbnQpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBtX2lkZW50OwotfTsKLQotfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUNvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcikK
LSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KG90aGVy
Lm1fZ2xvYmFsT2JqZWN0KQotICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3RoZXIubV9udW1DYWxs
ZWVMb2NhbHMpCi0gICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQotICAgICwgbV9zaG91
bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSklUKQotICAgICwgbV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKLSNlbmRpZgotICAgICwg
bV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2RpZEZhaWxGVExDb21waWxh
dGlvbihmYWxzZSkKLSAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAs
IG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCi0gICAgLCBtX2lzU3RyaWN0
TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKLSAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2Rl
VHlwZSkKLSAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlzLCBvdGhlci5tX3Vu
bGlua2VkQ29kZS5nZXQoKSkKLSAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCi0g
ICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKLSAgICAsIG1fbnVtQnJl
YWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCB0aGlzLCBv
dGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKLSAgICAsIG1fdm0ob3RoZXIubV92bSkKLSAg
ICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25zKQotICAgICwgbV90aGlzUmVn
aXN0ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCi0gICAgLCBtX3Njb3BlUmVnaXN0ZXIob3RoZXIu
bV9zY29wZVJlZ2lzdGVyKQotICAgICwgbV9oYXNoKG90aGVyLm1faGFzaCkKLSAgICAsIG1fc291
cmNlKG90aGVyLm1fc291cmNlKQotICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIubV9zb3VyY2VP
ZmZzZXQpCi0gICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGluZUNv
bHVtbk9mZnNldCkKLSAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIubV9jb25zdGFudFJl
Z2lzdGVycykKLSAgICAsIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKG90aGVy
Lm1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQotICAgICwgbV9mdW5jdGlvbkRl
Y2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKLSAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5t
X2Z1bmN0aW9uRXhwcnMpCi0gICAgLCBtX29zckV4aXRDb3VudGVyKDApCi0gICAgLCBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigwKQotICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigwKQotICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93
KCkpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotCi0gICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJlZCgp
KTsKLSAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7Ci0KLSAgICBzZXROdW1Q
YXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhl
cikKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0KLSAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKLQotICAgIGlmIChvdGhlci5tX3JhcmVE
YXRhKSB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMgPSBvdGhlci5tX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVm
ZmVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOwotICAgICAgICBtX3Jh
cmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9
IG90aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICB9Ci0gICAg
Ci0gICAgaGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLQotQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0g
ICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KHNj
b3BlLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgc2NvcGUtPmdsb2JhbE9iamVjdCgpKQot
ICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9j
YWxzKQotICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZhcnMpCi0gICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotI2lmIEVOQUJMRShKSVQpCi0gICAgLCBt
X2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQotI2VuZGlm
Ci0gICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uKGZhbHNlKQotICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNl
KQotICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkpCi0gICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpCi0gICAgLCBtX2NvZGVUeXBlKHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKQotICAg
ICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHVubGlua2VkQ29k
ZUJsb2NrKQotICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKLSAgICAsIG1fc3Rl
cHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQotICAgICwgbV9udW1CcmVha3BvaW50cygw
KQotICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIG93
bmVyRXhlY3V0YWJsZSkKLSAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCi0gICAg
LCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpCi0gICAg
LCBtX3Njb3BlUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKLSAg
ICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQotICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNl
T2Zmc2V0KQotICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQotICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQotICAgICwgbV9vcHRpbWl6YXRpb25EZWxh
eUNvdW50ZXIoMCkKLSAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKLSAgICAs
IG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpKQotewotICAg
IG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLQotICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci0gICAgQVNT
RVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwotCi0gICAgQVNTRVJUKG1fc291cmNlKTsK
LSAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
OwotfQotCi12b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywKLSAgICBKU1Njb3BlKiBzY29wZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0KLSAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxl
cigpKQotICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVj
dXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KCkpOwotCi0gICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXJzKCksIHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oKSk7Ci0gICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2Vz
R2xvYmFsT2JqZWN0KCkpCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92
bSwgdGhpcywgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IExpbmtUaW1lQ29uc3RhbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgIExpbmtUaW1lQ29u
c3RhbnQgdHlwZSA9IHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGkpOwotICAgICAgICBp
ZiAodW5zaWduZWQgcmVnaXN0ZXJJbmRleCA9IHVubGlua2VkQ29kZUJsb2NrLT5yZWdpc3Rlcklu
ZGV4Rm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnNbcmVnaXN0ZXJJbmRleF0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+anND
ZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7Ci0gICAgfQotCi0gICAgLy8gV2UgYWxyZWFk
eSBoYXZlIHRoZSBjbG9uZWQgc3ltYm9sIHRhYmxlIGZvciB0aGUgbW9kdWxlIGVudmlyb25tZW50
IHNpbmNlIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUKLSAgICAvLyB0aGUgbW9kdWxlIGVudmlyb25t
ZW50cyBiZWZvcmUgbGlua2luZyB0aGUgY29kZSBibG9jay4gV2UgcmVwbGFjZSB0aGUgc3RvcmVk
IHN5bWJvbCB0YWJsZSB3aXRoIHRoZSBhbHJlYWR5IGNsb25lZCBvbmUuCi0gICAgaWYgKFVubGlu
a2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
ID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPih1bmxpbmtl
ZENvZGVCbG9jaykpIHsKLSAgICAgICAgU3ltYm9sVGFibGUqIGNsb25lZFN5bWJvbFRhYmxlID0g
anNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKS0+bW9kdWxl
RW52aXJvbm1lbnRTeW1ib2xUYWJsZSgpOwotICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNsb25lZFN5bWJv
bFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgY2xvbmVkU3ltYm9sVGFibGUtPnByZXBhcmVG
b3JUeXBlUHJvZmlsaW5nKGxvY2tlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbGFjZUNvbnN0
YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9sVGFibGUpOwotICAg
IH0KLQotICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlID0gdm0u
dHlwZVByb2ZpbGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpOwotICAgIG1fZnVuY3Rp
b25EZWNscyA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxl
Pj4odW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKLSAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMo
KSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25E
ZWNsKGkpOwotICAgICAgICBpZiAoc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
KQotICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhl
Y3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVBy
b2ZpbGluZ0VuZE9mZnNldCgpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92
bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUt
PnNvdXJjZSgpKSk7Ci0gICAgfQotCi0gICAgbV9mdW5jdGlvbkV4cHJzID0gUmVmQ291bnRlZEFy
cmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwotICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0
YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7Ci0gICAgICAgIGlmIChz
aG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCi0gICAgICAgICAgICB2bS5mdW5j
dGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0
YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwot
ICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKLSAgICB9Ci0K
LSAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKLSAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyQ291bnQoKSkgewotICAgICAgICAgICAgbV9y
YXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuZ3Jvdyhjb3VudCk7Ci0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZENvZGVCbG9jazo6Q29uc3RhbnRCdWZmZXImIGJ1ZmZlciA9IHVubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudEJ1ZmZlcihpKTsKLSAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50QnVmZmVyc1tpXSA9IGJ1ZmZlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiB1bmxpbmtlZEhhbmRsZXIgPSB1bmxpbmtlZENvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxl
cihpKTsKLSAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEt
Pm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgICAg
ICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6
Z2V0Q29kZVB0cihvcF9jYXRjaCkpKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuZ3Jvdyhjb3VudCk7Ci0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHVubGlu
a2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoaSkub2Zmc2V0VGFibGUuYmVnaW4o
KTsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHVubGlua2VkQ29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUoaSkub2Zmc2V0VGFibGUuZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yICg7IHB0ciAh
PSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE9mZnNldExvY2F0aW9uIG9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJyYW5jaE9mZnNldCA9IHB0ci0+dmFsdWUu
YnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYWRkKHB0ci0+a2V5LCBvZmZzZXQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChz
aXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVz
KCkpIHsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5ncm93KGNv
dW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewot
ICAgICAgICAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzb3VyY2VUYWJsZSA9IHVu
bGlua2VkQ29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoaSk7Ci0gICAgICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBkZXN0VGFibGUgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNb
aV07Ci0gICAgICAgICAgICAgICAgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMgPSBzb3VyY2VUYWJs
ZS5icmFuY2hPZmZzZXRzOwotICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5taW4gPSBzb3VyY2VU
YWJsZS5taW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGxv
Y2F0ZSBtZXRhZGF0YSBidWZmZXJzIGZvciB0aGUgYnl0ZWNvZGUKLSAgICBpZiAoc2l6ZV90IHNp
emUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZMTGludENhbGxMaW5rSW5mb3MoKSkKLSAg
ICAgICAgbV9sbGludENhbGxMaW5rSW5mb3MgPSBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlu
a0luZm8+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZkFycmF5UHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheVByb2ZpbGVzLmdyb3coc2l6
ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZXMoKSkKLSAgICAgICAgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
cyA9IFJlZkNvdW50ZWRBcnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPihzaXplKTsKLSAgICBp
ZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkpCi0gICAgICAgIG1fdmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2Zp
bGU+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlcygpKQotICAgICAgICBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmlsZT4oc2l6
ZSk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0
ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotI2VuZGlmCi0KLSAg
ICAvLyBDb3B5IGFuZCB0cmFuc2xhdGUgdGhlIFVubGlua2VkSW5zdHJ1Y3Rpb25zCi0gICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5jb3VudCgpOwotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW06OlJlYWRlciBpbnN0cnVj
dGlvblJlYWRlcih1bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotCi0gICAgLy8g
Qm9va2tlZXAgdGhlIHN0cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KLSAg
ICBIYXNoU2V0PEpTTW9kdWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVF
bnZpcm9ubWVudHM7Ci0KLSAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IGluc3RydWN0
aW9ucyhpbnN0cnVjdGlvbkNvdW50KTsKLQotICAgIHVuc2lnbmVkIHZhbHVlUHJvZmlsZUNvdW50
ID0gMDsKLSAgICBhdXRvIGxpbmtWYWx1ZVByb2ZpbGUgPSBbJl0odW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIHVuc2lnbmVkIG9wTGVuZ3RoKSB7Ci0gICAgICAgIHVuc2lnbmVkIHZhbHVlUHJvZmls
ZUluZGV4ID0gdmFsdWVQcm9maWxlQ291bnQrKzsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9m
aWxlID0gJm1fdmFsdWVQcm9maWxlc1t2YWx1ZVByb2ZpbGVJbmRleF07Ci0gICAgICAgIEFTU0VS
VChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcHJvZmlsZS0+bV9i
eXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICBpbnN0cnVjdGlvbnNbYnl0
ZWNvZGVPZmZzZXQgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKLSAgICB9OwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWluc3RydWN0aW9uUmVhZGVyLmF0RW5kKCk7ICkgewotICAgICAg
ICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9IGluc3RydWN0aW9uUmVhZGVyLm5leHQo
KTsKLQotICAgICAgICB1bnNpZ25lZCBvcExlbmd0aCA9IG9wY29kZUxlbmd0aChwY1swXS51Lm9w
Y29kZSk7Ci0KLSAgICAgICAgaW5zdHJ1Y3Rpb25zW2ldID0gdm0uaW50ZXJwcmV0ZXItPmdldE9w
Y29kZShwY1swXS51Lm9wY29kZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgb3BM
ZW5ndGg7ICsraikgewotICAgICAgICAgICAgaWYgKHNpemVvZihpbnQzMl90KSAhPSBzaXplb2Yo
aW50cHRyX3QpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5wb2ludGVy
ID0gMDsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0u
dS5vcGVyYW5kOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsK
LSAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50
IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkp
OwotCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJh
eVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF92YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
czoKLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKLSAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExl
bmd0aCAtIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVBy
b2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhd
OwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgotICAgICAgICBjYXNlIG9wX3RyeV9nZXRfYnlfaWQ6
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzOgotICAgICAgICBjYXNlIG9wX3RvX251bWJlcjogewotICAgICAg
ICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGlu
dCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShp
KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5
UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDogewotICAgICAgICAgICAgaW50
IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkp
OwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OgotICAgICAgICBjYXNlIG9wX25ld19hcnJh
eV9idWZmZXI6Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogewotICAgICAg
ICAgICAgaW50IGFycmF5QWxsb2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0g
Jm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXNbYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X29iamVj
dDogewotICAgICAgICAgICAgaW50IG9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXggPSBwY1tv
cExlbmd0aCAtIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9ICZtX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
c1tvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGludCBpbmZlcnJl
ZElubGluZUNhcGFjaXR5ID0gcGNbb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IG9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwotICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPmluaXRpYWxpemUodm0s
Ci0gICAgICAgICAgICAgICAgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
LCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAg
ICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUo
aSwgb3BMZW5ndGgpOwotICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BM
ZW5ndGggLSAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07
Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9z
W3BjWzVdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XSA9
ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1s1XS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgbGlu
a1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgICAgICAgICBDUkFTSCgp
OwotCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KHBjWzRdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0eXBlICE9IExvY2FsQ2xvc3Vy
ZVZhcik7Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5k
OwotCi0gICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUo
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRl
bnQsIEdldCwgdHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7Ci0g
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAg
ICAgICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkgewotICAgICAgICAgICAgICAgIGlmIChv
cC50eXBlID09IE1vZHVsZVZhcikgewotICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBs
aW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVyZW5jZWQuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHMuYWRkKGpz
Q2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVudmlyb25tZW50KSkuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0YW50KG9wLmxleGljYWxFbnZp
cm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0Nl
bGwuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9s
VGFibGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkKLSAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA2XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7Ci0gICAgICAgICAgICBsaW5rVmFs
dWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8gZ2V0X2Zyb21fc2NvcGUg
ZHN0LCBzY29wZSwgaWQsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAotCi0gICAgICAg
ICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0gcGNbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnBvaW50ZXIgPSBudWxscHRyOwotCi0gICAgICAgICAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKHBjWzRdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBM
b2NhbENsb3N1cmVWYXIpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0g
R2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBpZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBSZXNvbHZlT3Agb3Ag
PSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwg
bG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQotICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8u
cmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSku
b3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQ
dXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZh
ciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51
LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OwotICAgICAgICAgICAgZWxzZSBpZiAo
b3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1
Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9wdXRf
dG9fc2NvcGU6IHsKLSAgICAgICAgICAgIC8vIHB1dF90b19zY29wZSBzY29wZSwgaWQsIHZhbHVl
LCBHZXRQdXRJbmZvLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICAgICAgICAgIEdldFB1dEluZm8g
Z2V0UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlm
IChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gT25seSBkbyB3YXRjaGluZyBpZiB0aGUgcHJvcGVydHkgd2UncmUgcHV0dGlu
ZyB0byBpcyBub3QgYW5vbnltb3VzLgotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocGNbMl0udS5vcGVyYW5kKSAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IHBjWzVdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4o
Z2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5k
KGxvY2tlciwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIg
IT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlci0+
dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBp
ZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpbnQgbG9jYWxTY29wZURl
cHRoID0gcGNbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51
LnBvaW50ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6
YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVE
ZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNF0udS5vcGVyYW5kID0gR2V0UHV0SW5mbyhnZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9w
LnR5cGUsIGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLm9wZXJhbmQoKTsKLSAgICAg
ICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9w
LnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBv
aW50U2V0OwotICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9w
LnR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgICAg
ICAgICBpZiAob3Aud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhpcywgaWRlbnQp
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZTogewotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwotICAgICAgICAgICAgLy8gVGhlIGZvcm1h
dCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxlX3R5cGUgcmVnVG9Qcm9maWxlLCBU
eXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVzb2x2ZVR5cGU/Ci0gICAgICAgICAg
ICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwotICAgICAgICAg
ICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Ci0gICAgICAgICAgICBHbG9iYWxWYXJp
YWJsZUlEIGdsb2JhbFZhcmlhYmxlSUQgPSAwOwotICAgICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+
IGdsb2JhbFR5cGVTZXQ7Ci0gICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlu
a2VkQ29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0
cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwotICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb2ZpbGVSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
UHJvZmlsZVR5cGVCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2ZpbGVUeXBlQnl0
ZWNvZGVGbGFnPihwY1szXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgc3dpdGNoIChmbGFnKSB7Ci0gICAg
ICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVDbG9zdXJlVmFyOiB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjWzRdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICAgICAgaW50IGxvY2FsU2NvcGVEZXB0aCA9IHBjWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgICAgICBSZXNvbHZlVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZVR5cGU+KHBjWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2gg
dHlwZSBwcm9maWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3IgYSBQdXQsIHdl
IGNhbiBhbHdheXMgY2xhaW0gYSBHZXQgYmVjYXVzZQotICAgICAgICAgICAgICAgIC8vIHdlJ3Jl
IGFic3RyYWN0bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgotICAgICAgICAgICAgICAgIFJl
c29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0
aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLQotICAgICAgICAgICAgICAgIGlm
IChvcC50eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAg
ICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gb3AubGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xU
YWJsZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQot
ICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5z
eW1ib2xUYWJsZSgpOwotCi0gICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwg
PSAob3AudHlwZSA9PSBNb2R1bGVWYXIpID8gb3AuaW1wb3J0ZWROYW1lLmdldCgpIDogaWRlbnQu
aW1wbCgpOwotICAgICAgICAgICAgICAgIGlmIChzeW1ib2xUYWJsZSkgewotICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgb3VyIHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3
aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZv
ciBwcm9maWxpbmcgeWV0LgotICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFy
ZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFy
aWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwg
dm0pOwotICAgICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmds
b2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9m
aWxlck5vR2xvYmFsSURFeGlzdHM7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZl
ZDogewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNbMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBj
cmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJl
cGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCi0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJ
RCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgp
LCB2bSk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9i
YWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKLQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBQcm9maWxl
VHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRDogCi0gICAgICAgICAgICBjYXNlIFByb2Zp
bGVUeXBlQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFs
VmFyaWFibGVJRCA9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHM7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0
ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG93bmVyRXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSk7Ci0gICAgICAg
ICAgICAgICAgZ2xvYmFsVHlwZVNldCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUpLT5yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7Ci0gICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudDsKLSAgICAgICAg
ICAgICAgICBpZiAoIXNob3VsZEFuYWx5emUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQmVj
YXVzZSBhIHJldHVybiBzdGF0ZW1lbnQgY2FuIGJlIGFkZGVkIGltcGxpY2l0bHkgdG8gcmV0dXJu
IHVuZGVmaW5lZCBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAg
IC8vIGFuZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2VzIGJlY2F1c2Ug
dGhleSBhcmVuJ3QgaW4gdGhlIGFjdHVhbCBzb3VyY2UgdGV4dCBvZgotICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgdXNlcidzIHByb2dyYW0sIGdpdmUgdGhlIHR5cGUgcHJvZmlsZXIgc29tZSBy
YW5nZSB0byBpZGVudGlmeSB0aGVzZSByZXR1cm4gc3RhdGVtZW50cy4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ3VycmVudGx5LCB0aGUgdGV4dCBvZmZzZXQgdGhhdCBpcyB1c2VkIGFzIGlkZW50
aWZpY2F0aW9uIGlzICJmIiBpbiB0aGUgZnVuY3Rpb24ga2V5d29yZAotICAgICAgICAgICAgICAg
ICAgICAvLyBhbmQgaXMgc3RvcmVkIG9uIFR5cGVMb2NhdGlvbidzIG1fZGl2b3RGb3JGdW5jdGlv
bk9mZnNldElmUmV0dXJuU3RhdGVtZW50IG1lbWJlciB2YXJpYWJsZS4KLSAgICAgICAgICAgICAg
ICAgICAgZGl2b3RTdGFydCA9IGRpdm90RW5kID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9u
KiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNh
Y2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAotICAgICAgICAgICAgICAg
IG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2Jh
bFR5cGVTZXQsICZ2bSk7Ci0gICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9j
YXRpb25QYWlyLmZpcnN0OwotICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRp
b25QYWlyLnNlY29uZDsKLQotICAgICAgICAgICAgaWYgKGZsYWcgPT0gUHJvZmlsZVR5cGVCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5t
X2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVyRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzaG91bGRB
bmFseXplICYmIGlzTmV3TG9jYXRpb24pCi0gICAgICAgICAgICAgICAgdm0udHlwZVByb2ZpbGVy
KCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9jYXRpb247Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGlmIChwY1sx
XS51LmluZGV4ID09IERpZFJlYWNoQnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICBtX2hhc0Rl
YnVnZ2VyU3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogewotICAgICAgICAgICAgaW50IG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwLCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPT0gbnVtUGFyYW1ldGVycygpIC0gMSwgIldlIGFzc3VtZSB0aGF0
IHRoaXMgaXMgdHJ1ZSB3aGVuIHJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdCBwYXJhbWV0ZXIgZHVy
aW5nIE9TUiBleGl0IGluIHRoZSBGVEwgSklULiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaSArPSBvcExlbmd0aDsKLSAgICB9Ci0KLSAgICBpZiAodm0uY29udHJvbEZsb3dQ
cm9maWxlcigpKQotICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xG
bG93UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsKLQotICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGTW92
ZShpbnN0cnVjdGlvbnMpOwotCi0gICAgLy8gU2V0IG9wdGltaXphdGlvbiB0aHJlc2hvbGRzIG9u
bHkgYWZ0ZXIgbV9pbnN0cnVjdGlvbnMgaXMgaW5pdGlhbGl6ZWQsIHNpbmNlIHRoZXNlCi0gICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgotICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwotCi0gICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCi0gICAgLy8gc3luY2hyb25vdXNseS4KLSAgICBpZiAoT3B0aW9uczo6YWx3YXlz
Q29tcHV0ZUhhc2goKSkKLSAgICAgICAgaGFzaCgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBH
ZW5lcmF0ZWRCeXRlY29kZXMoKSkKLSAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Ci0gICAgCi0gICAg
aGVhcCgpLT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlv
bikpOwotfQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0NlbGwo
KnZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCks
IHRoaXMsIGdsb2JhbE9iamVjdCkKLSAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKDApCi0gICAgLCBt
X251bVZhcnMoMCkKLSAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKGZhbHNlKQotI2lmIEVO
QUJMRShKSVQpCi0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fubm90Q29tcGls
ZSkKLSNlbmRpZgotICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBt
X2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0
aEZUTChmYWxzZSkKLSAgICAsIG1faXNDb25zdHJ1Y3RvcihmYWxzZSkKLSAgICAsIG1faXNTdHJp
Y3RNb2RlKGZhbHNlKQotICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCi0gICAgLCBtX2hh
c0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQotICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdN
b2RlRGlzYWJsZWQpCi0gICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhl
Y3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAg
ICwgbV92bSh2bSkKLSAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKLSAgICAsIG1fb3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKDApCi0gICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDAp
Ci0gICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkK
LXsKLSAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwotfQotCi12b2lkIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqLCBKU0dsb2Jh
bE9iamVjdCopCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAgaGVhcCgp
LT5tX2NvZGVCbG9ja3MtPmFkZCh0aGlzKTsKLX0KLSNlbmRpZgotCi1Db2RlQmxvY2s6On5Db2Rl
QmxvY2soKQotewotICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCi0gICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7Ci0K
LSAgICBpZiAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSA9PSBNaXhlZFRyaVN0
YXRlKQotICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5zZXREaWRPcHRpbWl6ZShGYWxzZVRy
aVN0YXRlKTsKLQotI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0gICAgZHVtcFZh
bHVlUHJvZmlsZXMoKTsKLSNlbmRpZgotCi0gICAgLy8gV2UgbWF5IGJlIGRlc3Ryb3llZCBiZWZv
cmUgYW55IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUgZGVzdHJveWVkLgotICAgIC8v
IENvbnNpZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVucmVhY2hhYmxlIGF0IHRoZSBz
YW1lIHRpbWUuIFRoZXJlCi0gICAgLy8gaXMgbm8gZ3VhcmFudGVlIGFib3V0IHRoZSBvcmRlciBp
biB3aGljaCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgotICAgIC8vIFNvLCBpZiB3ZSBk
b24ndCByZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVzdHJveWVkIGJlZm9yZSB0aGUK
LSAgICAvLyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGludG8gdXMsIHRoZW4gdGhlIENh
bGxMaW5rSW5mbyB2ZWN0b3IncwotICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkgdG8gcmVtb3Zl
IG5vZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0LgotICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNh
bGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCi0gICAgLy8gbV9pbmNv
bWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxs
TGlua0luZm8KLSAgICAvLyBkZXN0cnVjdG9ycy4KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgZm9y
IChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9zdHViSW5mb3MuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWIg
PSAqaXRlcjsKLSAgICAgICAgc3R1Yi0+YWJvdXRUb0RpZSgpOwotICAgICAgICBzdHViLT5kZXJl
ZigpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENvZGVCbG9jazo6
c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKLXsKLSAgICBBU1NFUlQoY29uc3RhbnRzLnNp
emUoKSA9PSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2l6ZSgpKTsKLSAgICBz
aXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwotICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
cmVzaXplVG9GaXQoY291bnQpOwotICAgIGJvb2wgaGFzVHlwZVByb2ZpbGVyID0gISFtX3ZtLT50
eXBlUHJvZmlsZXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
LSAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsKLQotICAgICAg
ICBpZiAoIWNvbnN0YW50LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IGpzRHluYW1pY0Nhc3Q8U3ltYm9sVGFibGUqPihjb25zdGFudCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaGFzVHlwZVByb2ZpbGVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9j
a2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSog
Y2xvbmUgPSBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pOwotICAgICAgICAgICAg
ICAgIGlmICh3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNsb25lLT5zZXRSYXJlRGF0YUNvZGVCbG9jayh0aGlzKTsKLQotICAgICAgICAgICAg
ICAgIGNvbnN0YW50ID0gY2xvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnQpOwotICAg
IH0KLQotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotfQotCi12b2lkIENvZGVCbG9jazo6c2V0QWx0ZXJu
YXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQotewotICAgIG1fYWx0ZXJuYXRp
dmUuc2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRO
dW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkKLXsKLSAgICBtX251bVBhcmFtZXRlcnMgPSBuZXdW
YWx1ZTsKLQotICAgIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PFZh
bHVlUHJvZmlsZT4obmV3VmFsdWUpOwotfQotCi12b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV9jYWNoZU1hcC5lbmQoKTsKLSAgICBmb3IgKEV2YWxDYWNoZU1hcDo6aXRlcmF0
b3IgcHRyID0gbV9jYWNoZU1hcC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJnB0ci0+dmFsdWUpOwotfQotCi1Db2RlQmxvY2sqIENvZGVCbG9jazo6
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKQotewotI2lmIEVOQUJMRShGVExfSklUKQotICAg
IGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAgIHJldHVybiBq
aXRDb2RlLT5vc3JFbnRyeUJsb2NrKCk7Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBy
ZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OnZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGJvb2wgc2V0QnlNZSA9
ICFtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2Us
IHRydWUpOwotICAgIGlmICghc2V0QnlNZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KHRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoc2hvdWxkVmlzaXRTdHJvbmdseSgpKSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIodGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5h
bGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRo
ZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0
aGluZ3MKLSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25l
IG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAgLy8gZmlndXJlcyBvdXQg
d2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlv
bmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwotCi0gICAgaWYgKCFKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgd2UgamV0dGlzb24gb3Vyc2VsdmVzIHdlJ2xsIGluc3RhbGwgb3VyIGFsdGVybmF0aXZl
LCBzbyBtYWtlIHN1cmUgdGhhdCBpdAotICAgIC8vIHN1cnZpdmVzIEdDIGV2ZW4gaWYgd2UgZG9u
J3QuCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwotICAgIAotICAgIC8vIFRo
ZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMg
Zm9yOiBERkcgZml4cG9pbnQgZm9yCi0gICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8g
ZmluZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCi0gICAgLy8g
aW5saW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxl
c3MuCi0gICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZtX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gV2UgZ2V0IGhlcmUg
aWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLAotICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBz
ZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCi0gICAgLy8gY29kZSBibG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJl
aW5nCi0gICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGls
bCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAotICAgIC8vIHBlcmZvcm0gb25lIHJvdW5k
IG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNl
ZCBvbgotICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkg
b3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCi0gICAgLy8gb3RoZXIgcmVhc29ucywgdGhh
dCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0
aGlzCi0gICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4K
LQotICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwotICAgIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotCi0gICAgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+
bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gZmFsc2U7Ci0gICAgZGV0ZXJtaW5lTGl2ZW5lc3Modmlz
aXRvcik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXNpemVfdCBDb2RlQmxvY2s6
OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIENvZGVCbG9jayogdGhpc09iamVj
dCA9IGpzQ2FzdDxDb2RlQmxvY2sqPihjZWxsKTsKLSAgICBzaXplX3QgZXh0cmFNZW1vcnlBbGxv
Y2F0ZWQgPSB0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1
Y3Rpb24pOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX2ppdENvZGUpCi0gICAgICAgIGV4dHJhTWVt
b3J5QWxsb2NhdGVkICs9IHRoaXNPYmplY3QtPm1faml0Q29kZS0+c2l6ZSgpOwotICAgIHJldHVy
biBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgZXh0cmFNZW1vcnlBbGxvY2F0ZWQ7Ci19Ci0K
LXZvaWQgQ29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9j
ayo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdGhpc09iamVjdC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQotdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIHR3byB0aGluZ3MgdGhhdCBtYXkgdXNlIHVuY29uZGl0aW9uYWwgZmluYWxpemVyczogaW5s
aW5lIGNhY2hlIGNsZWFyaW5nCi0gICAgLy8gYW5kIGpldHRpc29uaW5nLiBUaGUgcHJvYmFiaWxp
dHkgb2YgdXMgd2FudGluZyB0byBkbyBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgdGhpbmdzCi0gICAg
Ly8gaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9uZSBubyBtYXR0ZXIg
d2hhdCBhbmQgd2hlbiBpdCBydW5zLCBpdAotICAgIC8vIGZpZ3VyZXMgb3V0IHdoZXRoZXIgaXQg
aGFzIGFueSB3b3JrIHRvIGRvLgotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKLQotICAgIGlmIChDb2RlQmxvY2sqIG90aGVy
QmxvY2sgPSBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQotICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG90aGVyQmxvY2spOwotCi0gICAgaWYgKG1f
aml0Q29kZSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9qaXRD
b2RlLT5zaXplKCkpOwotICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkpCi0gICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNp
emVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKLQotICAgIHN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOwotICAgIHN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKLQotICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1h
cmtlZCA9IGZhbHNlOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotfQotCi1i
b29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCi17Ci0gICAgaWYgKE9wdGlvbnM6
OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVl
ZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KLSAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28g
c3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMKLSAgICAvLyBzY2FubmVk
LCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KLSAgICBpZiAo
IUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRp
c29uRHVlVG9XZWFrUmVmZXJlbmNlKCkKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFIZWFw
Ojppc01hcmtlZCh0aGlzKTsKLX0KLQotc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCi17Ci0gICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnVzZUVhZ2VyQ29kZUJsb2NrSmV0dGlzb25UaW1pbmcoKSkpIHsKLSAgICAgICAg
c3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKLSAg
ICAgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwICsgMjApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkRG
R0pJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDQwKTsK
LSAgICAgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcygxMjApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rOgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoNSkpOwotICAgIGNhc2Ug
SklUQ29kZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIC8vIEVmZmVjdGl2ZWx5IDEwIGFkZGl0aW9u
YWwgc2Vjb25kcywgc2luY2UgQmFzZWxpbmVKSVQgYW5kCi0gICAgICAgIC8vIEludGVycHJldGVy
VGh1bmsgc2hhcmUgYSBDb2RlQmxvY2suCi0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25k
cyg1ICsgMTApKTsKLSAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKLSAgICAgICAgcmV0dXJuIHN0
ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDIwKSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6Ci0gICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKLSAgICB9Ci19Ci0KLWJvb2wg
Q29kZUJsb2NrOjpzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkKLXsKLSAgICBpZiAoSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpmb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFn
ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKHRpbWVTaW5jZUNyZWF0
aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJv
b2wgc2hvdWxkTWFya1RyYW5zaXRpb24oREZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJh
bnNpdGlvbikKLXsKLSAgICBpZiAodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4gJiYgIUhlYXA6Omlz
TWFya2VkQ29uY3VycmVudGx5KHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkodHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQg
Q29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0KLSAgICBpZiAobV9hbGxUcmFuc2l0aW9uc0hh
dmVCZWVuTWFya2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGFsbEFyZU1hcmtlZFNv
RmFyID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92
bS0+aW50ZXJwcmV0ZXI7Ci0gICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSB7Ci0gICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9ICZpbnN0cnVjdGlvbnMoKVtwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51
Lm9wY29kZSkpIHsKLSAgICAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAg
ICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVj
dHVyZUlEOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gaW5z
dHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVj
dHVyZUlEIHx8ICFuZXdTdHJ1Y3R1cmVJRCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAg
ICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwot
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0KLSAgICAgICAgICAgICAg
ICAgICAgbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsK
LSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkob2xkU3RydWN0
dXJlKSkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUo
SklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIGZvciAo
QmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2lu
KCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gKCpp
dGVyKS0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0gICAgfQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgZm9yIChhdXRvJiB3ZWFr
UmVmZXJlbmNlIDogZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcykKLSAgICAgICAg
ICAgIGFsbEFyZU1hcmtlZFNvRmFyICY9IHdlYWtSZWZlcmVuY2UtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1v
bi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRNYXJr
VHJhbnNpdGlvbihkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldKSkgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmb2xsb3dpbmcgdGhyZWUgdGhpbmdzIGFyZSBsaXZlLCB0aGVuIHRoZSB0YXJn
ZXQgb2YgdGhlCi0gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBhbHNvIGxpdmU6Ci0g
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAtIFRoaXMgY29kZSBibG9jay4g
V2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQotICAgICAgICAgICAg
ICAgIC8vICAgd2Ugd291bGRuJ3QgYmUgc2Nhbm5pbmcgb3Vyc2VsdmVzLgotICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRyYW5z
aXRpb24uIFRyYW5zaXRpb25zIG1heSBhcmlzZSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gICBj
b2RlIHRoYXQgd2FzIGlubGluZWQuIFRoZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNlcidz
Ci0gICAgICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIGlu
bGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgotICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4KLSAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIC0gVGhlIHNvdXJjZSBvZiB0aGUg
dHJhbnNpdGlvbi4gVGhlIHRyYW5zaXRpb24gY2hlY2tzIGlmIHNvbWUKLSAgICAgICAgICAgICAg
ICAvLyAgIGhlYXAgbG9jYXRpb24gaG9sZHMgdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCBzdG9yZXMg
dGhlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBi
ZSBsaXZlIGZvciB0aGUgdHJhbnNpdGlvbiB0byBiZSBsaXZlLgotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzaG9ydC1jaXJjdWl0IHRoZSBsaXZlbmVzcyBp
ZiB0aGUgc3RydWN0dXJlIGlzIGhhcm1sZXNzCi0gICAgICAgICAgICAgICAgLy8gdG8gbWFyayAo
aS5lLiBpdHMgZ2xvYmFsIG9iamVjdCBhbmQgcHJvdG90eXBlIGFyZSBib3RoIGFscmVhZHkKLSAg
ICAgICAgICAgICAgICAvLyBsaXZlKS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgCi0gICAg
aWYgKGFsbEFyZU1hcmtlZFNvRmFyKQotICAgICAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5N
YXJrZWQgPSB0cnVlOwotfQotCi12b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotICAgIAot
I2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFpbmlu
ZyB3b3JrIHRvIGRvLgotICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2Rl
LT5kZmdDb21tb24oKTsKLSAgICBpZiAoZGZnQ29tbW9uLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBOb3cgY2hlY2sgYWxsIG9mIG91ciB3ZWFr
IHJlZmVyZW5jZXMuIElmIGFsbCBvZiB0aGVtIGFyZSBsaXZlLCB0aGVuIHdlCi0gICAgLy8gaGF2
ZSBwcm92ZWQgbGl2ZW5lc3MgYW5kIHNvIHdlIHNjYW4gb3VyIHN0cm9uZyByZWZlcmVuY2VzLiBJ
ZiBhdCBlbmQgb2YKLSAgICAvLyBHQyB3ZSBzdGlsbCBoYXZlIG5vdCBwcm92ZWQgbGl2ZW5lc3Ms
IHRoZW4gdGhpcyBjb2RlIGJsb2NrIGlzIHRvYXN0LgotICAgIGJvb2wgYWxsQXJlTGl2ZVNvRmFy
ID0gdHJ1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVm
ZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkQ29uY3Vy
cmVudGx5KGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0uZ2V0KCkpKSB7Ci0gICAgICAgICAg
ICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29t
bW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBhbGxBcmVMaXZlU29GYXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJZiBzb21lIHdlYWsgcmVm
ZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbiB3YXMKLSAgICAv
LyB1bnN1Y2Nlc3NmdWwuCi0gICAgaWYgKCFhbGxBcmVMaXZlU29GYXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBSZWNvcmQgdGhp
cyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAotICAgIC8vIGNvbWUgYmFjayBoZXJlIGFnYWluLCBh
bmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCi0gICAgZGZnQ29tbW9uLT5saXZlbmVzc0hh
c0JlZW5Qcm92ZWQgPSB0cnVlOwotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0KLSAgICAgICAg
Yml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcikpOwotCi0gICAgY29kZUJsb2NrLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsK
LSAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwotfQotCi12b2lkIENv
ZGVCbG9jazo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKG9wX2dl
dF9ieV9pZCk7Ci0gICAgaW5zdHJ1Y3Rpb25bNF0udS5wb2ludGVyID0gbnVsbHB0cjsKLSAgICBp
bnN0cnVjdGlvbls1XS51LnBvaW50ZXIgPSBudWxscHRyOwotICAgIGluc3RydWN0aW9uWzZdLnUu
cG9pbnRlciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKG1fb3duZXJF
eGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLQotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVy
OwotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
ID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zKCk7Ci0gICAgZm9y
IChzaXplX3Qgc2l6ZSA9IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0g
Jmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKLSAgICAgICAg
c3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNv
ZGUpKSB7Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZF9wcm90b19sb2FkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDogewotICAg
ICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls0XS51
LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjpp
c01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQp
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHByb3Bl
cnR5IGFjY2Vzcy5cbiIpOwotICAgICAgICAgICAgY2xlYXJMTEludEdldEJ5SWRDYWNoZShjdXJJ
bnN0cnVjdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX3B1dF9ieV9pZDogewotICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQg
PSBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEOwotICAgICAgICAgICAgU3RydWN0dXJl
SUQgbmV3U3RydWN0dXJlSUQgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOwotICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gY3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1
Y3R1cmVDaGFpbi5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhl
YXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1
cmVJRCkpKSAmJgotICAgICAgICAgICAgICAgICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNN
YXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkp
ICYmCi0gICAgICAgICAgICAgICAgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5z
aXRpb24uXG4iKTsKLSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQg
PSAwOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kID0gMDsKLSAgICAg
ICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQgPSAwOwotICAgICAgICAgICAg
Y3VySW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICAgICAgICAgIGlm
ICghY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5z
dHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1
ckluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIGN1ckluc3Ry
dWN0aW9uWzJdLnUuc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlv
blszXS51LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAotICAgICAgICAgICAgICAgIGN1ckluc3RydWN0
aW9uWzNdLnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewotICAgICAgICAgICAgYXV0byYg
Y2FjaGVXcml0ZUJhcnJpZXIgPSBjdXJJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsKLSAgICAgICAg
ICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIgfHwgY2FjaGVXcml0ZUJhcnJpZXIudW52YWxpZGF0
ZWRHZXQoKSA9PSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rpb24gPSBjYWNo
ZVdyaXRlQmFycmllci5nZXQoKTsKLSAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjYWNo
ZWRGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBM
TEludCBjcmVhdGVfdGhpcyB3aXRoIGNhY2hlZCBjYWxsZWUgJXAuXG4iLCBjYWNoZWRGdW5jdGlv
bik7Ci0gICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5jbGVhcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0gICAg
ICAgICAgICAvLyBSaWdodCBub3cgdGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkuIEFueSBz
eW1ib2wgdGFibGVzIHRoYXQgdGhpcyB3aWxsIHJlZmVyIHRvCi0gICAgICAgICAgICAvLyBhcmUg
Zm9yIG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJv
bmdseSwgYW5kIHRoZXkgcmVmZXIKLSAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUg
c3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KLSAgICAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+JiBzeW1ib2xUYWJsZSA9IGN1ckluc3Ry
dWN0aW9uWzZdLnUuc3ltYm9sVGFibGU7Ci0gICAgICAgICAgICBpZiAoIXN5bWJvbFRhYmxlIHx8
IEhlYXA6OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBzeW1ib2xUYWJs
ZS5nZXQoKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICAg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IEdldFB1dEluZm8oY3VySW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGlmIChnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8IGdldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIAotICAg
ICAgICAgICAgICAgIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXIgfHwgZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBjdXJJbnN0cnVjdGlvbls1XS51LnN0cnVj
dHVyZTsKLSAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBz
Y29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOwotICAg
ICAgICAgICAgc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VySW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpOwotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQob3Bjb2RlSUQsIGZhbHNlLCAiVW5oYW5k
bGVkIG9wY29kZSBpbiBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5LCAlcyglZCkg
YXQgYmMgJXUiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sIG9wY29kZUlELCBwcm9wZXJ0eUFjY2Vz
c0luc3RydWN0aW9uc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4ndCBq
dXN0IHJlbW92ZSBhbGwgdGhlIHNldHMgd2hlbiB3ZSBjbGVhciB0aGUgY2FjaGVzIHNpbmNlIHdl
IG1pZ2h0IGhhdmUgY3JlYXRlZCBhIHdhdGNocG9pbnQgc2V0Ci0gICAgLy8gdGhlbiBjbGVhcmVk
IHRoZSBjYWNoZSB3aXRob3V0IEdDaW5nIGluIGJldHdlZW4uCi0gICAgbV9sbGludEdldEJ5SWRX
YXRjaHBvaW50TWFwLnJlbW92ZUlmKFtdKGNvbnN0IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA6Oktl
eVZhbHVlUGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gIUhlYXA6Omlz
TWFya2VkKHBhaXIua2V5KTsKLSAgICB9KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xsaW50Q2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9sbGlu
dENhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSAmJiAhSGVhcDo6aXNNYXJrZWQobV9sbGludENh
bGxMaW5rSW5mb3NbaV0uY2FsbGVlLmdldCgpKSkgewotICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJDbGVhcmluZyBMTEludCBj
YWxsIGZyb20gIiwgKnRoaXMsICJcbiIpOwotICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5m
b3NbaV0udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEhbV9sbGludENhbGxMaW5r
SW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fbGxpbnRDYWxsTGlu
a0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmdldCgpKSkKLSAgICAgICAgICAgIG1fbGxpbnRDYWxs
TGlua0luZm9zW2ldLmxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCi17Ci0jaWYgRU5BQkxF
KEpJVCkKLSAgICBmb3IgKGF1dG8gaXRlciA9IGNhbGxMaW5rSW5mb3NCZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+dmlzaXRXZWFrKCp2bSgpKTsKLQotICAgIGZvciAo
QmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2lu
KCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
byA9ICoqaXRlcjsKLSAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyh0aGlzKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIq
Pih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFs
aXplcikpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+c2hvdWxk
SmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgewotICAgICAgICBjb2RlQmxvY2stPmpldHRp
c29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSAgICBpZiAoY29kZUJsb2Nr
LT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpIHsKLSAgICAgICAgY29kZUJsb2NrLT5qZXR0
aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVCbG9jay0+aml0
VHlwZSgpKSkKLSAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7
Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29kZSgpKQotICAg
ICAgICBjb2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKLSNlbmRp
ZgotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBp
ZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdG9IYXNoTWFwKG1fc3R1Yklu
Zm9zLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShyZXN1bHQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRT
dHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZ2V0U3R1YkluZm9NYXAobG9ja2VyLCByZXN1bHQpOwot
fQotCi12b2lkIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCkKLXsKLSNpZiBFTkFCTEUoSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQotICAgICAgICB0b0hhc2hNYXAobV9j
YWxsTGlua0luZm9zLCBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luLCByZXN1bHQpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6
Z2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZ2V0Q2FsbExpbmtJbmZvTWFwKGxv
Y2tlciwgcmVzdWx0KTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpCi17Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewotICAgICAgICBm
b3IgKGF1dG8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKLSAgICAgICAgICAgIHJlc3VsdC5h
ZGQoQ29kZU9yaWdpbihieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLCBieVZhbEluZm8pOwotICAg
IH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OmdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCkKLXsKLSAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGdldEJ5VmFsSW5mb01hcChs
b2NrZXIsIHJlc3VsdCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1YkluZm8q
IENvZGVCbG9jazo6YWRkU3R1YkluZm8oQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9z
LmFkZChhY2Nlc3NUeXBlKTsKLX0KLQotSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMo
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFkZChh
cml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9m
aWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUp
OwotfQotCi1TdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQotewotICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
IDogbV9zdHViSW5mb3MpIHsKLSAgICAgICAgaWYgKHN0dWJJbmZvLT5jb2RlT3JpZ2luID09IGNv
ZGVPcmlnaW4pCi0gICAgICAgICAgICByZXR1cm4gc3R1YkluZm87Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1CeVZhbEluZm8qIENvZGVCbG9jazo6YWRkQnlWYWxJbmZvKCkKLXsK
LSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX2J5
VmFsSW5mb3MuYWRkKCk7Ci19Ci0KLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjphZGRDYWxsTGlu
a0luZm8oKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
cmV0dXJuIG1fY2FsbExpbmtJbmZvcy5hZGQoKTsKLX0KLQotQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGlu
ZGV4KSkKLSAgICAgICAgICAgIHJldHVybiAqaXRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpyZXNldEpJVERhdGEoKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKCFKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKTsKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGVzZSBiZWNh
dXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIGhhdmUgcmVmZXJlbmNlcyB0byBhbnkgc3R1YiBpbmZv
cywgY2FsbAotICAgIC8vIGxpbmsgaW5mb3MsIG9yIGJ5IHZhbCBpbmZvcyBpZiB3ZSBkb24ndCBo
YXZlIEpJVCBjb2RlLiBBdHRlbXB0cyB0byBxdWVyeSB0aGVzZSBkYXRhCi0gICAgLy8gc3RydWN0
dXJlcyB1c2luZyB0aGUgY29uY3VycmVudCBBUEkgKGdldFN0dWJJbmZvTWFwIGFuZCBmcmllbmRz
KSB3aWxsIHJldHVybiBub3RoaW5nIGlmIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBKSVQgY29kZS4K
LSAgICBtX3N0dWJJbmZvcy5jbGVhcigpOwotICAgIG1fY2FsbExpbmtJbmZvcy5jbGVhcigpOwot
ICAgIG1fYnlWYWxJbmZvcy5jbGVhcigpOwotICAgIAotICAgIC8vIFdlIGNhbiBjbGVhciB0aGlz
IGJlY2F1c2UgdGhlIERGRydzIHF1ZXJpZXMgdG8gdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBn
dWFyZGVkIGJ5IHdoZXRoZXIKLSAgICAvLyB0aGVyZSBpcyBKSVQgY29kZS4KLSAgICBtX3JhcmVD
YXNlUHJvZmlsZXMuY2xlYXIoKTsKLX0KLSNlbmRpZgotCi12b2lkIENvZGVCbG9jazo6dmlzaXRP
U1JFeGl0VGFyZ2V0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICAvLyBXZSBzdHJvbmds
eSB2aXNpdCBPU1IgZXhpdHMgdGFyZ2V0cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZGVhbCB3
aXRoCi0gICAgLy8gdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBhbiBleGl0IHRhcmdldCBD
b2RlQmxvY2sgb24gZGVtYW5kIGFuZAotICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNo
ZXMgdGhlIGRldGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAotICAgIC8vIHRoZSBP
U1IgZXhpdCBhZ2FpbnN0LgotCi0gICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBt
X2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgIGlmIChkZmdDb21tb24tPmlubGluZUNhbGxGcmFt
ZXMpIHsKLSAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZnQ29tbW9uLT5p
bmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5i
YXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2Fs
bEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0K
LQotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7Ci0g
ICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCgmbV91bmxpbmtlZENvZGUpOwotICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAgICBtX3JhcmVE
YXRhLT5tX2V2YWxDb2RlQ2FjaGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXMobV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIG1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25FeHBy
cy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25FeHByc1tp
XSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2Z1bmN0aW9uRGVjbHNbaV0pOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXNbaV0udmlzaXRBZ2dyZWdh
dGUodmlzaXRvcik7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoQnlWYWxJbmZvKiBieVZh
bEluZm8gOiBtX2J5VmFsSW5mb3MpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZieVZhbEluZm8t
PmNhY2hlZFN5bWJvbCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgdmlzaXRPU1JFeGl0
VGFyZ2V0cyh2aXNpdG9yKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci0KLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEhZGZn
Q29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCi0gICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pOyAvLyBBbG1v
c3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9yaWdpbiBzaG91bGQg
YWxzbyBiZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwgdGhvdWdoLgotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX2Zyb20pOwot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsK
LSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vh
a1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21t
b24tPndlYWtSZWZlcmVuY2VzW2ldKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLnNpemUoKTsgKytpKQotICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlc1tpXSk7Ci0K
LSAgICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0jZW5kaWYgICAg
Ci19Ci0KLUNvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZUFsdGVybmF0aXZlKCkKLXsKLSNp
ZiBFTkFCTEUoSklUKQotICAgIENvZGVCbG9jayogcmVzdWx0ID0gdGhpczsKLSAgICB3aGlsZSAo
cmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0
aXZlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShyZXN1bHQtPmppdFR5cGUoKSkgfHwgcmVzdWx0LT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAg
cmV0dXJuIHRoaXM7Ci0jZW5kaWYKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5l
VmVyc2lvbigpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGlu
ZUNvZGUoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgQ29kZUJsb2NrKiBy
ZXN1bHQgPSByZXBsYWNlbWVudCgpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIC8vIFRo
aXMgY2FuIGhhcHBlbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGZv
ciBhbiBleGVjdXRhYmxlLgotICAgICAgICAvLyBBc3N1bWUgdGhhdCB3ZSdyZSB0aGUgYmFzZWxp
bmUgQ29kZUJsb2NrLgotICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29k
ZTo6Tm9uZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICByZXN1bHQgPSByZXN1
bHQtPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAg
ICByZXR1cm4gdGhpczsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEpJVCkKLWJvb2wgQ29kZUJs
b2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxh
Y2UpCi17Ci0gICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5q
aXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwotfQotCi1ib29sIENvZGVCbG9jazo6aGFzT3B0aW1p
emVkUmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChq
aXRUeXBlKCkpOwotfQotI2VuZGlmCi0KLUhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVy
IHJlcXVpcmVkSGFuZGxlcikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8
IGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRl
Y29kZU9mZnNldCwgcmVxdWlyZWRIYW5kbGVyKTsKLX0KLQotSGFuZGxlckluZm8qIENvZGVCbG9j
azo6aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWly
ZWRIYW5kbGVyKQotewotICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Ci19Ci0KLUNhbGxTaXRlSW5k
ZXggQ29kZUJsb2NrOjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJ
bmRleCBvcmlnaW5hbENhbGxTaXRlKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAgIFJFTEVB
U0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKG9yaWdpbmFsQ2FsbFNpdGUpKTsKLSAgICBBU1NF
UlQoISFoYW5kbGVyRm9ySW5kZXgob3JpZ2luYWxDYWxsU2l0ZS5iaXRzKCkpKTsKLSAgICBDb2Rl
T3JpZ2luIG9yaWdpbmFsT3JpZ2luID0gY29kZU9yaWdpbihvcmlnaW5hbENhbGxTaXRlKTsKLSAg
ICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChv
cmlnaW5hbE9yaWdpbik7Ci0jZWxzZQotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSBuZXcgb24tdGhl
LWZseSBleGNlcHRpb24gaGFuZGxpbmcKLSAgICAvLyBjYWxsIHNpdGVzIG91dHNpZGUgdGhlIERG
Ry9GVEwgaW5saW5lIGNhY2hlcy4KLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luYWxDYWxsU2l0ZSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2FsbFNpdGVJ
bmRleCgwdSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnJlbW92ZUV4Y2VwdGlvbkhh
bmRsZXJGb3JDYWxsU2l0ZShDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0
aW9uSGFuZGxlcnMgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzOwotICAgIHVuc2ln
bmVkIGluZGV4ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBleGNlcHRpb25IYW5kbGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICBpZiAoaGFuZGxlci5z
dGFydCA8PSBpbmRleCAmJiBoYW5kbGVyLmVuZCA+IGluZGV4KSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25IYW5kbGVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi11bnNpZ25l
ZCBDb2RlQmxvY2s6OmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0
aW9ucygpLnNpemUoKSk7Ci0gICAgcmV0dXJuIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJz
dExpbmUoKSArIG1fdW5saW5rZWRDb2RlLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOwotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OmNvbHVtbk51bWJlckZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIGludCBkaXZvdDsK
LSAgICBpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNldDsKLSAgICB1bnNpZ25lZCBs
aW5lOwotICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxp
bmUsIGNvbHVtbik7Ci0gICAgcmV0dXJuIGNvbHVtbjsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBp
bnQmIGRpdm90LCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Ci17Ci0gICAgbV91bmxpbmtlZENvZGUtPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKLSAgICBkaXZvdCArPSBtX3NvdXJjZU9m
ZnNldDsKLSAgICBjb2x1bW4gKz0gbGluZSA/IDEgOiBmaXJzdExpbmVDb2x1bW5PZmZzZXQoKTsK
LSAgICBsaW5lICs9IG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5maXJzdExpbmUoKTsKLX0KLQot
Ym9vbCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUs
IHVuc2lnbmVkIGNvbHVtbikKLXsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSB2bSgp
LT5pbnRlcnByZXRlcjsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlv
bnMoKS5iZWdpbigpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMo
KS5lbmQoKTsKLSAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBl
bmQ7KSB7Ci0gICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29k
ZUlEKGl0LT51Lm9wY29kZSk7Ci0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9kZWJ1Zykgewot
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBpdCAtIGJlZ2luOwotICAgICAg
ICAgICAgaW50IHVudXNlZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdMaW5lOwotICAg
ICAgICAgICAgdW5zaWduZWQgb3BEZWJ1Z0NvbHVtbjsKLSAgICAgICAgICAgIGV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCB1bnVzZWQsIHVudXNlZCwgdW51
c2VkLCBvcERlYnVnTGluZSwgb3BEZWJ1Z0NvbHVtbik7Ci0gICAgICAgICAgICBpZiAobGluZSA9
PSBvcERlYnVnTGluZSAmJiAoY29sdW1uID09IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1u
IHx8IGNvbHVtbiA9PSBvcERlYnVnQ29sdW1uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBpdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQo
U2hyaW5rTW9kZSBzaHJpbmtNb2RlKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0KLSAgICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAK
LSAgICBpZiAoc2hyaW5rTW9kZSA9PSBFYXJseVNocmluaykgewotICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLnNocmlua1RvRml0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9yYXJl
RGF0YSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgfQotICAgIH0gLy8gZWxzZSBkb24ndCBzaHJpbmsg
dGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMgaW50
byB0aGVzZSB0YWJsZXMuCi19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNv
bWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIG1faW5j
b21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0Nh
bGxOb2RlKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUp
OwotICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxz
KCkKLXsKLSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4o
KS0+dW5saW5rKCk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxz
LmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nQ2Fs
bHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsKLSAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3Jw
aGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKLSAg
ICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCp2bSgpKTsK
LSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5n
Q2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcp
Ci17Ci0gICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29taW5n
TExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5l
d1JlcGxhY2VtZW50KCkKLXsKLSAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5l
d1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKLX0KLQotI2lm
IEVOQUJMRShKSVQpCi1Db2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7Ci0KLSAgICBp
ZiAoY2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVy
biBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxv
Y2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsK
LQotICAgIGlmIChjbGFzc0luZm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQotICAgICAgICBy
ZXR1cm4ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxv
Y2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQot
ICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5jb2RlQmxvY2soKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLQotI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKLSAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpp
bmZvKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ERkc6OkNhcGFi
aWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKQotewotICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7Ci0KLSAgICBpZiAo
Y2xhc3NJbmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKLSAgICAgICAgaWYgKG1f
aXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29uc3Ry
dWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwotICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZv
ckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKGNsYXNzSW5mbyA9
PSBFdmFsQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmls
aXR5TGV2ZWwodGhpcyk7Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6
OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlz
KTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygp
KQotICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwotCi0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKLSNl
bmRpZgotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gREZH
OjpDYW5ub3RDb21waWxlOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDb2Rl
QmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1p
emF0aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRhaWwpCi17Ci0jaWYgIUVOQUJM
RShERkdfSklUKQotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICBVTlVTRURfUEFSQU0oZGV0
YWlsKTsKLSNlbmRpZgotICAgIAotICAgIENPREVCTE9DS19MT0dfRVZFTlQodGhpcywgImpldHRp
c29uIiwgKCJkdWUgdG8gIiwgcmVhc29uLCAiLCBjb3VudGluZyA9ICIsIG1vZGUgPT0gQ291bnRS
ZW9wdGltaXphdGlvbiwgIiwgZGV0YWlsID0gIiwgcG9pbnRlckR1bXAoZGV0YWlsKSkpOwotCi0g
ICAgUkVMRUFTRV9BU1NFUlQocmVhc29uICE9IFByb2ZpbGVyOjpOb3RKZXR0aXNvbmVkKTsKLSAg
ICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1i
bHkoKSkgewotICAgICAgICBkYXRhTG9nKCJKZXR0aXNvbmluZyAiLCAqdGhpcyk7Ci0gICAgICAg
IGlmIChtb2RlID09IENvdW50UmVvcHRpbWl6YXRpb24pCi0gICAgICAgICAgICBkYXRhTG9nKCIg
YW5kIGNvdW50aW5nIHJlb3B0aW1pemF0aW9uIik7Ci0gICAgICAgIGRhdGFMb2coIiBkdWUgdG8g
IiwgcmVhc29uKTsKLSAgICAgICAgaWYgKGRldGFpbCkKLSAgICAgICAgICAgIGRhdGFMb2coIiwg
IiwgKmRldGFpbCk7Ci0gICAgICAgIGRhdGFMb2coIi5cbiIpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAocmVhc29uID09IFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSkgewotICAg
ICAgICBpZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkgewotICAgICAgICAgICAgZGF0
YUxvZygqdGhpcywgIiB3aWxsIGJlIGpldHRpc29uZWQgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5n
IGRlYWQgcmVmZXJlbmNlczpcbiIpOwotICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uID0gZGZn
Q29tbW9uLT50cmFuc2l0aW9uc1tpXTsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIG9yaWdpbiA9
IHRyYW5zaXRpb24ubV9jb2RlT3JpZ2luLmdldCgpOwotICAgICAgICAgICAgICAgIEpTQ2VsbCog
ZnJvbSA9IHRyYW5zaXRpb24ubV9mcm9tLmdldCgpOwotICAgICAgICAgICAgICAgIEpTQ2VsbCog
dG8gPSB0cmFuc2l0aW9uLm1fdG8uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCghb3JpZ2lu
IHx8IEhlYXA6OmlzTWFya2VkKG9yaWdpbikpICYmIEhlYXA6OmlzTWFya2VkKGZyb20pKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
VHJhbnNpdGlvbiB1bmRlciAiLCBSYXdQb2ludGVyKG9yaWdpbiksICIsICIsIFJhd1BvaW50ZXIo
ZnJvbSksICIgLT4gIiwgUmF3UG9pbnRlcih0byksICIuXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVu
Y2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFrID0gZGZnQ29t
bW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoSGVhcDo6
aXNNYXJrZWQod2VhaykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBSYXdQb2ludGVyKHdlYWspLCAi
LlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCi0KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXAoKSk7Ci0gICAg
Ci0gICAgLy8gV2Ugd2FudCB0byBhY2NvbXBsaXNoIHR3byB0aGluZ3MgaGVyZToKLSAgICAvLyAx
KSBNYWtlIHN1cmUgdGhhdCBpZiB0aGlzIENvZGVCbG9jayBpcyBvbiB0aGUgc3RhY2sgcmlnaHQg
bm93LCB0aGVuIGlmIHdlIHJldHVybiB0byBpdAotICAgIC8vICAgIHdlIHNob3VsZCBPU1IgZXhp
dCBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGFmdGVyIHRoZSBy
ZXR1cm4uCi0gICAgLy8gMikgTWFrZSBzdXJlIHRoYXQgaWYgd2UgY2FsbCB0aGUgb3duZXIgZXhl
Y3V0YWJsZSwgdGhlbiB3ZSBzaG91bGRuJ3QgY2FsbCB0aGlzIENvZGVCbG9jay4KLQotI2lmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9P
bGRBZ2UpIHsKLSAgICAgICAgaWYgKFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24g
PSBqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbi5nZXQoKSkKLSAgICAgICAgICAg
IGNvbXBpbGF0aW9uLT5zZXRKZXR0aXNvblJlYXNvbihyZWFzb24sIGRldGFpbCk7Ci0gICAgICAg
IAotICAgICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMSksIGFuZCBkb2VzIGl0cyBvd24gYm9v
ay1rZWVwaW5nIGFib3V0IHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAg
IGlmICghaml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW52YWxpZGF0ZSgpKSB7Ci0gICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQuCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0aGlzICE9IHJlcGxhY2VtZW50KCkgfHwgKG1fdm0tPmhlYXAuaXNDdXJyZW50VGhy
ZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4ZWN1dGFibGUoKSkpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoREZH
OjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnZh
bGlkYXRlICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAgICAvLyBDb3VudCB0aGUgcmVvcHRpbWl6
YXRpb24gaWYgdGhhdCdzIHdoYXQgdGhlIHVzZXIgd2FudGVkLgotICAgIGlmIChtb2RlID09IENv
dW50UmVvcHRpbWl6YXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxk
IGNhbGwgYWx0ZXJuYXRpdmUoKS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMzY3NwotICAgICAgICBiYXNlbGluZUFsdGVybmF0aXZlKCktPmNv
dW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRGlkIGNvdW50IHJlb3B0aW1pemF0aW9u
IGZvciAiLCAqdGhpcywgIlxuIik7Ci0gICAgfQotICAgIAotICAgIGlmICh0aGlzICE9IHJlcGxh
Y2VtZW50KCkpIHsKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHdlcmUgbmV2ZXIgdGhl
IGVudHJ5cG9pbnQuIFRoaXMgY2FuIGhhcHBlbiBmb3IgT1NSIGVudHJ5IGNvZGUKLSAgICAgICAg
Ly8gYmxvY2tzLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFsdGVybmF0aXZl
KCkpCi0gICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLQotICAg
IGlmIChyZWFzb24gIT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpCi0gICAgICAgIHRh
bGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAg
IC8vIEpldHRpc29uIGNhbiBoYXBwZW4gZHVyaW5nIEdDLiBXZSBkb24ndCB3YW50IHRvIGluc3Rh
bGwgY29kZSB0byBhIGRlYWQgZXhlY3V0YWJsZQotICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBh
ZGQgYSBkZWFkIG9iamVjdCB0byB0aGUgcmVtZW1iZXJlZCBzZXQuCi0gICAgaWYgKG1fdm0tPmhl
YXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICFIZWFwOjppc01hcmtlZChvd25lclNjcmlwdEV4
ZWN1dGFibGUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgYWNjb21wbGlzaGVz
ICgyKS4KLSAgICBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoCi0gICAgICAg
IG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFs
aXphdGlvbktpbmQoKSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIERpZCBpbnN0YWxsIGJh
c2VsaW5lIHZlcnNpb24gb2YgIiwgKnRoaXMsICJcbiIpOwotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotfQotCi1KU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpCi0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLX0K
LQotY2xhc3MgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBSZWN1cnNpb25D
aGVja0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHVuc2lnbmVkIGRlcHRoVG9DaGVjaykKLSAgICAgICAgOiBtX3N0YXJ0Q2FsbEZyYW1lKHN0
YXJ0Q2FsbEZyYW1lKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAg
LCBtX2RlcHRoVG9DaGVjayhkZXB0aFRvQ2hlY2spCi0gICAgICAgICwgbV9mb3VuZFN0YXJ0Q2Fs
bEZyYW1lKGZhbHNlKQotICAgICAgICAsIG1fZGlkUmVjdXJzZShmYWxzZSkKLSAgICB7IH0KLQot
ICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAotICAgIHsKLSAgICAgICAgQ2FsbEZyYW1lKiBjdXJyZW50Q2FsbEZyYW1lID0gdmlz
aXRvci0+Y2FsbEZyYW1lKCk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRDYWxsRnJhbWUgPT0gbV9z
dGFydENhbGxGcmFtZSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFtZSA9IHRydWU7
Ci0KLSAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYg
KHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSA9PSBtX2NvZGVCbG9jaykgewotICAg
ICAgICAgICAgICAgIG1fZGlkUmVjdXJzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFt
X2RlcHRoVG9DaGVjay0tKQotICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRv
bmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsK
LSAgICB9Ci0KLSAgICBib29sIGRpZFJlY3Vyc2UoKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY3Vy
c2U7IH0KLQotcHJpdmF0ZToKLSAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJhbWU7Ci0gICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVwdGhUb0No
ZWNrOwotICAgIG11dGFibGUgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7Ci0gICAgbXV0YWJs
ZSBib29sIG1fZGlkUmVjdXJzZTsKLX07Ci0KLXZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWlu
Z0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSkKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAKLSAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNhbGwgbGlu
ayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwgKnRoaXMsICJc
biIpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghbV9zaG91bGRBbHdheXNC
ZUlubGluZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIWNhbGxlckNvZGVCbG9j
aykgewotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAg
Q2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbFN0YXRl
KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFERkc6OmlzU21hbGxFbm91Z2hU
b0lubGluZUNvZGVJbnRvKGNhbGxlckNvZGVCbG9jaykpIHsKLSAgICAgICAgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGlu
aygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxs
ZXIgaXMgdG9vIGxhcmdlLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykg
ewotICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0aWxsIGluIHRoZSBpbnRlcnByZXRlciwg
dGhlbiB3ZSBjYW4ndCBleHBlY3QgaW5saW5pbmcgdG8KLSAgICAgICAgLy8gaGFwcGVuIGFueXRp
bWUgc29vbi4gQXNzdW1lIGl0J3MgcHJvZml0YWJsZSB0byBvcHRpbWl6ZSBpdCBzZXBhcmF0ZWx5
LiBUaGlzCi0gICAgICAgIC8vIGVuc3VyZXMgdGhhdCBhIGZ1bmN0aW9uIGlzIFNBQkkgb25seSBp
ZiBpdCBpcyBjYWxsZWQgbm8gbW9yZSBmcmVxdWVudGx5IHRoYW4KLSAgICAgICAgLy8gYW55IG9m
IGl0cyBjYWxsZXJzLgotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBpbiBMTEludC5cbiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExp
bmsoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxs
ZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUp
IHsKLSAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwgY29k
ZSwgYXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQotICAgICAgICAvLyBvcHRpbWl6ZWQgYW55dGlt
ZSBzb29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ugd2UK
LSAgICAgICAgLy8gZGVsYXkgZXZhbCBvcHRpbWl6YXRpb24gYnkgYSAqbG90Ki4KLSAgICAgICAg
bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkg
YmVjYXVzZSBjYWxsZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFJlY3Vyc2l2ZSBjYWxscyB3b24ndCBiZSBpbmxpbmVkLgotICAgIFJl
Y3Vyc2lvbkNoZWNrRnVuY3RvciBmdW5jdG9yKGNhbGxlckZyYW1lLCB0aGlzLCBPcHRpb25zOjpt
YXhpbXVtSW5saW5pbmdEZXB0aCgpKTsKLSAgICB2bSgpLT50b3BDYWxsRnJhbWUtPml0ZXJhdGUo
ZnVuY3Rvcik7Ci0KLSAgICBpZiAoZnVuY3Rvci5kaWRSZWN1cnNlKCkpIHsKLSAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENs
ZWFyaW5nIFNBQkkgYmVjYXVzZSByZWN1cnNpb24gd2FzIGRldGVjdGVkLlxuIik7Ci0gICAgICAg
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSA9
PSBERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgewotICAgICAgICBkYXRhTG9nKCJJbiBjYWxs
IGZyb20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigp
LCAiIHRvICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0eSBsZXZlbCBpcyBub3Qg
c2V0LlxuIik7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChjYW5Db21w
aWxlKGNhbGxlckNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAg
IGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgdGhlIGNhbGxlciBpcyBub3QgYSBE
RkcgY2FuZGlkYXRlLlxuIik7Ci0gICAgCi0gICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBm
YWxzZTsKLSNlbmRpZgotfQotCi11bnNpZ25lZCBDb2RlQmxvY2s6OnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIEFTU0VSVChtX3Jlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4KCkpOwotICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotI2Vs
c2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCi0jaWYgRU5BQkxF
KEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0
IGNhbGxlZVNhdmVSZWdpc3RlcnMpCi17Ci0gICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVl
X3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVnaXN0ZXJBdE9mZnNldExpc3QpCi17Ci0gICAg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0TGlzdCk7Ci19
Ci0gICAgCi1zdGF0aWMgc2l6ZV90IHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKHNpemVfdCBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjcHVSZWdpc3RlclNpemUgPSBzaXplb2Yodm9pZCopOwotICAgIHJldHVybiAoV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIGNhbGxlZVNhdmVSZWdpc3RlcnMg
KiBjcHVSZWdpc3RlclNpemUpIC8gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0KLX0KLQotc2l6ZV90IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
Ci17Ci0gICAgcmV0dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG51
bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci19Ci0KLXNpemVfdCBD
b2RlQmxvY2s6OmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpCi17Ci0gICAgcmV0
dXJuIHJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKG1fY2FsbGVlU2F2ZVJl
Z2lzdGVycy0+c2l6ZSgpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmNvdW50UmVvcHRpbWl6YXRp
b24oKQotewotICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAgICBpZiAobV9y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyTWF4KCkpCi0gICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRp
b25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOwotfQotCi11bnNpZ25lZCBDb2Rl
QmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMoKQotewotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBpZiAoT3B0aW9uczo6dGVzdFRoZUZUTCgpKSB7
Ci0gICAgICAgIGlmIChtX2RpZEZhaWxGVExDb21waWxhdGlvbikKLSAgICAgICAgICAgIHJldHVy
biAxMDAwMDAwOwotICAgICAgICByZXR1cm4gKG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA/IDEg
OiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Ci0gICAgfQotICAgIHJldHVybiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkgPyAxIDog
MCkgKyBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwotfQotCi1pbnQzMl90IENvZGVCbG9j
azo6Y29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoY29kZVR5
cGUoKSA9PSBFdmFsQ29kZSkKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmV2YWxUaHJlc2hvbGRN
dWx0aXBsaWVyKCk7Ci0gICAgCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWRvdWJsZSBDb2RlQmxvY2s6
Om9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKQotewotICAgIC8vIFRoaXMgZXhw
cmVzc2lvbiBhcmlzZXMgZnJvbSBkb2luZyBhIGxlYXN0LXNxdWFyZXMgZml0IG9mCi0gICAgLy8K
LSAgICAvLyBGW3hfXSA9OiBhICogU3FydFt4ICsgYl0gKyBBYnNbYyAqIHhdICsgZAotICAgIC8v
Ci0gICAgLy8gYWdhaW5zdCB0aGUgZGF0YSBwb2ludHM6Ci0gICAgLy8KLSAgICAvLyAgICB4ICAg
ICAgIEZbeF9dCi0gICAgLy8gICAgMTAgICAgICAgMC45ICAgICAgICAgIChzbWFsbGVzdCByZWFz
b25hYmxlIGNvZGUgYmxvY2spCi0gICAgLy8gICAyMDAgICAgICAgMS4wICAgICAgICAgICh0eXBp
Y2FsIHNtYWxsLWlzaCBjb2RlIGJsb2NrKQotICAgIC8vICAgMzIwICAgICAgIDEuMiAgICAgICAg
ICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIHdhbnRlZCB0byBvcHRpbWl6ZSkK
LSAgICAvLyAgMTI2OCAgICAgICA1LjAgICAgICAgICAgKHNvbWV0aGluZyBJIHNhdyBpbiAzZC1j
dWJlIHRoYXQgSSBkaWRuJ3Qgd2FudCB0byBvcHRpbWl6ZSkKLSAgICAvLyAgNDAwMCAgICAgICA1
LjUgICAgICAgICAgKHJhbmRvbSBsYXJnZSBzaXplLCB1c2VkIHRvIGNhdXNlIHRoZSBmdW5jdGlv
biB0byBjb252ZXJnZSB0byBhIHNoYWxsb3cgY3VydmUgb2Ygc29tZSBzb3J0KQotICAgIC8vIDEw
MDAwICAgICAgIDYuMCAgICAgICAgICAoc2ltaWxhciB0byBhYm92ZSkKLSAgICAvLwotICAgIC8v
IEkgYWNoaWV2ZSB0aGUgbWluaW1pemF0aW9uIHVzaW5nIHRoZSBmb2xsb3dpbmcgTWF0aGVtYXRp
Y2EgY29kZToKLSAgICAvLwotICAgIC8vIE15RnVuY3Rpb25UZW1wbGF0ZVt4XywgYV8sIGJfLCBj
XywgZF9dIDo9IGEqU3FydFt4ICsgYl0gKyBBYnNbYyp4XSArIGQKLSAgICAvLwotICAgIC8vIHNh
bXBsZXMgPSB7ezEwLCAwLjl9LCB7MjAwLCAxfSwgezMyMCwgMS4yfSwgezEyNjgsIDV9LCB7NDAw
MCwgNS41fSwgezEwMDAwLCA2fX0KLSAgICAvLwotICAgIC8vIHNvbHV0aW9uID0gCi0gICAgLy8g
ICAgIE1pbmltaXplW1BsdXMgQEAgKChNeUZ1bmN0aW9uVGVtcGxhdGVbI1tbMV1dLCBhLCBiLCBj
LCBkXSAtICNbWzJdXSleMiAmIC9AIHNhbXBsZXMpLAotICAgIC8vICAgICAgICAge2EsIGIsIGMs
IGR9XVtbMl1dCi0gICAgLy8KLSAgICAvLyBBbmQgdGhlIGNvZGUgYmVsb3cgKHRvIGluaXRpYWxp
emUgYSwgYiwgYywgZCkgaXMgZ2VuZXJhdGVkIGJ5OgotICAgIC8vCi0gICAgLy8gUHJpbnRbImNv
bnN0IGRvdWJsZSAiIDw+IFRvU3RyaW5nWyNbWzFdXV0gPD4gIiA9ICIgPD4KLSAgICAvLyAgICAg
SWZbI1tbMl1dIDwgMC4wMDAwMSwgIjAuMCIsIFRvU3RyaW5nWyNbWzJdXV1dIDw+ICI7Il0gJiAv
QCBzb2x1dGlvbgotICAgIC8vCi0gICAgLy8gV2UndmUgbG9uZyBrbm93biB0aGUgZm9sbG93aW5n
IHRvIGJlIHRydWU6Ci0gICAgLy8gLSBTbWFsbCBjb2RlIGJsb2NrcyBhcmUgY2hlYXAgdG8gb3B0
aW1pemUgYW5kIHNvIHdlIHNob3VsZCBkbyBpdCBzb29uZXIgcmF0aGVyCi0gICAgLy8gICB0aGFu
IGxhdGVyLgotICAgIC8vIC0gTGFyZ2UgY29kZSBibG9ja3MgYXJlIGV4cGVuc2l2ZSB0byBvcHRp
bWl6ZSBhbmQgc28gd2Ugc2hvdWxkIHBvc3Rwb25lIGRvaW5nIHNvLAotICAgIC8vICAgYW5kIHNv
bWV0aW1lcyBoYXZlIGEgbGFyZ2UgZW5vdWdoIHRocmVzaG9sZCB0aGF0IHdlIG5ldmVyIG9wdGlt
aXplIHRoZW0uCi0gICAgLy8gLSBUaGUgZGlmZmVyZW5jZSBpbiBjb3N0IGlzIG5vdCB0b3RhbGx5
IGxpbmVhciBiZWNhdXNlIChhKSBqdXN0IGludm9raW5nIHRoZQotICAgIC8vICAgREZHIGluY3Vy
cyBzb21lIGJhc2UgY29zdCBhbmQgKGIpIGZvciBsYXJnZSBjb2RlIGJsb2NrcyB0aGVyZSBpcyBl
bm91Z2ggc2xvcAotICAgIC8vICAgaW4gdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gaW5zdHJ1Y3Rp
b24gY291bnQgYW5kIHRoZSBhY3R1YWwgY29tcGlsYXRpb24gY29zdAotICAgIC8vICAgdGhhdCBm
b3IgdGhvc2UgbGFyZ2UgYmxvY2tzLCB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgc2hvdWxkIG5vdCBo
YXZlIGEgc3Ryb25nCi0gICAgLy8gICBpbmZsdWVuY2Ugb24gb3VyIHRocmVzaG9sZC4KLSAgICAv
LwotICAgIC8vIEkga25ldyB0aGUgZ29hbHMgYnV0IEkgZGlkbid0IGtub3cgaG93IHRvIGFjaGll
dmUgdGhlbTsgc28gSSBwaWNrZWQgYW4gaW50ZXJlc3RpbmcKLSAgICAvLyBleGFtcGxlIHdoZXJl
IHRoZSBoZXVyaXN0aWNzIHdlcmUgcmlnaHQgKGNvZGUgYmxvY2sgaW4gM2QtY3ViZSB3aXRoIGlu
c3RydWN0aW9uCi0gICAgLy8gY291bnQgMzIwLCB3aGljaCBnb3QgY29tcGlsZWQgZWFybHkgYXMg
aXQgc2hvdWxkIGhhdmUgYmVlbikgYW5kIG9uZSB3aGVyZSB0aGV5IHdlcmUKLSAgICAvLyB0b3Rh
bGx5IHdyb25nIChjb2RlIGJsb2NrIGluIDNkLWN1YmUgd2l0aCBpbnN0cnVjdGlvbiBjb3VudCAx
MjY4LCB3aGljaCB3YXMgZXhwZW5zaXZlCi0gICAgLy8gdG8gY29tcGlsZSBhbmQgZGlkbid0IHJ1
biBvZnRlbiBlbm91Z2ggdG8gd2FycmFudCBjb21waWxhdGlvbiBpbiBteSBvcGluaW9uKSwgYW5k
Ci0gICAgLy8gdGhlbiB0aHJldyBpbiBhZGRpdGlvbmFsIGRhdGEgcG9pbnRzIHRoYXQgcmVwcmVz
ZW50ZWQgbXkgb3duIGd1ZXNzIG9mIHdoYXQgb3VyCi0gICAgLy8gaGV1cmlzdGljcyBzaG91bGQg
ZG8gZm9yIHNvbWUgcm91bmQtbnVtYmVyZWQgZXhhbXBsZXMuCi0gICAgLy8KLSAgICAvLyBUaGUg
ZXhwcmVzc2lvbiB0byB3aGljaCBJIGRlY2lkZWQgdG8gZml0IHRoZSBkYXRhIGFyb3NlIGJlY2F1
c2UgSSBzdGFydGVkIHdpdGggYW4KLSAgICAvLyBhZmZpbmUgZnVuY3Rpb24sIGFuZCB0aGVuIGRp
ZCB0d28gdGhpbmdzOiBwdXQgdGhlIGxpbmVhciBwYXJ0IGluIGFuIEFicyB0byBlbnN1cmUKLSAg
ICAvLyB0aGF0IHRoZSBmaXQgZGlkbid0IGVuZCB1cCBjaG9vc2luZyBhIG5lZ2F0aXZlIHZhbHVl
IG9mIGMgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbgotICAgIC8vIHRoZSBmdW5jdGlvbiB0dXJuaW5n
IG92ZXIgYW5kIGdvaW5nIG5lZ2F0aXZlIGZvciBsYXJnZSB4KSBhbmQgSSB0aHJldyBpbiBhIFNx
cnQKLSAgICAvLyB0ZXJtIGJlY2F1c2UgU3FydCByZXByZXNlbnRzIG15IGludHV0aW9uIHRoYXQg
dGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3JlIHNlbnNpdGl2ZQotICAgIC8vIHRvIHNtYWxsIGNo
YW5nZXMgaW4gc21hbGwgdmFsdWVzIG9mIHgsIGJ1dCBsZXNzIHNlbnNpdGl2ZSB3aGVuIHggZ2V0
cyBsYXJnZS4KLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZml0IGVzc2VudGlh
bGx5IGVsaW1pbmF0ZXMgdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZQotICAgIC8vIGV4cHJlc3Np
b24gKGMgPT0gMC4wKS4KLSAgICBjb25zdCBkb3VibGUgYSA9IDAuMDYxNTA0OwotICAgIGNvbnN0
IGRvdWJsZSBiID0gMS4wMjQwNjsKLSAgICBjb25zdCBkb3VibGUgYyA9IDAuMDsKLSAgICBjb25z
dCBkb3VibGUgZCA9IDAuODI1OTE0OwotICAgIAotICAgIGRvdWJsZSBpbnN0cnVjdGlvbkNvdW50
ID0gdGhpcy0+aW5zdHJ1Y3Rpb25Db3VudCgpOwotICAgIAotICAgIEFTU0VSVChpbnN0cnVjdGlv
bkNvdW50KTsgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIG9ubHkgYWZ0ZXIgd2UgaGF2ZSBh
biBpbnN0cnVjdGlvbiBzdHJlYW07IG90aGVyd2lzZSBpdCdsbCBqdXN0IHJldHVybiB0aGUgdmFs
dWUgb2YgZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuCi0gICAgCi0gICAgZG91YmxlIHJlc3VsdCA9
IGQgKyBhICogc3FydChpbnN0cnVjdGlvbkNvdW50ICsgYikgKyBjICogaW5zdHJ1Y3Rpb25Db3Vu
dDsKLSAgICAKLSAgICByZXN1bHQgKj0gY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCk7Ci0g
ICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRhTG9nKAot
ICAgICAgICAgICAgKnRoaXMsICI6IGluc3RydWN0aW9uIGNvdW50IGlzICIsIGluc3RydWN0aW9u
Q291bnQsCi0gICAgICAgICAgICAiLCBzY2FsaW5nIGV4ZWN1dGlvbiBjb3VudGVyIGJ5ICIsIHJl
c3VsdCwgIiAqICIsIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpLAotICAgICAgICAgICAg
IlxuIik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IGNs
aXBUaHJlc2hvbGQoZG91YmxlIHRocmVzaG9sZCkKLXsKLSAgICBpZiAodGhyZXNob2xkIDwgMS4w
KQotICAgICAgICByZXR1cm4gMTsKLSAgICAKLSAgICBpZiAodGhyZXNob2xkID4gc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKLSAgICAKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhyZXNob2xkKTsKLX0KLQotaW50MzJfdCBDb2Rl
QmxvY2s6OmFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKLXsK
LSAgICByZXR1cm4gY2xpcFRocmVzaG9sZCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihk
ZXNpcmVkVGhyZXNob2xkKSAqCi0gICAgICAgIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdG
YWN0b3IoKSAqCi0gICAgICAgICgxIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkpKTsK
LX0KLQotYm9vbCBDb2RlQmxvY2s6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVk
KCkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xp
c3QgPSBERkc6OmV4aXN0aW5nR2xvYmFsREZHV29ya2xpc3RPck51bGwoKSkgewotICAgICAgICBp
ZiAod29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoREZHOjpDb21waWxhdGlvbktleSh0aGlzLCBE
Rkc6OkRGR01vZGUpKQotICAgICAgICAgICAgPT0gREZHOjpXb3JrbGlzdDo6Q29tcGlsZWQpIHsK
LSAgICAgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgcmV0dXJuIG1faml0
RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7Ci19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKLXsKLSAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5n
IG5leHQgaW52b2NhdGlvbi5cbiIpOwotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhy
ZXNob2xkKDAsIHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZG9udE9wdGltaXplQW55dGlt
ZVNvb24oKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFM
b2coKnRoaXMsICI6IE5vdCBvcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwotICAgIG1faml0
RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
Om9wdGltaXplQWZ0ZXJXYXJtVXAoKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC5cbiIp
OwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhy
ZXNob2xkKAotICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVC
bG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgYWZ0ZXIgbG9u
ZyB3YXJtLXVwLlxuIik7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9qaXRFeGVjdXRlQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCB0aGlzKTsKLSNlbmRp
ZgotfQotCi12b2lkIENvZGVCbG9jazo6b3B0aW1pemVTb29uKCkKLXsKLSAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIHNv
b24uXG4iKTsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZCgKLSAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uKCkpLCB0aGlzKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVC
bG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpCi17Ci0gICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogRm9yY2lu
ZyBzbG93IHBhdGggY29uY3VycmVudGx5LlxuIik7Ci0gICAgbV9qaXRFeGVjdXRlQ291bnRlci5m
b3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLXZv
aWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQotewotICAgIEpJVENvZGU6OkpJVFR5cGUg
dHlwZSA9IGppdFR5cGUoKTsKLSAgICBpZiAodHlwZSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCkg
ewotICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBleHBlY3RlZCB0byBoYXZlIGJhc2VsaW5lIGNv
ZGUgYnV0IGhhdmUgIiwgdHlwZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIENvZGVCbG9jayogdGhlUmVwbGFjZW1lbnQgPSBy
ZXBsYWNlbWVudCgpOwotICAgIGlmICgocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkg
IT0gKHRoZVJlcGxhY2VtZW50ICE9IHRoaXMpKSB7Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6
IHdlIGhhdmUgcmVzdWx0ID0gIiwgcmVzdWx0LCAiIGJ1dCAiKTsKLSAgICAgICAgaWYgKHRoZVJl
cGxhY2VtZW50ID09IHRoaXMpCi0gICAgICAgICAgICBkYXRhTG9nKCJ3ZSBhcmUgb3VyIG93biBy
ZXBsYWNlbWVudC5cbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCJvdXIg
cmVwbGFjZW1lbnQgaXMgIiwgcG9pbnRlckR1bXAodGhlUmVwbGFjZW1lbnQpLCAiXG4iKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgc3dp
dGNoIChyZXN1bHQpIHsKLSAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmpp
dFR5cGUoKSkpOwotICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICBkb250T3B0aW1pemVB
bnl0aW1lU29vbigpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21waWxhdGlvbkRlZmVy
cmVkOgotICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGltaXplQW55dGltZVNvb24o
KSBidXQgd2UgY2Fubm90IGJlY2F1c2UKLSAgICAgICAgLy8gZm9yY2VPcHRpbWl6YXRpb25TbG93
UGF0aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQgd29uJ3QKLSAgICAgICAg
Ly8gbmVjZXNzYXJpbHkgZ3VhcmFudGVlIGFueXRoaW5nLiBTbywgd2UgbWFrZSBzdXJlIHRoYXQg
ZXZlbiBpZiB0aGF0Ci0gICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwg
d2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQotICAgICAgICAvLyB0aGF0IHdl
IGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCi0gICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKLSAg
ICAgICAgLy8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLgotICAgICAgICBjb3VudFJl
b3B0aW1pemF0aW9uKCk7Ci0gICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgcmVzdWx0OiAi
LCBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCksICJcbiIpOwotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLSNlbmRpZgotICAgIAotdWludDMyX3QgQ29kZUJsb2NrOjphZGp1
c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQotewotICAg
IEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgLy8gQ29t
cHV0ZSB0aGlzIHRoZSBsYW1lIHdheSBzbyB3ZSBkb24ndCBzYXR1cmF0ZS4gVGhpcyBpcyBjYWxs
ZWQgaW5mcmVxdWVudGx5Ci0gICAgLy8gZW5vdWdoIHRoYXQgdGhpcyBsb29wIHdvbid0IGh1cnQg
dXMuCi0gICAgdW5zaWduZWQgcmVzdWx0ID0gZGVzaXJlZFRocmVzaG9sZDsKLSAgICBmb3IgKHVu
c2lnbmVkIG4gPSBiYXNlbGluZVZlcnNpb24oKS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KTsgbi0tOykgewotICAgICAgICB1bnNpZ25lZCBuZXdSZXN1bHQgPSByZXN1bHQgPDwgMTsKLSAg
ICAgICAgaWYgKG5ld1Jlc3VsdCA8IHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIHJlc3VsdCA9IG5ld1Jlc3Vs
dDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdWludDMyX3QgQ29kZUJsb2NrOjpl
eGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCi17Ci0gICAgcmV0dXJuIGFkanVz
dGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0
aW9uKCkgKiBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSk7Ci19Ci0KLXVpbnQzMl90IENv
ZGVCbG9jazo6ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpCi17
Ci0gICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRD
b3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlw
bGllcigpKTsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJlb3B0aW1pemVOb3coKQotewot
ICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0
aW1pemF0aW9uKCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRSZW9wdGltaXplRnJvbUxv
b3BOb3coKQotewotICAgIHJldHVybiBvc3JFeGl0Q291bnRlcigpID49IGV4aXRDb3VudFRocmVz
aG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKLX0KLSNlbmRpZgotCi1BcnJheVByb2Zp
bGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FycmF5UHJv
ZmlsZXNbaV0uYnl0ZWNvZGVPZmZzZXQoKSA9PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAg
IHJldHVybiAmbV9hcnJheVByb2ZpbGVzW2ldOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQot
QXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
IHJldHVybiBnZXRBcnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLUFy
cmF5UHJvZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIG1fYXJyYXlQcm9maWxl
cy5hcHBlbmQoQXJyYXlQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0dXJuICZtX2Fy
cmF5UHJvZmlsZXMubGFzdCgpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6YWRkQXJy
YXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGFkZEFycmF5UHJvZmlsZShsb2NrZXIs
IGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldE9yQWRk
QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQXJyYXlQcm9maWxlKiByZXN1bHQgPSBnZXRBcnJheVBy
b2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNv
ZGVPZmZzZXQpOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVBy
b2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZ2V0T3JBZGRBcnJheVByb2ZpbGUobG9ja2Vy
LCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLVZlY3RvcjxDb2Rl
T3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIENvZGVCbG9jazo6Y29kZU9yaWdpbnMo
KQotewotICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5jb2RlT3JpZ2luczsKLX0K
LQotc2l6ZV90IENvZGVCbG9jazo6bnVtYmVyT2ZERkdJZGVudGlmaWVycygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmRmZ0lkZW50
aWZpZXJzLnNpemUoKTsKLX0KLQotY29uc3QgSWRlbnRpZmllciYgQ29kZUJsb2NrOjppZGVudGlm
aWVyKGludCBpbmRleCkgY29uc3QKLXsKLSAgICBzaXplX3QgdW5saW5rZWRJZGVudGlmaWVycyA9
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7Ci0gICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPCB1bmxpbmtlZElkZW50aWZpZXJzKQotICAgICAgICByZXR1
cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoaW5kZXgpOwotICAgIEFTU0VSVChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7Ci0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmRmZ0lkZW50aWZpZXJzW2luZGV4IC0gdW5saW5rZWRJZGVudGlmaWVyc107Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpCi17
Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIG51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4gdmFsdWUgcHJv
ZmlsZXMgYXJlIGZ1bGwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsKLSAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxl
cyA9IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7Ci0gICAgICAgIGlmIChudW1TYW1w
bGVzID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCi0gICAgICAgICAgICBudW1TYW1w
bGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJv
ZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KLSAg
ICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOwotICAgICAgICBp
ZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKLSAgICAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHBy
b2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKLSAgICAgICAgICAgIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
cyhsb2NrZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVBy
b2ZpbGVQcmVkaWN0aW9ucygpCi17Ci0gICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3Jl
ZFZhbHVlMjsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoaWdub3Jl
ZFZhbHVlMSwgaWdub3JlZFZhbHVlMik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxB
cnJheVByZWRpY3Rpb25zKCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYXJyYXlQcm9maWxlcy5zaXplKCk7
IGktLTspCi0gICAgICAgIG1fYXJyYXlQcm9maWxlc1tpXS5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCB0aGlzKTsKLSAgICAKLSAgICAvLyBEb24ndCBjb3VudCB0aGVzZSBlaXRoZXIs
IGZvciBzaW1pbGFyIHJlYXNvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZXNbaV0udXBkYXRlSW5kZXhpbmdUeXBlKCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjp1cGRh
dGVBbGxQcmVkaWN0aW9ucygpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmICht
X293bmVyRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotI2VuZGlmCi0gICAgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKLSAg
ICB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91
bGRPcHRpbWl6ZU5vdygpCi17Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgb3B0aW1pemluZyAiLCAqdGhpcywgIi4uLlxuIik7Ci0K
LSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9w
dGltaXphdGlvbkRlbGF5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHVwZGF0
ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlczsKLSAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MobnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
KTsKLQotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKLSAgICAgICAgZGF0YUxvZ0Yo
Ci0gICAgICAgICAgICAiUHJvZmlsZSBob3RuZXNzOiAlbGYgKCV1IC8gJXUpLCAlbGYgKCV1IC8g
JXUpXG4iLAotICAgICAgICAgICAgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIG51bWJlck9m
TGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCi0g
ICAgICAgICAgICAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAotICAgICAgICAg
ICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcywgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tl
dHMgKiBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgfQotCi0gICAgaWYgKCghbnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJv
ZmlsZUxpdmVuZXNzUmF0ZSgpKQotICAgICAgICAmJiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxl
OjpudW1iZXJPZkJ1Y2tldHMgLyB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9wdGlv
bnM6OmRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlKCkpCi0gICAgICAgICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1p
bmltdW1PcHRpbWl6YXRpb25EZWxheSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAg
ICBBU1NFUlQobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ4X3Q+OjptYXgoKSk7Ci0gICAgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIrKzsKLSAg
ICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5B
QkxFKERGR19KSVQpCi12b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCi17
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKLSAgICBB
U1NFUlQoYWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
LSAgICAKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOwotICAg
IAotICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6IHsK
LSAgICAgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLT5kZmcoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIERGRzo6T1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07
Ci0gICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2Zp
bGVkQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmIEVOQUJM
RShGVExfSklUKQotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOiB7Ci0gICAgICAgIC8vIFRoZXJl
IGlzIG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBzaW5jZSB0aGUg
RlRMOjpKSVRDb2RlOjpvc3JFeGl0Ci0gICAgICAgIC8vIHZlY3RvciBjb250YWlucyBhIHRvdGFs
bHkgZGlmZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5zIHRvIGJlaGF2ZSBsaWtlCi0g
ICAgICAgIC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KLSAgICAgICAgRlRMOjpKSVRDb2RlKiBq
aXRDb2RlID0gbV9qaXRDb2RlLT5mdGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZUTDo6T1NS
RXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICBleGl0LmNvbnNp
ZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpZiBFTkFCTEUoVkVSQk9TRV9WQUxV
RV9QUk9GSUxFKQotdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKLXsKLSAgICBk
YXRhTG9nKCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewotICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsK
LSAgICAgICAgaWYgKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgICAgICBk
YXRhTG9nRigiICAgYXJnID0gJXU6ICIsIGkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGRhdGFMb2dGKCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0KTsKLSAg
ICAgICAgaWYgKCFwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSAmJiBwcm9maWxlLT5tX3ByZWRp
Y3Rpb24gPT0gU3BlY05vbmUpIHsKLSAgICAgICAgICAgIGRhdGFMb2dGKCI8ZW1wdHk+XG4iKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHByb2ZpbGUtPmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAgfQotICAgIGRh
dGFMb2coIlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAg
ICAgICBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGUoaSk7Ci0gICAg
ICAgIGRhdGFMb2dGKCIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKLSAgICB9Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKLQotdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291
bnQoKQotewotICAgIHN3aXRjaCAoaml0VHlwZSgpKSB7Ci0gICAgY2FzZSBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rOgotICAgICAgICByZXR1cm4gTExJbnQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJ
VDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBjYXNlIEpJVENv
ZGU6OkRGR0pJVDoKLSAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAgcmV0dXJuIGpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmZyYW1lUmVnaXN0ZXJDb3VudDsKLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1pbnQgQ29k
ZUJsb2NrOjpzdGFja1BvaW50ZXJPZmZzZXQoKQotewotICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQoKSAtIDEpLm9mZnNldCgpOwotfQotCi1zaXpl
X3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQotewotICAgIC8vIFRoaXMg
d2lsbCBiZSBjYWxsZWQgZnJvbSBDb2RlQmxvY2s6OkNvZGVCbG9jayBiZWZvcmUgZWl0aGVyIG1f
dm0gb3IgdGhlCi0gICAgLy8gaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gSXQn
cyBPSyB0byByZXR1cm4gMCBiZWNhdXNlIHdoYXQgd2lsbCByZWFsbHkKLSAgICAvLyBtYXR0ZXIg
aXMgdGhlIHJlY29tcHV0YXRpb24gb2YgdGhpcyB2YWx1ZSB3aGVuIHRoZSBzbG93IHBhdGggaXMg
dHJpZ2dlcmVkLgotICAgIGlmICghbV92bSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
aWYgKCEqbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
KQotICAgICAgICByZXR1cm4gMDsgLy8gSXQncyBhcyBnb29kIG9mIGEgcHJlZGljdGlvbiBhcyB3
ZSdsbCBnZXQuCi0gICAgCi0gICAgLy8gQmUgY29uc2VydmF0aXZlOiByZXR1cm4gYSBzaXplIHRo
YXQgd2lsbCBiZSBhbiBvdmVyZXN0aW1hdGlvbiA4NCUgb2YgdGhlIHRpbWUuCi0gICAgZG91Ymxl
IG11bHRpcGxpZXIgPSBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFz
ZWxpbmVKSVQtPm1lYW4oKSArCi0gICAgICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRl
Y29kZVdvcmRGb3JCYXNlbGluZUpJVC0+c3RhbmRhcmREZXZpYXRpb24oKTsKLSAgICAKLSAgICAv
LyBCZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IGJvZ3VzIG11bHRpcGllcnMuIFNpbGVudGx5
IGRvaW5nIHRoZSAid3JvbmciIHRoaW5nCi0gICAgLy8gaGVyZSBpcyBPSywgc2luY2UgdGhpcyB3
aG9sZSBtZXRob2QgaXMganVzdCBhIGhldXJpc3RpYy4KLSAgICBpZiAobXVsdGlwbGllciA8IDAg
fHwgbXVsdGlwbGllciA+IDEwMDApCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGRvdWJs
ZSBkb3VibGVSZXN1bHQgPSBtdWx0aXBsaWVyICogbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOwotICAg
IAotICAgIC8vIEJlIGV2ZW4gbW9yZSBwYXJhbm9pZDogc2lsZW50bHkgcmVqZWN0IHZhbHVlcyB0
aGF0IHdvbid0IGZpdCBpbnRvIGEgc2l6ZV90LiBJZgotICAgIC8vIHRoZSBmdW5jdGlvbiBpcyBz
byBodWdlIHRoYXQgd2UgY2FuJ3QgZXZlbiBmaXQgaXQgaW50byB2aXJ0dWFsIG1lbW9yeSB0aGVu
IHdlCi0gICAgLy8gc2hvdWxkIHByb2JhYmx5IGhhdmUgc29tZSBvdGhlciBndWFyZHMgaW4gcGxh
Y2UgdG8gcHJldmVudCB1cyBmcm9tIGV2ZW4gZ2V0dGluZwotICAgIC8vIHRvIHRoaXMgcG9pbnQu
Ci0gICAgaWYgKGRvdWJsZVJlc3VsdCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGRvdWJsZVJlc3VsdCk7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29k
ZUlEIG9wY29kZUlEKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmlu
dGVycHJldGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0
aW9ucygpLmJlZ2luKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKLSAgICAgICAgc3dpdGNo
IChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZz
ZXRdLnUub3Bjb2RlKSkgewotI2RlZmluZSBERUZJTkVfT1AoY3VyT3Bjb2RlLCBsZW5ndGgpICAg
ICAgICBcCi0gICAgICAgIGNhc2UgY3VyT3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIGlmIChjdXJPcGNvZGUgPT0gb3Bjb2RlSUQpICAgICAgXAotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBieXRlY29kZU9m
ZnNldCArPSBsZW5ndGg7ICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKLSN1bmRlZiBERUZJTkVfT1AKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLVN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2NvbnN0YW50UmVnaXN0
ZXJzW2ldLmdldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+
KG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8g
ZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwotICAgICAgICAgICAgZm9yIChhdXRvIHB0
ciA9IHN5bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOyBwdHIgIT0gZW5kOyArK3B0cikgewotICAg
ICAgICAgICAgICAgIGlmIChwdHItPnZhbHVlLnZhck9mZnNldCgpID09IFZhck9mZnNldCh2aXJ0
dWFsUmVnaXN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0
IHdvcmsgZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgotICAgICAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAwCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBwdHItPmtleS5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9
PSB0aGlzUmVnaXN0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidGhpcyIpOwot
ICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIuaXNBcmd1bWVudCgpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoImFyZ3VtZW50c1slM2RdIiwgdmlydHVhbFJlZ2lzdGVyLnRvQXJndW1lbnQo
KSk7Ci0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLVZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp2YWx1
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rp
b25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBv
cGNvZGVMZW5ndGgob3Bjb2RlSUQpOwotICAgIHJldHVybiBpbnN0cnVjdGlvbnMoKVtieXRlY29k
ZU9mZnNldCArIGxlbmd0aCAtIDFdLnUucHJvZmlsZTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZh
bGlkYXRlKCkKLXsKLSAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7
IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENv
ZGVCbG9jayBmb290cHJpbnQuCi0gICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0g
bGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKLSAgICAKLSAgICBp
ZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxl
ZUxvY2FscykpIHsKLSAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICBk
YXRhTG9nKCIgICAgV3JvbmcgbnVtYmVyIG9mIGJpdHMgaW4gcmVzdWx0IVxuIik7Ci0gICAgICAg
IGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxpdmVBdEhlYWQsICJcbiIpOwotICAgICAgICBkYXRh
TG9nKCIgICAgQml0IGNvdW50OiAiLCBsaXZlQXRIZWFkLm51bUJpdHMoKSwgIlxuIik7Ci0gICAg
ICAgIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fbnVtQ2FsbGVlTG9jYWxzOyBpLS07KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChsaXZlQXRIZWFkW2ldKSB7Ci0gICAgICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgVmFyaWFibGUgIiwgcmVnLCAiIGlzIGV4cGVjdGVk
IHRvIGJlIGRlYWQuXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZXN1bHQ6ICIsIGxp
dmVBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb2RlQmxvY2s6OmJlZ2luVmFsaWRhdGlvbkRpZEZh
aWwoKQotewotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZSBpbiAiLCAqdGhpcywgIjpc
biIpOwotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0
aW9uRGlkRmFpbCgpCi17Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkdW1wQnl0ZWNvZGUoKTsK
LSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRhdGFMb2coIlZhbGlkYXRpb24gZmFpbHVyZS5cbiIp
OwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2Nr
OjphZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQotewotICAgIG1fbnVtQnJl
YWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7Ci0gICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMp
OwotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAg
amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9EZWJ1Z2dlckJyZWFrcG9pbnQpOwotfQot
Ci12b2lkIENvZGVCbG9jazo6c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2Rl
IG1vZGUpCi17Ci0gICAgbV9zdGVwcGluZ01vZGUgPSBtb2RlOwotICAgIGlmIChtb2RlID09IFN0
ZXBwaW5nTW9kZUVuYWJsZWQgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
Ci0gICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvRGVidWdnZXJTdGVwcGlu
Zyk7Ci19Ci0KLVJhcmVDYXNlUHJvZmlsZSogQ29kZUJsb2NrOjphZGRSYXJlQ2FzZVByb2ZpbGUo
aW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5hcHBlbmQoUmFy
ZUNhc2VQcm9maWxlKGJ5dGVjb2RlT2Zmc2V0KSk7Ci0gICAgcmV0dXJuICZtX3JhcmVDYXNlUHJv
ZmlsZXMubGFzdCgpOwotfQotCi1SYXJlQ2FzZVByb2ZpbGUqIENvZGVCbG9jazo6cmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVy
biB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICBtX3JhcmVD
YXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAot
ICAgICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7Ci19Ci0KLXVuc2lnbmVk
IENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0
ZWNvZGVPZmZzZXQpCi17Ci0gICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gcmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgIGlmIChwcm9maWxl
KQotICAgICAgICByZXR1cm4gcHJvZmlsZS0+bV9jb3VudGVyOwotICAgIHJldHVybiAwOwotfQot
Ci1Bcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIHJldHVybiBhcml0aFByb2ZpbGVGb3JQQyhpbnN0
cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1Bcml0aFByb2ZpbGUq
IENvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qIHBjKQotewotICAgIGF1
dG8gb3Bjb2RlSUQgPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocGNbMF0udS5vcGNv
ZGUpOwotICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmcGNbM10udS5vcGVyYW5kKTsK
LSAgICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNhc2Ugb3BfYml0
eG9yOgotICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNhc2Ugb3Bfc3Vi
OgotICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJv
ZmlsZSo+KCZwY1s0XS51Lm9wZXJhbmQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIENvZGVCbG9jazo6Y291bGRU
YWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBpZiAoIWhhc0Jh
c2VsaW5lSklUUHJvZmlsaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBcml0aFBy
b2ZpbGUqIHByb2ZpbGUgPSBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCk7Ci0gICAgaWYgKCFwcm9maWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHByb2ZpbGUtPnRvb2tTcGVjaWFsRmFzdFBhdGgoKTsKLX0KLQotI2lmIEVOQUJMRShKSVQp
Ci1ERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCi17Ci0g
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgp
OwotICAgIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLSNlbmRpZgotCi12b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJp
ZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGlu
c3RydWN0aW9ucykKLXsKLSAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKCktPmhhc09wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjb25z
dCBWZWN0b3I8c2l6ZV90PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2RlQmxvY2soKS0+
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7IGkgPCBvZmZzZXRz
TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyBpcyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMgYmxvY2ssIGZpbmRp
bmcgCi0gICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IHdpbGwgZ2l2
ZSB1cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4KLSAgICAgICAgc2l6
ZV90IHN0YXJ0SWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2ldOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCh2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4XS51
Lm9wY29kZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwotICAgICAgICBpbnQgYmFzaWNC
bG9ja1N0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsgMV0udS5vcGVyYW5kOwot
ICAgICAgICBpbnQgYmFzaWNCbG9ja0VuZE9mZnNldDsKLSAgICAgICAgaWYgKGkgKyAxIDwgb2Zm
c2V0c0xlbmd0aCkgewotICAgICAgICAgICAgc2l6ZV90IGVuZElkeCA9IGJ5dGVjb2RlT2Zmc2V0
c1tpICsgMV07Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zW2VuZElkeF0udS5vcGNvZGUpID09IG9wX3Byb2ZpbGVf
Y29udHJvbF9mbG93KTsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBpbnN0cnVj
dGlvbnNbZW5kSWR4ICsgMV0udS5vcGVyYW5kIC0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhl
IGNsb3NpbmcgYnJhY2UuCi0gICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6
Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21l
IHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMg
dGhlIG9mZnNldCBiZWZvcmUuCi0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5n
IGNoZWNrIGFsbG93cyBmb3IgdGhlIHNhbWUgdGV4dHVhbCBKYXZhU2NyaXB0IGJhc2ljIGJsb2Nr
IHRvIGhhdmUgaXRzIGJ5dGVjb2RlIGVtaXR0ZWQgbW9yZQotICAgICAgICAvLyB0aGFuIG9uY2Ug
YW5kIHN0aWxsIHBsYXkgbmljZSB3aXRoIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuIFdoZW4g
YmFzaWNCbG9ja1N0YXJ0T2Zmc2V0IGlzIGxhcmdlciB0aGFuIAotICAgICAgICAvLyBiYXNpY0Js
b2NrRW5kT2Zmc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIGhh
cyBlbWl0dGVkIGNvZGUgZm9yIHRoZSBzYW1lIEFTVCBub2RlIAotICAgICAgICAvLyBtb3JlIHRo
YW4gb25jZSAoZm9yIGV4YW1wbGU6IEZvckluTm9kZSwgRmluYWxseSBibG9ja3MgaW4gVHJ5Tm9k
ZSwgZXRjKS4gVGhvdWdoIHRoZXNlIGFyZSBkaWZmZXJlbnQgCi0gICAgICAgIC8vIGJhc2ljIGJs
b2NrcyBhdCB0aGUgYnl0ZWNvZGUgbGV2ZWwsIHRoZXkgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBz
YW1lIHRleHR1YWwgYmFzaWMgYmxvY2sgaW4gdGhlIEphdmFTY3JpcHQgCi0gICAgICAgIC8vIHBy
b2dyYW0uIFRoZSBjb25kaXRpb246IAotICAgICAgICAvLyAoYmFzaWNCbG9ja0VuZE9mZnNldCA8
IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgCi0gICAgICAgIC8vIGlzIGVuY291bnRlcmVkIHdoZW4g
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgbGllcyBhY3Jvc3MgdGhlIGJvdW5kYXJ5IG9mIHRoZXNl
IGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgCi0gICAgICAgIC8vIGJsb2NrcyBhbmQgdGhlIHRl
eHR1YWwgb2Zmc2V0IGdvZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBkdXBsaWNhdGVkIGJsb2NrIGJh
Y2sgdG8gdGhlIGJlZ2lubmluZy4gVGhlc2UgCi0gICAgICAgIC8vIHJhbmdlcyBhcmUgZHVtbXkg
cmFuZ2VzIGFuZCBhcmUgaWdub3JlZC4gVGhlIGR1cGxpY2F0ZWQgYnl0ZWNvZGUgYmFzaWMgYmxv
Y2tzIHBvaW50IHRvIHRoZSBzYW1lIAotICAgICAgICAvLyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVy
ZSwgc28gaWYgYW55IG9mIHRoZW0gZXhlY3V0ZSwgaXQgd2lsbCByZWNvcmQgdGhlIHNhbWUgdGV4
dHVhbCBiYXNpYyBibG9jayBpbiB0aGUgCi0gICAgICAgIC8vIEphdmFTY3JpcHQgcHJvZ3JhbSBh
cyBleGVjdXRpbmcuCi0gICAgICAgIC8vIEF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhpcyBzaXR1
YXRpb24gbG9va3MgbGlrZToKLSAgICAgICAgLy8gajogb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cg
KGZyb20gai0+aywgd2UgaGF2ZSBiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0
T2Zmc2V0KQotICAgICAgICAvLyAuLi4KLSAgICAgICAgLy8gazogb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cgKHdlIHdhbnQgdG8gc2tpcCBvdmVyIHRoZSBqLT5rIGJsb2NrIGFuZCBzdGFydCBmcmVz
aCBhdCBvZmZzZXQgayBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmFzaWMgYmxvY2sgay0+bSkuCi0g
ICAgICAgIC8vIC4uLgotICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdwotICAg
ICAgICBpZiAoYmFzaWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ug
c2hvdWxkIG5ldmVyIGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVC
bG9jay4KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFzaWNCbG9j
a0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2so
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQmFzaWNCbG9j
a0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVy
KCktPmdldEJhc2ljQmxvY2tMb2NhdGlvbihvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNl
SUQoKSwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsKLQotICAg
ICAgICAvLyBGaW5kIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgZW5jbG9zZWQgd2l0aGluIHRoZSBy
YW5nZTogW2Jhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0KLSAgICAg
ICAgLy8gYW5kIGluc2VydCB0aGVzZSBmdW5jdGlvbnMnIHN0YXJ0L2VuZCBvZmZzZXRzIGFzIGdh
cHMgaW4gdGhlIGN1cnJlbnQgQmFzaWNCbG9ja0xvY2F0aW9uLgotICAgICAgICAvLyBUaGlzIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dCBvZiBhIEphdmFT
Y3JpcHQgcHJvZ3JhbSwgCi0gICAgICAgIC8vIGZ1bmN0aW9uIGxpdGVyYWxzIGZvcm0gbmV3IGJh
c2ljIGJsb2NrcyBib3VuZGFyaWVzLCBidXQgdGhleSBhcmVuJ3QgcmVwcmVzZW50ZWQgCi0gICAg
ICAgIC8vIGluc2lkZSB0aGUgQ29kZUJsb2NrJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgotICAgICAg
ICBhdXRvIGluc2VydEZ1bmN0aW9uR2FwcyA9IFtiYXNpY0Jsb2NrTG9jYXRpb24sIGJhc2ljQmxv
Y2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9mZnNldF0gKGNvbnN0IFdyaXRlQmFycmllcjxG
dW5jdGlvbkV4ZWN1dGFibGU+JiBmdW5jdGlvbkV4ZWN1dGFibGUpIHsKLSAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIGludCBmdW5jdGlvblN0
YXJ0ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBpbnQgZnVuY3Rpb25FbmQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7
Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25TdGFydCA+PSBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQg
JiYgZnVuY3Rpb25FbmQgPD0gYmFzaWNCbG9ja0VuZE9mZnNldCkKLSAgICAgICAgICAgICAgICBi
YXNpY0Jsb2NrTG9jYXRpb24tPmluc2VydEdhcChmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkVuZCk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25EZWNscykKLSAgICAgICAgICAgIGlu
c2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLSAgICAgICAgZm9yIChjb25zdCBXcml0ZUJh
cnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25FeHBycykK
LSAgICAgICAgICAgIGluc2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKLQotICAgICAgICBp
bnN0cnVjdGlvbnNbc3RhcnRJZHggKyAxXS51LmJhc2ljQmxvY2tMb2NhdGlvbiA9IGJhc2ljQmxv
Y2tMb2NhdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6
OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
JiBtYXApIAoteyAKLSAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwotfQot
Ci1PcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKLXsKLSAg
ICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICBpZiAoT3B0aW9uYWw8Q29kZU9y
aWdpbj4gY29kZU9yaWdpbiA9IG1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCi0gICAg
ICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICB9Ci0KLSAgICBmb3IgKEJhZzxTdHJ1Y3R1
cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikgewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwotICAg
ICAgICBpZiAoc3R1Yi0+Y29udGFpbnNQQyhwYykpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8Q29kZU9yaWdpbj4oc3R1Yi0+Y29kZU9yaWdpbik7Ci0gICAgfQotCi0gICAgaWYgKE9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBtX2ppdENvZGUtPmZpbmRQQyh0aGlzLCBwYykp
Ci0gICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwotCi0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotT3B0aW9uYWw8dW5zaWduZWQ+IENvZGVCbG9jazo6Ynl0
ZWNvZGVPZmZzZXRGcm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
Ci17Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5dGVjb2RlT2Zmc2V0OwotICAgIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSA9IHRoaXMtPmppdFR5cGUoKTsKLSAgICBpZiAoaml0VHlwZSA9PSBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHx8IGppdFR5cGUgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBieXRlY29kZU9mZnNldCA9IGNhbGxT
aXRlSW5kZXguYml0cygpOwotI2Vsc2UKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
ID0gYml0d2lzZV9jYXN0PEluc3RydWN0aW9uKj4oY2FsbFNpdGVJbmRleC5iaXRzKCkpOwotICAg
ICAgICBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KTsKLSNlbmRpZgotICAgIH0gZWxzZSBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQgfHwg
aml0VHlwZSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FuR2V0Q29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KSk7Ci0gICAg
ICAgIENvZGVPcmlnaW4gb3JpZ2luID0gY29kZU9yaWdpbihjYWxsU2l0ZUluZGV4KTsKLSAgICAg
ICAgYnl0ZWNvZGVPZmZzZXQgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSNlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1
cm4gYnl0ZWNvZGVPZmZzZXQ7Ci19Ci0KLWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygp
LT5kaWRPcHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBNaXhlZFRyaVN0YXRlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkOwotICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKLSAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAqIDQ7Ci0gICAgY2FzZSBUcnVlVHJpU3RhdGU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQotewotICAg
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9w
dGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQotewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSks
IHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkKLXsKLSNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBkb3VibGUgbnVtQWRkcyA9IDAuMDsKLSAgICBkb3Vi
bGUgdG90YWxBZGRTaXplID0gMC4wOwotICAgIGRvdWJsZSBudW1NdWxzID0gMC4wOwotICAgIGRv
dWJsZSB0b3RhbE11bFNpemUgPSAwLjA7Ci0gICAgZG91YmxlIG51bU5lZ3MgPSAwLjA7Ci0gICAg
ZG91YmxlIHRvdGFsTmVnU2l6ZSA9IDAuMDsKLSAgICBkb3VibGUgbnVtU3VicyA9IDAuMDsKLSAg
ICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4wOwotCi0gICAgYXV0byBjb3VudElDcyA9IFsmXSAo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBj
b2RlQmxvY2stPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAgICAg
ICB0b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGNvZGVCbG9jay0+bV9tdWxJQ3MpIHsKLSAgICAgICAg
ICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNp
emUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogY29kZUJs
b2NrLT5tX25lZ0lDcykgewotICAgICAgICAgICAgbnVtTmVncysrOwotICAgICAgICAgICAgdG90
YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChKSVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICBu
dW1TdWJzKys7Ci0gICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNvZGVTaXplKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICBoZWFwKCkt
PmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOwotCi0gICAgZGF0YUxvZygiTnVtIEFkZHM6ICIs
IG51bUFkZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIEFkZCBzaXplIGluIGJ5dGVzOiAi
LCB0b3RhbEFkZFNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgQWRkIHNpemU6ICIs
IHRvdGFsQWRkU2l6ZSAvIG51bUFkZHMsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAg
ZGF0YUxvZygiTnVtIE11bHM6ICIsIG51bU11bHMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFs
IE11bCBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE11bFNpemUsICJcbiIpOwotICAgIGRhdGFMb2co
IkF2ZXJhZ2UgTXVsIHNpemU6ICIsIHRvdGFsTXVsU2l6ZSAvIG51bU11bHMsICJcbiIpOwotICAg
IGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiTnVtIE5lZ3M6ICIsIG51bU5lZ3MsICJcbiIp
OwotICAgIGRhdGFMb2coIlRvdGFsIE5lZyBzaXplIGluIGJ5dGVzOiAiLCB0b3RhbE5lZ1NpemUs
ICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgTmVnIHNpemU6ICIsIHRvdGFsTmVnU2l6ZSAv
IG51bU5lZ3MsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxvZygiTnVtIFN1
YnM6ICIsIG51bVN1YnMsICJcbiIpOwotICAgIGRhdGFMb2coIlRvdGFsIFN1YiBzaXplIGluIGJ5
dGVzOiAiLCB0b3RhbFN1YlNpemUsICJcbiIpOwotICAgIGRhdGFMb2coIkF2ZXJhZ2UgU3ViIHNp
emU6ICIsIHRvdGFsU3ViU2l6ZSAvIG51bVN1YnMsICJcbiIpOwotCi0gICAgZGF0YUxvZygiLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotI2VuZGlmCi19Ci0KLUJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyYgQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7Ci0gICAgewotICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBpZiAoIW1fbGl2ZW5l
c3NBbmFseXNpcykKLSAgICAgICAgICAgIG1fbGl2ZW5lc3NBbmFseXNpcyA9IFdURk1vdmUoYW5h
bHlzaXMpOwotICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKLSAgICB9Ci19Ci0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvZ3JhbUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODIyNCkJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oOjIwODIyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9ncmFtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXJyYXlQ
cm9maWxlLmgiCisjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVDb252
ZW50aW9ucy5oIgorI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkNhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgor
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUg
IkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNp
bmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1
ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIkV2YWxDb2RlQ2Fj
aGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCisjaW5jbHVkZSAiRXhwcmVzc2lv
blJhbmdlSW5mby5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUg
IkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJKSVRD
b2RlLmgiCisjaW5jbHVkZSAiSklUTWF0aElDRm9yd2FyZHMuaCIKKyNpbmNsdWRlICJKU0NlbGwu
aCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgor
I2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiTExJbnRQcm90b3R5cGVM
b2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgorI2lu
Y2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgor
I2luY2x1ZGUgIlByb2ZpbGVySmV0dGlzb25SZWFzb24uaCIKKyNpbmNsdWRlICJQcm9ncmFtRXhl
Y3V0YWJsZS5oIgorI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgorI2luY2x1ZGUgIlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSA8
d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CitjbGFzcyBD
b2RlQmxvY2tTZXQ7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU01vZHVsZUVudmlyb25tZW50
OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7
CitjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
CitlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CisKK3N0cnVjdCBBcml0aFByb2ZpbGU7
CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVP
cmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitlbnVtIFJlb3B0aW1pemF0aW9u
TW9kZSB7IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBDb3VudFJlb3B0aW1pemF0aW9uIH07CisK
K2NsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CisgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKKyAgICBmcmll
bmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisK
KyAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRp
b25hbEZpbmFsaXplciB7IAorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBw
dWJsaWMgSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICAgICAgdm9pZCB2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisgICAgfTsKKworcHVibGljOgor
ICAgIGVudW0gQ29weVBhcnNlZEJsb2NrVGFnIHsgQ29weVBhcnNlZEJsb2NrIH07CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBERUNMQVJFX0lORk87CisKK3Byb3RlY3Rl
ZDoKKyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENv
ZGVCbG9jayYgb3RoZXIpOworICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwg
UGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWdu
ZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
Q29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSopOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIFdyaXRlQmFycmll
cjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisKK3B1YmxpYzoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+Q29kZUJsb2NrKCk7CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS5nZXQoKTsgfQorCisg
ICAgQ1N0cmluZyBpbmZlcnJlZE5hbWUoKSBjb25zdDsKKyAgICBDb2RlQmxvY2tIYXNoIGhhc2go
KSBjb25zdDsKKyAgICBib29sIGhhc0hhc2goKSBjb25zdDsKKyAgICBib29sIGlzU2FmZVRvQ29t
cHV0ZUhhc2goKSBjb25zdDsKKyAgICBDU3RyaW5nIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBj
b25zdDsKKyAgICBDU3RyaW5nIHNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0OyAvLyBOb3QgcXVp
dGUgdGhlIGFjdHVhbCBzb3VyY2Ugd2UgcGFyc2VkOyB0aGlzIHdpbGwgZG8gdGhpbmdzIGxpa2Ug
cHJlZml4IHRoZSBzb3VyY2UgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHJlaWZpZWQgc2lnbmF0dXJl
LgorICAgIENTdHJpbmcgc291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAvLyBBcyBzb3VyY2VD
b2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMgd2l0aCBhIHNp
bmdsZSBzcGFjZS4KKyAgICB2b2lkIGR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0mLCBK
SVRDb2RlOjpKSVRUeXBlKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBu
ZXdWYWx1ZSk7CisKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1DYWxsZWVMb2NhbHM7IH0KKworICAgIGludCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsg
cmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVt
UGFyYW1ldGVycyk7IH0KKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQorICAg
IHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKEZ1bmN0b3ImJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSk7CisgICAgICAgIFZlY3RvcjxDb2RlQmxvY2sqLCA0PiBjb2RlQmxvY2tzOworICAg
ICAgICBjb2RlQmxvY2tzLmFwcGVuZCh0aGlzKTsKKworICAgICAgICB3aGlsZSAoIWNvZGVCbG9j
a3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGN1cnJlbnRDb2RlQmxvY2sg
PSBjb2RlQmxvY2tzLnRha2VMYXN0KCk7CisgICAgICAgICAgICBmKGN1cnJlbnRDb2RlQmxvY2sp
OworCisgICAgICAgICAgICBpZiAoQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGN1cnJlbnRDb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQo
YWx0ZXJuYXRpdmUpOworICAgICAgICAgICAgaWYgKENvZGVCbG9jayogb3NyRW50cnlCbG9jayA9
IGN1cnJlbnRDb2RlQmxvY2stPnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCisgICAgICAg
ICAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQob3NyRW50cnlCbG9jayk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemF0aW9uRnJvbUlzQ29uc3Ry
dWN0KG1faXNDb25zdHJ1Y3Rvcik7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZUZvckpldHRpc29uKCk7ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3Nwor
ICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CisKKyAgICBzdGF0aWMgc2l6ZV90IGVz
dGltYXRlZFNpemUoSlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYp
OworICAgIHZvaWQgdmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNsZWFyVmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCk7CisKKyAgICB2b2lkIGR1bXBTb3VyY2UoKTsKKyAgICB2
b2lkIGR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mKTsKKworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKCk7
CisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mKTsKKyAgICB2b2lkIGR1bXBCeXRl
Y29kZSgKKyAgICAgICAgUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAg
ICAgICAgY29uc3QgU3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJ
bmZvTWFwJiA9IENhbGxMaW5rSW5mb01hcCgpKTsKKyAgICB2b2lkIGR1bXBFeGNlcHRpb25IYW5k
bGVycyhQcmludFN0cmVhbSYpOworICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmVzKFByaW50U3RyZWFt
JiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICB2b2lkIHByaW50U3RydWN0dXJlKFByaW50U3Ry
ZWFtJiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgb3BlcmFuZCk7
CisKKyAgICB2b2lkIGR1bXBNYXRoSUNTdGF0cygpOworCisgICAgYm9vbCBpc1N0cmljdE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2lzU3RyaWN0TW9kZTsgfQorICAgIEVDTUFNb2RlIGVjbWFNb2Rl
KCkgY29uc3QgeyByZXR1cm4gaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0
TW9kZTsgfQorCisgICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgp
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPT0gbV90aGlzUmVnaXN0ZXIub2Zmc2V0KCkgJiYg
IW1faXNTdHJpY3RNb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYg
KGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBnZXRD
b25zdGFudChpbmRleCkuaXNDZWxsKCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ID49IG1fbnVtVmFyczsKKyAgICB9CisK
KyAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIp
OworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFu
ZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgdm9pZCByZW1vdmVFeGNl
cHRpb25IYW5kbGVyRm9yQ2FsbFNpdGUoQ2FsbFNpdGVJbmRleCk7CisgICAgdW5zaWduZWQgbGlu
ZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1
bnNpZ25lZCBjb2x1bW5OdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCk7CisgICAgdm9pZCBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgaW50JiBkaXZvdCwKKyAgICAgICAgaW50JiBzdGFydE9mZnNldCwg
aW50JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsK
KworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4
KENhbGxTaXRlSW5kZXgpOworCisgICAgdm9pZCBnZXRTdHViSW5mb01hcChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRTdHViSW5m
b01hcChTdHViSW5mb01hcCYgcmVzdWx0KTsKKyAgICAKKyAgICB2b2lkIGdldENhbGxMaW5rSW5m
b01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQp
OworICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KTsK
KworICAgIHZvaWQgZ2V0QnlWYWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBC
eVZhbEluZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRCeVZhbEluZm9NYXAoQnlWYWxJbmZv
TWFwJiByZXN1bHQpOworICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhB
cml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJpdGhQcm9maWxlKik7
CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklD
KiBhZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqKTsKKyAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+
OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuYmVnaW4oKTsg
fQorICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvRW5kKCkgeyBy
ZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KKyAgICAKKyAgICAvLyBPKG4pIG9wZXJhdGlvbi4g
VXNlIGdldFN0dWJJbmZvTWFwKCkgdW5sZXNzIHlvdSByZWFsbHkgb25seSBpbnRlbmQgdG8gZ2V0
IG9uZQorICAgIC8vIHN0dWIgaW5mby4KKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogZmluZFN0dWJJ
bmZvKENvZGVPcmlnaW4pOworCisgICAgQnlWYWxJbmZvKiBhZGRCeVZhbEluZm8oKTsKKworICAg
IENhbGxMaW5rSW5mbyogYWRkQ2FsbExpbmtJbmZvKCk7CisgICAgQmFnPENhbGxMaW5rSW5mbz46
Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NCZWdpbigpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZvcy5i
ZWdpbigpOyB9CisgICAgQmFnPENhbGxMaW5rSW5mbz46Oml0ZXJhdG9yIGNhbGxMaW5rSW5mb3NF
bmQoKSB7IHJldHVybiBtX2NhbGxMaW5rSW5mb3MuZW5kKCk7IH0KKworICAgIC8vIFRoaXMgaXMg
YSBzbG93IGZ1bmN0aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhp
dHMgaW4gdGhlIGNhc2UKKyAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFu
Y2VzIGFyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQorICAgIC8vIGxv
b2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxp
bmcgdGhpcy4KKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgLy8gV2UgY2FsbCB0aGlzIHdo
ZW4gd2Ugd2FudCB0byByZWF0dGVtcHQgY29tcGlsaW5nIHNvbWV0aGluZyB3aXRoIHRoZSBiYXNl
bGluZSBKSVQuIElkZWFsbHkKKyAgICAvLyB0aGUgYmFzZWxpbmUgSklUIHdvdWxkIG5vdCBhZGQg
ZGF0YSB0byBDb2RlQmxvY2ssIGJ1dCBpbnN0ZWFkIGl0IHdvdWxkIHB1dCBpdHMgZGF0YSBpbnRv
CisgICAgLy8gYSBuZXdseSBjcmVhdGVkIEpJVENvZGUsIHdoaWNoIGNvdWxkIGJlIHRocm93biBh
d2F5IGlmIHdlIGJhaWwgb24gSklUIGNvbXBpbGF0aW9uLiBUaGVuIHdlCisgICAgLy8gd291bGQg
YmUgYWJsZSB0byBnZXQgcmlkIG9mIHRoaXMgc2lsbHkgZnVuY3Rpb24uCisgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkwNjEKKyAgICB2b2lk
IHJlc2V0SklURGF0YSgpOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICB2b2lkIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdm9pZCBsaW5rSW5jb21p
bmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQg
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBvbHlt
b3JwaGljQ2FsbE5vZGUqKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisgICAgdm9pZCBsaW5r
SW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7
CisKKyAgICB2b2lkIHNldEpJVENvZGVNYXAoc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2Rl
TWFwPiBqaXRDb2RlTWFwKQorICAgIHsKKyAgICAgICAgbV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKKyAgICB9CisgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgY2xlYXJMTEludEdldEJ5SWRDYWNoZShJbnN0cnVjdGlvbiopOworCisg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0aW9u
cygpLmJlZ2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0dXJuQWRkcmVzcykgLSBp
bnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIH0KKworICAgIHR5cGVkZWYgSlNDOjpJbnN0cnVj
dGlvbiBJbnN0cnVjdGlvbjsKKyAgICB0eXBlZGVmIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlv
bj4mIFVucGFja2VkSW5zdHJ1Y3Rpb25zOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnN0cnVj
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KKyAgICBSZWZD
b3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3Ry
dWN0aW9uczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGluc3Ry
dWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisKKyAgICBzaXplX3Qg
cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCk7CisKKyAgICBib29sIHVzZXNPcGNvZGUoT3Bjb2Rl
SUQpOworCisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGNv
ZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNl
bWVudCgpOworICAgIAorICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNv
ZGUpCisgICAgeworICAgICAgICBBU1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOworICAgICAg
ICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNvZGUtPnNpemUoKSk7CisgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRo
ZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBi
ZSBwYXJhbm9pZC4KKyAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICB9CisgICAgUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBqaXRDb2RlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9qaXRDb2RlKTsgfQorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLmdldCgpOworICAg
ICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSByZXN1
bHQgPSBKSVRDb2RlOjpqaXRUeXBlRm9yKGppdENvZGUpOworICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWVkZWQuIE9oIHdlbGwsIHBhcmFub2lh
IGlzIGdvb2QuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBoYXNC
YXNlbGluZUpJVFByb2ZpbGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklU
KQorICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKworICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWxTdGF0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6Q2FwYWJpbGl0eUxldmVsPihtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlKTsgfQorCisgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpOworICAgIGJvb2wgaGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVUb1JlcGxhY2UgaXMgbXkgSklUVHlwZQorI2VuZGlm
CisKKyAgICB2b2lkIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiwgUmVvcHRpbWl6
YXRpb25Nb2RlID0gRG9udENvdW50UmVvcHRpbWl6YXRpb24sIGNvbnN0IEZpcmVEZXRhaWwqID0g
bnVsbHB0cik7CisgICAgCisgICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CisgICAgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJTY3JpcHRFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFNjcmlw
dEV4ZWN1dGFibGUqPihtX293bmVyRXhlY3V0YWJsZS5nZXQoKSk7IH0KKworICAgIFZNKiB2bSgp
IGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KKworICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7
IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90
aGlzUmVnaXN0ZXI7IH0KKworICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dXNlc0V2YWwoKTsgfQorCisgICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNjb3Bl
UmVnaXN0ZXIuaXNMb2NhbCgpIHx8ICFzY29wZVJlZ2lzdGVyLmlzVmFsaWQoKSk7CisgICAgICAg
IG1fc2NvcGVSZWdpc3RlciA9IHNjb3BlUmVnaXN0ZXI7CisgICAgfQorCisgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2Nv
cGVSZWdpc3RlcjsKKyAgICB9CisgICAgCisgICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVUeXBlPihtX2NvZGVUeXBlKTsK
KyAgICB9CisKKyAgICBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgcHV0QnlJZENvbnRleHQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRXZhbENvZGUpCisgICAgICAg
ICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkRXZhbDsKKyAgICAgICAgcmV0dXJu
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZDsKKyAgICB9CisKKyAgICBTb3VyY2VQcm92aWRlciog
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZU9mZnNldDsgfQorICAgIHVuc2ln
bmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0OyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IH0KKyAgICB1bnNp
Z25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
Pmp1bXBUYXJnZXQoaW5kZXgpOyB9CisKKyAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3Rlcik7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzID49IDApOworICAgICAg
ICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX251bVBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzLnNpemUoKTsKKyAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQorICAgIHsKKyAgICAgICAgVmFsdWVQ
cm9maWxlKiByZXN1bHQgPSAmbV9hcmd1bWVudFZhbHVlUHJvZmlsZXNbYXJndW1lbnRJbmRleF07
CisgICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9m
aWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXplKCk7IH0KKyAgICBWYWx1ZVByb2Zp
bGUqIHZhbHVlUHJvZmlsZShpbnQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXNbaW5k
ZXhdOyB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChp
bnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRp
Y3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IGludCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpICsgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7CisgICAgfQorICAgIFZhbHVlUHJvZmlsZSog
Z2V0RnJvbUFsbFZhbHVlUHJvZmlsZXModW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlUHJvZmlsZShpbmRleCAtIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpOworICAg
IH0KKworICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxlKGludCBieXRlY29k
ZU9mZnNldCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkgeyByZXR1
cm4gbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKTsgfQorICAgIFJhcmVDYXNlUHJvZmlsZSogcmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1
bnNpZ25lZCByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29k
ZU9mZnNldCk7CisKKyAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2Fz
ZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
KCk7CisgICAgfQorCisgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQ
cm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpOwor
ICAgIH0KKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZvclBD
KEluc3RydWN0aW9uKik7CisKKyAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQg
Ynl0ZWNvZGVPZmZzZXQpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgfQorICAgIGNvbnN0IEFycmF5
UHJvZmlsZVZlY3RvciYgYXJyYXlQcm9maWxlcygpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlczsg
fQorICAgIEFycmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBhZGRB
cnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSog
Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJheVByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICBBcnJheVByb2ZpbGUqIGdldE9yQWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKKworICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CisKKyAgICBzaXplX3Qg
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSA6IDA7IH0KKyAgICBIYW5kbGVy
SW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJl
RGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQor
CisgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5o
YXNFeHByZXNzaW9uSW5mbygpOyB9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBWZWN0b3I8
Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3JpZ2lucygpOworICAg
IAorICAgIC8vIEhhdmluZyBjb2RlIG9yaWdpbnMgaW1wbGllcyB0aGF0IHRoZXJlIGhhcyBiZWVu
IHNvbWUgaW5saW5pbmcuCisgICAgYm9vbCBoYXNDb2RlT3JpZ2lucygpCisgICAgeworICAgICAg
ICByZXR1cm4gSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSk7CisgICAgfQorICAg
ICAgICAKKyAgICBib29sIGNhbkdldENvZGVPcmlnaW4oQ2FsbFNpdGVJbmRleCBpbmRleCkKKyAg
ICB7CisgICAgICAgIGlmICghaGFzQ29kZU9yaWdpbnMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIGluZGV4LmJpdHMoKSA8IGNvZGVPcmlnaW5zKCkuc2l6ZSgp
OworICAgIH0KKworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW5zKClbaW5kZXguYml0cygpXTsKKyAg
ICB9CisKKyAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4
aXRTaXRlJiBzaXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGppdFR5cGUoKSkpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQobG9ja2VyLCB0aGlzLCBzaXRl
KTsKKyAgICB9CisKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobG9ja2VyLCBzaXRl
KTsKKyAgICB9CisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNp
dGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUobG9ja2VyLCBzaXRlKTsKKyAg
ICB9CisKKyAgICBERkc6OkV4aXRQcm9maWxlJiBleGl0UHJvZmlsZSgpIHsgcmV0dXJuIG1fZXhp
dFByb2ZpbGU7IH0KKworICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRl
ciYgbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xh
enlPcGVyYW5kVmFsdWVQcm9maWxlczsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyAgICAvLyBDb25zdGFudCBQb29sCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc2l6ZV90
IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVt
YmVyT2ZJZGVudGlmaWVycygpICsgbnVtYmVyT2ZERkdJZGVudGlmaWVycygpOyB9CisgICAgc2l6
ZV90IG51bWJlck9mREZHSWRlbnRpZmllcnMoKSBjb25zdDsKKyAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3Q7CisjZWxzZQorICAgIHNpemVfdCBudW1iZXJP
ZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRl
bnRpZmllcnMoKTsgfQorICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7IH0KKyNl
bmRpZgorCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cygpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4g
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KKyAgICB1bnNpZ25lZCBhZGRD
b25zdGFudChKU1ZhbHVlIHYpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2Nv
bnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBl
bmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
Lmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHYpOworICAgICAgICBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkQ29uc3RhbnRMYXppbHkoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
T3RoZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KKyAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRl
eCkgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsgfQorCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CisgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhwcihpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25FeHByc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAKKyAgICBSZWdFeHAq
IHJlZ2V4cChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5yZWdleHAo
aW5kZXgpOyB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50QnVmZmVycygpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKKyAg
ICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnRCdWZmZXIoY29uc3QgVmVjdG9yPEpTVmFsdWU+
JiBidWZmZXIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5zaXpl
KCk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLmFwcGVuZChidWZmZXIp
OworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICBWZWN0b3I8SlNWYWx1ZT4mIGNv
bnN0YW50QnVmZmVyQXNWZWN0b3IodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVm
ZmVyc1tpbmRleF07CisgICAgfQorICAgIEpTVmFsdWUqIGNvbnN0YW50QnVmZmVyKHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50QnVmZmVyQXNWZWN0b3IoaW5k
ZXgpLmRhdGEoKTsKKyAgICB9CisKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gJm1f
dm0tPmhlYXA7IH0KKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3RGb3IoQ29kZU9yaWdpbik7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGxpdmVu
ZXNzQW5hbHlzaXMoKQorICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgIGlmICghIW1fbGl2ZW5lc3NBbmFs
eXNpcykKKyAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNpczsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCB2YWxpZGF0ZSgpOworCisgICAgLy8gSnVtcCBUYWJsZXMKKworICAgIHNpemVf
dCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KKyAgICBTaW1wbGVK
dW1wVGFibGUmIGFkZFN3aXRjaEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFNpbXBsZUp1bXBUYWJs
ZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KKyAg
ICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBSRUxF
QVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsgfQorICAgIHZvaWQgY2xlYXJTd2l0Y2hKdW1wVGFibGVzKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmNsZWFyKCk7CisgICAgfQorCisgICAg
c2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDog
MDsgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcy5hcHBlbmQoU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFy
ZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOyB9CisKKyAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7
IH0KKworICAgIGVudW0gU2hyaW5rTW9kZSB7CisgICAgICAgIC8vIFNocmluayBwcmlvciB0byBn
ZW5lcmF0aW5nIG1hY2hpbmUgY29kZSB0aGF0IG1heSBwb2ludCBkaXJlY3RseSBpbnRvIHZlY3Rv
cnMuCisgICAgICAgIEVhcmx5U2hyaW5rLAorCisgICAgICAgIC8vIFNocmluayBhZnRlciBnZW5l
cmF0aW5nIG1hY2hpbmUgY29kZSwgYW5kIGFmdGVyIHBvc3NpYmx5IGNyZWF0aW5nIG5ldyB2ZWN0
b3JzCisgICAgICAgIC8vIGFuZCBhcHBlbmRpbmcgdG8gb3RoZXJzLiBBdCB0aGlzIHRpbWUgaXQg
aXMgbm90IHNhZmUgdG8gc2hyaW5rIGNlcnRhaW4gdmVjdG9ycworICAgICAgICAvLyBiZWNhdXNl
IHdlIHdvdWxkIGhhdmUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSB0aGF0IHJlZmVyZW5jZXMgdGhl
bSBkaXJlY3RseS4KKyAgICAgICAgTGF0ZVNocmluaworICAgIH07CisgICAgdm9pZCBzaHJpbmtU
b0ZpdChTaHJpbmtNb2RlKTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hl
biBKSVR0aW5nIGtpY2tzIGluLCBpbiBhIG1peGVkIG1vZGUKKyAgICAvLyBleGVjdXRpb24gd29y
bGQuCisKKyAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQorICAg
IHsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cisg
ICAgfQorCisgICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwor
ICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICB2b2lkIGppdFNvb24oKTsKKworICAgIGNv
bnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIH0KKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJ1Y3R1cmUqLCBCYWc8TExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKKyAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwJiBsbGludEdldEJ5SWRXYXRjaHBvaW50TWFwKCkgeyByZXR1
cm4gbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOyB9CisKKyAgICAvLyBGdW5jdGlvbnMgZm9y
IGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtpY2tzIGluLiBUaGlzCisgICAg
Ly8gY29udHJvbHMgYm90aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGludm9rZWQg
YW5kIHdoZW4gT1NSCisgICAgLy8gZW50cnkgaGFwcGVucy4gVHdvIHRyaWdnZXJzIGV4aXN0OiB0
aGUgbG9vcCB0cmlnZ2VyIGFuZCB0aGUgcmV0dXJuCisgICAgLy8gdHJpZ2dlci4gSW4gZWl0aGVy
IGNhc2UsIHdoZW4gYW4gYWRkaXRpb24gdG8gbV9qaXRFeGVjdXRlQ291bnRlcgorICAgIC8vIGNh
dXNlcyBpdCB0byBiZWNvbWUgbm9uLW5lZ2F0aXZlLCB0aGUgb3B0aW1pemluZyBjb21waWxlciBp
cworICAgIC8vIGludm9rZWQuIFRoaXMgaW5jbHVkZXMgYSBmYXN0IGNoZWNrIHRvIHNlZSBpZiB0
aGlzIENvZGVCbG9jayBoYXMKKyAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1pemVkIChpLmUuIHJl
cGxhY2VtZW50KCkgcmV0dXJucyBhIENvZGVCbG9jaworICAgIC8vIHRoYXQgd2FzIG9wdGltaXpl
ZCB3aXRoIGEgaGlnaGVyIHRpZXIgSklUIHRoYW4gdGhpcyBvbmUpLiBJbiB0aGUKKyAgICAvLyBj
YXNlIG9mIHRoZSBsb29wIHRyaWdnZXIsIGlmIHRoZSBvcHRpbWl6ZWQgY29tcGlsYXRpb24gc3Vj
Y2VlZHMKKyAgICAvLyAob3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRoZSBwYXN0KSB0aGVu
IE9TUiBpcyBhdHRlbXB0ZWQgdG8KKyAgICAvLyByZWRpcmVjdCBwcm9ncmFtIGZsb3cgaW50byB0
aGUgb3B0aW1pemVkIGNvZGUuCisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBm
cm9tIHdpdGhpbiB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXJzLAorICAgIC8vIGFuZCBhcmUgdXNl
ZCBhcyBhIHNpbmdsZSBwb2ludCBhdCB3aGljaCB3ZSBkZWZpbmUgdGhlIGhldXJpc3RpY3MKKyAg
ICAvLyBmb3IgaG93IG11Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBiZWZvcmUgdGhlIG5leHQgb3B0
aW1pemF0aW9uCisgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQgb3V0
IHdpdGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAorICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVkIGZy
b20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KKworICAgIC8vIFdoZW4gd2Ugb2JzZXJ2ZSBh
IGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBhCisgICAgLy8gcmVvcHRp
bWl6YXRpb24uIEJ1dCBlYWNoIHRpbWUsIHdlIGluY3JlYXNlIHRoZSBvcHRpbWl6YXRpb24gdHJp
Z2dlcgorICAgIC8vIHRvIGF2b2lkIHRocmFzaGluZy4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB1
bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0OworICAgIHZvaWQgY291
bnRSZW9wdGltaXphdGlvbigpOworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIHVuc2lnbmVk
IG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBSZWdp
c3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5udW1iZXJPZlNldFJl
Z2lzdGVycygpOyB9CisgICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgc2l6ZV90IGNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpOwor
CisgICAgaW50MzJfdCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdDsKKworICAg
IGludDMyX3QgYWRqdXN0ZWRDb3VudGVyVmFsdWUoaW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKTsK
KworICAgIGludDMyX3QqIGFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAmbV9qaXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7CisgICAgfQorCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZG
U0VUT0YoQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyLCBtX2NvdW50ZXIpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9sZCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNU
X09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV9hY3RpdmVUaHJlc2hvbGQpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRvdGFsQ291bnQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1fdG90YWxDb3VudCk7
IH0KKworICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgaml0RXhlY3V0ZUNvdW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVDb3VudGVyOyB9CisKKyAgICB1bnNpZ25l
ZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXphdGlv
bkRlbGF5Q291bnRlcjsgfQorCisgICAgLy8gQ2hlY2sgaWYgdGhlIG9wdGltaXphdGlvbiB0aHJl
c2hvbGQgaGFzIGJlZW4gcmVhY2hlZCwgYW5kIGlmIG5vdCwKKyAgICAvLyBhZGp1c3QgdGhlIGhl
dXJpc3RpY3MgYWNjb3JkaW5nbHkuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGhyZXNob2xkIGhhcwor
ICAgIC8vIGJlZW4gcmVhY2hlZC4KKyAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhlIG5leHQgb3B0aW1p
emF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcworICAgIC8vIHJhcmVseSB3aXNlLCBzaW5j
ZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCisgICAgLy8gZXhwZW5z
aXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUuCisgICAgdm9pZCBvcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRpb24g
ZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdAorICAgIC8vIG9wdGltaXphdGlvbiB3aWxs
IHN0aWxsIGhhcHBlbiBhZnRlciByb3VnaGx5IDJeMjkgaW52b2NhdGlvbnMsCisgICAgLy8gc28g
dGhpcyBpcyByZWFsbHkgbWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBU
aGlzCisgICAgLy8gaXMgY2FsbGVkIGlmIG9wdGltaXphdGlvbiBmYWlsZWQsIGFuZCB3ZSBleHBl
Y3QgaXQgdG8gZmFpbCBpbgorICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KKyAgICB2b2lkIGRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gcmVpbml0aWFs
aXplIHRoZSBjb3VudGVyIHRvIGl0cyBzdGFydGluZyBzdGF0ZSwKKyAgICAvLyBmb3JjaW5nIGEg
d2FybS11cCB0byBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyCisg
ICAgLy8gZmlyZXMuIFRoaXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3Iu
IEl0IGFsc28KKyAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMgaWYgYW4gT1NSIGV4aXQg
b2NjdXJyZWQuIE5vdGUgdGhhdAorICAgIC8vIE9TUiBleGl0IGNvZGUgaXMgY29kZSBnZW5lcmF0
ZWQsIHNvIHRoZSB2YWx1ZSBvZiB0aGUgZXhlY3V0ZQorICAgIC8vIGNvdW50ZXIgdGhhdCB0aGlz
IGNvcnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgorICAgIHZvaWQgb3B0
aW1pemVBZnRlcldhcm1VcCgpOworCisgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGlt
aXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgb25seSBhZnRlcgorICAgIC8vIGEgbG90IG9mIHdhcm0t
dXAuCisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworCisgICAgLy8gQ2FsbCB0
aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0Cisg
ICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBv
cHRpbWl6YXRpb24KKyAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1l
YW5zIHRoYXQgYWxsIGNhbGxzIGFyZQorICAgIC8vIHJlbGlua2VkIHRvIHRoZSBvcHRpbWl6ZWQg
Y29kZSwgc28gdGhpcyBvbmx5IGFmZmVjdHMgY2FsbAorICAgIC8vIGZyYW1lcyB0aGF0IGFyZSBz
dGlsbCBleGVjdXRpbmcgdGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJlCisgICAgLy8gaXMg
dHVuZWQgdG8gc3RyaWtlIGEgYmFsYW5jZSBiZXR3ZWVuIHRoZSBjb3N0IG9mIE9TUiBlbnRyeQor
ICAgIC8vICh3aGljaCBpcyB0b28gaGlnaCB0byB3YXJyYW50IG1ha2luZyBldmVyeSBsb29wIGJh
Y2sgZWRnZSB0bworICAgIC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBhbmQgdGhlIGNvc3Qg
b2YgZXhlY3V0aW5nIGJhc2VsaW5lCisgICAgLy8gY29kZSAod2hpY2ggaXMgaGlnaCBlbm91Z2gg
dGhhdCB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YW50IHRvCisgICAgLy8gaGF2ZSBhIGZ1bGwgd2Fy
bS11cCkuIFRoZSBpbnR1aXRpb24gZm9yIGNhbGxpbmcgdGhpcyBpbnN0ZWFkIG9mCisgICAgLy8g
b3B0aW1pemVOZXh0SW52b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiByZWN1cnNpdmUgZnVu
Y3Rpb25zCisgICAgLy8gd2l0aCBsb29wcy4gQ29uc2lkZXIgdGhhdCB0aGVyZSBtYXkgYmUgTiBj
YWxsIGZyYW1lcyBvZiBzb21lCisgICAgLy8gcmVjdXJzaXZlIGZ1bmN0aW9uLCBmb3IgYSByZWFz
b25hYmx5IGxhcmdlIHZhbHVlIG9mIE4uIFRoZSB0b3AKKyAgICAvLyBvbmUgdHJpZ2dlcnMgb3B0
aW1pemF0aW9uLCBhbmQgdGhlbiByZXR1cm5zLCBhbmQgdGhlbiBhbGwgb2YKKyAgICAvLyB0aGUg
b3RoZXJzIHJldHVybi4gV2UgZG9uJ3Qgd2FudCBvcHRpbWl6YXRpb24gdG8gYmUgdHJpZ2dlcmVk
IG9uCisgICAgLy8gZWFjaCByZXR1cm4sIGFzIHRoYXQgd291bGQgYmUgc3VwZXJmbHVvdXMuIEl0
IG9ubHkgbWFrZXMgc2Vuc2UKKyAgICAvLyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUg
b2YgdGhvc2UgZnVuY3Rpb25zIGJlY29tZXMgaG90CisgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNv
ZGUuCisgICAgdm9pZCBvcHRpbWl6ZVNvb24oKTsKKworICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRp
b25TbG93UGF0aENvbmN1cnJlbnRseSgpOworCisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25SZXN1bHQpOworICAgIAor
ICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291
bnRlcjsgfQorCisgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsg
fQorCisgICAgdWludDMyX3QqIGFkZHJlc3NPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gJm1f
b3NyRXhpdENvdW50ZXI7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPU1JFeGl0
Q291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fb3NyRXhpdENv
dW50ZXIpOyB9CisKKyAgICB1aW50MzJfdCBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50
MzJfdCBkZXNpcmVkVGhyZXNob2xkKTsKKyAgICB1aW50MzJfdCBleGl0Q291bnRUaHJlc2hvbGRG
b3JSZW9wdGltaXphdGlvbigpOworICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uRnJvbUxvb3AoKTsKKyAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKTsK
KyAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpOworCisgICAgdm9pZCBzZXRD
YWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKKyAgICB2b2lkIHNldENhbGxlZVNhdmVS
ZWdpc3RlcnMoc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0Pik7CisgICAgCisg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KCk7IH0KKyNlbHNlIC8vIE5vIEpJVAorICAg
IHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH07CisgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKCkgeyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygp
IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOwor
ICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKKyAgICB2b2lkIHVw
ZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7CisKKyAgICB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0KCk7CisKKyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVu
c2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7CisKKyAgICBib29sIGhhc0RlYnVnZ2VyUmVx
dWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICB2b2lkKiBk
ZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0K
KworICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CisgICAg
dm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0gbnVtQnJlYWtwb2ludHMpOworICAgICAg
ICBtX251bUJyZWFrcG9pbnRzIC09IG51bUJyZWFrcG9pbnRzOworICAgIH0KKworICAgIGVudW0g
U3RlcHBpbmdNb2RlIHsKKyAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQsCisgICAgICAgIFN0
ZXBwaW5nTW9kZUVuYWJsZWQKKyAgICB9OworICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBw
aW5nTW9kZSk7CisKKyAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygpCisgICAgeworICAg
ICAgICBtX3N0ZXBwaW5nTW9kZSA9IFN0ZXBwaW5nTW9kZURpc2FibGVkOworICAgICAgICBtX251
bUJyZWFrcG9pbnRzID0gMDsKKyAgICB9CisKKyAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVn
Z2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRX
aXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CisgICAgCisgICAgLy8gRklYTUU6IE1ha2UgdGhlc2Ug
cmVtYWluaW5nIG1lbWJlcnMgcHJpdmF0ZS4KKworICAgIGludCBtX251bUNhbGxlZUxvY2FsczsK
KyAgICBpbnQgbV9udW1WYXJzOworICAgIAorICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBw
dWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2luZyBhbnkKKyAgICAv
LyBvZiB0aGUgZm9sbG93aW5nIHRvIGhvbGQgdGhlIGxvY2s6CisgICAgLy8KKyAgICAvLyAtIE1v
ZGlmeWluZyBhbnkgaW5saW5lIGNhY2hlIGluIHRoaXMgY29kZSBibG9jay4KKyAgICAvLworICAg
IC8vIC0gUXVlcmluZyBhbnkgaW5saW5lIGNhY2hlIGluIHRoaXMgY29kZSBibG9jaywgZnJvbSBh
IHRocmVhZCBvdGhlciB0aGFuCisgICAgLy8gICB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8KKyAg
ICAvLyBBZGRpdGlvbmFsbHksIGl0J3Mgb25seSBsZWdhbCB0byBtb2RpZnkgdGhlIGlubGluZSBj
YWNoZSBvbiB0aGUgbWFpbgorICAgIC8vIHRocmVhZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYWlu
IHRocmVhZCBjYW4gcXVlcnkgdGhlIGlubGluZSBjYWNoZSB3aXRob3V0CisgICAgLy8gbG9ja2lu
Zy4gVGhpcyBpcyBjcnVjaWFsIHNpbmNlIGV4ZWN1dGluZyB0aGUgaW5saW5lIGNhY2hlIGlzIGVm
ZmVjdGl2ZWx5CisgICAgLy8gInF1ZXJ5aW5nIiBpdC4KKyAgICAvLworICAgIC8vIEFub3RoZXIg
ZXhjZXB0aW9uIHRvIHRoZSBydWxlcyBpcyB0aGF0IHRoZSBHQyBjYW4gZG8gd2hhdGV2ZXIgaXQg
d2FudHMKKyAgICAvLyB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBiZWNhdXNlIHRoZSBHQyBp
cyBndWFyYW50ZWVkIHRvIHdhaXQgdW50aWwgYW55CisgICAgLy8gY29uY3VycmVudCBjb21waWxh
dGlvbiB0aHJlYWRzIGZpbmlzaCB3aGF0IHRoZXkncmUgZG9pbmcuCisgICAgbXV0YWJsZSBDb25j
dXJyZW50SklUTG9jayBtX2xvY2s7CisKKyAgICBBdG9taWM8Ym9vbD4gbV92aXNpdFdlYWtseUhh
c0JlZW5DYWxsZWQ7CisKKyAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3Qg
YSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisKKyNpZiBF
TkFCTEUoSklUKQorICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbAorI2VuZGlmCisKKyAgICBib29sIG1fYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZCA6IDE7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgor
CisgICAgYm9vbCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbiA6IDE7CisgICAgYm9vbCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbiA6IDE7CisgICAgYm9vbCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwg
OiAxOworICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKKyAgICBib29sIG1faXNTdHJpY3RN
b2RlIDogMTsKKyAgICB1bnNpZ25lZCBtX2NvZGVUeXBlIDogMjsgLy8gQ29kZVR5cGUKKworICAg
IC8vIEludGVybmFsIG1ldGhvZHMgZm9yIHVzZSBieSB2YWxpZGF0aW9uIGNvZGUuIEl0IHdvdWxk
IGJlIHByaXZhdGUgaWYgaXQgd2Fzbid0CisgICAgLy8gZm9yIHRoZSBmYWN0IHRoYXQgd2UgdXNl
IGl0IGZyb20gYW5vbnltb3VzIG5hbWVzcGFjZXMuCisgICAgdm9pZCBiZWdpblZhbGlkYXRpb25E
aWRGYWlsKCk7CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlkYXRpb25E
aWRGYWlsKCk7CisKKyAgICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4gbV9l
eGNlcHRpb25IYW5kbGVyczsKKworICAgICAgICAvLyBCdWZmZXJzIHVzZWQgZm9yIGxhcmdlIGFy
cmF5IGxpdGVyYWxzCisgICAgICAgIFZlY3RvcjxWZWN0b3I8SlNWYWx1ZT4+IG1fY29uc3RhbnRC
dWZmZXJzOworCisgICAgICAgIC8vIEp1bXAgVGFibGVzCisgICAgICAgIFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBU
YWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIEV2YWxDb2RlQ2FjaGUg
bV9ldmFsQ29kZUNhY2hlOworICAgIH07CisKKyAgICB2b2lkIGNsZWFyRXhjZXB0aW9uSGFuZGxl
cnMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBhcHBl
bmRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVyKQorICAgIHsKKyAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyAvLyBXZSBtYXkgYmUgaGFuZGxpbmcg
dGhlIGV4Y2VwdGlvbiBvZiBhbiBpbmxpbmVkIGNhbGwgZnJhbWUuCisgICAgICAgIG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOworICAgIH0KKworICAgIENh
bGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5k
ZXggb3JpZ2luYWxDYWxsU2l0ZSk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHZvaWQgc2V0UENU
b0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKKyAg
ICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOworI2VuZGlmCisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOworI2Vsc2UKKyAgICB2b2lkIHRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2tTZXQ7CisKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGxpdmVu
ZXNzQW5hbHlzaXNTbG93KCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBzcGVjaWFsT1NSRW50cnlC
bG9ja09yTnVsbCgpOworICAgIAorICAgIHZvaWQgbm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTdGF0
ZSogY2FsbGVyRnJhbWUpOworICAgIAorICAgIGRvdWJsZSBvcHRpbWl6YXRpb25UaHJlc2hvbGRT
Y2FsaW5nRmFjdG9yKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRM
aXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1
bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CisKKyAgICB2b2lkIHNldENvbnN0
YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFu
dHMsIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24pOworCisgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50IGlu
ZGV4LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhd
LnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0
IEluc3RydWN0aW9uKiBiZWdpbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwKKyAgICAgICAgY29uc3Qg
U3R1YkluZm9NYXAmID0gU3R1YkluZm9NYXAoKSwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiA9IENh
bGxMaW5rSW5mb01hcCgpKTsKKworICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKGludCByKSBjb25z
dDsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OworICAgIHZvaWQg
cHJpbnRVbmFyeU9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25z
dCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludEJpbmFyeU9w
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludENvbmRpdGlvbmFsSnVtcChQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiwgaW50IGxvY2F0aW9uLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludEdldEJ5
SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJik7CisgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYs
IEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmKTsKKyAgICBlbnVt
IENhY2hlRHVtcE1vZGUgeyBEdW1wQ2FjaGVzLCBEb250RHVtcENhY2hlcyB9OworICAgIHZvaWQg
cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0
IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmKTsKKyAgICB2b2lkIHByaW50
UHV0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJ
bnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludFB1dEJ5SWRDYWNo
ZVN0YXR1cyhQcmludFN0cmVhbSYsIGludCBsb2NhdGlvbiwgY29uc3QgU3R1YkluZm9NYXAmKTsK
KyAgICB2b2lkIHByaW50TG9jYXRpb25BbmRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGlu
dCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOworICAgIHZv
aWQgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKFByaW50U3RyZWFtJiwgRXhlY1N0
YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBv
cCwgaW50IG9wZXJhbmQpOworCisgICAgdm9pZCBiZWdpbkR1bXBQcm9maWxpbmcoUHJpbnRTdHJl
YW0mLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBWYWx1ZVByb2Zp
bGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQ
cm9maWxpbmcpOworICAgIHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBk
dW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNh
c2VQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9pZCBkdW1wQXJp
dGhQcm9maWxlKFByaW50U3RyZWFtJiwgQXJpdGhQcm9maWxlKiwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7CisKKyAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoKTsKKyAgICBib29sIHNo
b3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCk7CisgICAgYm9vbCBzaG91bGRKZXR0aXNv
bkR1ZVRvT2xkQWdlKCk7CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90
VmlzaXRvciYpOworICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpc2l0b3ImKTsKKyAg
ICAgICAgCisgICAgdm9pZCBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJik7CisKKyAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTaW5jZUNyZWF0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPigKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9j
cmVhdGlvblRpbWUpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpCisgICAgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICB9CisKKyAgICB2b2lkIGlu
c2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihSZWZDb3VudGVk
QXJyYXk8SW5zdHJ1Y3Rpb24+Jik7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxv
Y2s+IG1fdW5saW5rZWRDb2RlOworICAgIGludCBtX251bVBhcmFtZXRlcnM7CisgICAgdW5pb24g
eworICAgICAgICB1bnNpZ25lZCBtX2RlYnVnZ2VyUmVxdWVzdHM7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICB1bnNpZ25lZCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50IDogMTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG1fc3RlcHBpbmdNb2RlIDogMTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1fbnVtQnJlYWtwb2ludHMgOiAzMDsKKyAgICAgICAgfTsKKyAgICB9OworICAgIFdyaXRlQmFy
cmllcjxFeGVjdXRhYmxlQmFzZT4gbV9vd25lckV4ZWN1dGFibGU7CisgICAgVk0qIG1fdm07CisK
KyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOworICAgIFZp
cnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29w
ZVJlZ2lzdGVyOworICAgIG11dGFibGUgQ29kZUJsb2NrSGFzaCBtX2hhc2g7CisKKyAgICBSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlOworICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0
OworICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0OworCisgICAgUmVmQ291bnRl
ZEFycmF5PExMSW50Q2FsbExpbmtJbmZvPiBtX2xsaW50Q2FsbExpbmtJbmZvczsKKyAgICBTZW50
aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExM
SW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAgU3RydWN0dXJlV2F0
Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CisgICAgUmVmUHRyPEpJVENv
ZGU+IG1faml0Q29kZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdp
c3RlckF0T2Zmc2V0TGlzdD4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIEJhZzxTdHJ1Y3R1
cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAg
ICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Cisg
ICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKKyAgICBCYWc8QnlWYWxJbmZvPiBtX2J5VmFsSW5m
b3M7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOworICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWND
YWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdp
bk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxD
b21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFz
IHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCisgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KKyAg
ICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CisgICAgQ29tcHJlc3NlZExhenlPcGVy
YW5kVmFsdWVQcm9maWxlSG9sZGVyIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOworI2VuZGlm
CisgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4gbV9hcmd1bWVudFZhbHVlUHJvZmls
ZXM7CisgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOwor
ICAgIFNlZ21lbnRlZFZlY3RvcjxSYXJlQ2FzZVByb2ZpbGUsIDg+IG1fcmFyZUNhc2VQcm9maWxl
czsKKyAgICBSZWZDb3VudGVkQXJyYXk8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZT4gbV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlczsKKyAgICBBcnJheVByb2ZpbGVWZWN0b3IgbV9hcnJheVByb2ZpbGVz
OworICAgIFJlZkNvdW50ZWRBcnJheTxPYmplY3RBbGxvY2F0aW9uUHJvZmlsZT4gbV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZXM7CisKKyAgICAvLyBDb25zdGFudCBQb29sCisgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwg
UmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOworICAg
IC8vIFRPRE86IFRoaXMgY291bGQganVzdCBiZSBhIHBvaW50ZXIgdG8gbV91bmxpbmtlZENvZGVC
bG9jaydzIGRhdGEsIGJ1dCB0aGUgREZHIG11dGF0ZXMKKyAgICAvLyBpdCwgc28gd2UncmUgc3R1
Y2sgd2l0aCBpdCBmb3Igbm93LgorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1f
Y29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4g
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CisgICAgUmVmQ291bnRlZEFycmF5
PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRGVjbHM7CisgICAg
UmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0
aW9uRXhwcnM7CisKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwor
ICAgIAorICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKKyAg
ICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOworICAgIHVpbnQxNl90IG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyOworICAgIHVpbnQxNl90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7
CisKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fY3JlYXRpb25U
aW1lOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9s
aXZlbmVzc0FuYWx5c2lzOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVE
YXRhOworCisgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6
ZXI7CisgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7
Cit9OworCisvLyBQcm9ncmFtIGNvZGUgaXMgbm90IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNv
IHdlIG1ha2UgdGhlIGdsb2JhbCBvYmplY3QKKy8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0
LgorCitjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKKyAgICB0eXBl
ZGVmIENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworcHJvdGVjdGVkOgorICAg
IEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAg
IEdsb2JhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxl
LCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQs
IGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgUHJvZ3Jh
bUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVk
ZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGlj
IFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJv
Z3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZt
LT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Cisg
ICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNT
Y29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1
bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2Rl
QmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5w
cm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwg
dW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAg
IH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJv
Z3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3Bl
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307CisKK2NsYXNzIE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEds
b2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7Cisg
ICAgfQorCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0s
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNj
b3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExp
bmVDb2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVt
bk9mZnNldCkKKyAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Cit9OworCitjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2Jh
bENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsK
KyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2
bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3Ro
ZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRp
YyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAg
ICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIpCisgICAgeworICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEV2
YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4
ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgY29u
c3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHVubGlua2Vk
RXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0KKyAgICB1bnNpZ25lZCBudW1WYXJp
YWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+bnVtVmFyaWFibGVzKCk7
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90
aGVyKQorICAgIHsKKyAgICB9CisgICAgICAgIAorICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSog
c2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCitwcml2YXRlOgorICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4ganNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkp
OyB9Cit9OworCitjbGFzcyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewor
cHVibGljOgorICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIEZ1bmN0
aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0
aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2
bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ss
IG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgRnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywgSlNTY29wZSogc2NvcGUsCisgICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0
TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29k
ZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAg
ICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikK
KyAgICB7CisgICAgfQorCisgICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKKyAg
ICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6
IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUNv
ZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgQ29kZUJs
b2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2
bS0+aGVhcCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFz
c2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFdl
YkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFz
c2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgV2ViQXNzZW1i
bHlDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OworfTsKKyNlbmRpZgorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgp
Cit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKKyAgICBp
ZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCisgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoaW5kZXgpKTsKKyAgICByZXR1cm4gdGhpc1tpbmRleF07Cit9CisKK2lubGluZSBSZWdp
c3RlciYgRXhlY1N0YXRlOjpyKFZpcnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHIo
cmVnLm9mZnNldCgpKTsKK30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tl
ZFIoaW50IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOworICAgIHJldHVybiB0aGlzW2luZGV4XTsKK30KKworaW5saW5lIFJl
Z2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAg
ICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOworfQorCitpbmxpbmUgdm9pZCBDb2Rl
QmxvY2s6OmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCkKK3sKKyAgICBtX3Zpc2l0V2Vh
a2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVj
dXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHN3aXRj
aCAodHlwZSgpKSB7CisgICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAg
aWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0
PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCisg
ICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
RXZhbEV4ZWN1dGFibGVUeXBlOiB7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5t
X2V2YWxDb2RlQmxvY2suZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVs
YXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAg
ICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pih0aGlzKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CisgICAgICAgIGlm
IChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFi
bGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7CisgICAgICAgIGlmIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCkp
KQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEV4ZWN1dGFibGVUeXBlPgorSlNPYmplY3QqIFNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBmdW5jdGlv
biwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQ29kZUJsb2Nr
KiYgcmVzdWx0Q29kZUJsb2NrKQoreworICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQpKSB7Cisg
ICAgICAgIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEV2YWxFeGVjdXRhYmxlPjo6
dmFsdWUpCisgICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4o
anNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKKyAgICAgICAgZWxz
ZSBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFibGVUeXBlLCBQcm9ncmFtRXhlY3V0YWJsZT46OnZh
bHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpz
Q2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7CisgICAgICAgIGVs
c2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGU+Ojp2YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxv
Y2sqPihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkp
OworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEZ1bmN0aW9u
RXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0
PENvZGVCbG9jayo+KGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2Nr
Rm9yKGtpbmQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCh2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCByZXN1bHRD
b2RlQmxvY2spOworfQorCisjZGVmaW5lIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCBz
dW1tYXJ5LCBkZXRhaWxzKSBcCisgICAgKGNvZGVCbG9jay0+dm0oKS0+bG9nRXZlbnQoY29kZUJs
b2NrLCBzdW1tYXJ5LCBbJl0gKCkgeyByZXR1cm4gdG9DU3RyaW5nIGRldGFpbHM7IH0pKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9ncmFtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAkocmV2aXNpb24gMjA4MjI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTA0NiArMjksMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBcnJheVBy
b2ZpbGUuaCIKLSNpbmNsdWRlICJCeVZhbEluZm8uaCIKLSNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCi0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0jaW5jbHVkZSAiQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCi0j
aW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUgIkNvZGVUeXBlLmgiCi0jaW5jbHVkZSAi
Q29tcGFjdEpJVENvZGVNYXAuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgotI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCi0jaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRXZhbENvZGVDYWNo
ZS5oIgotI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKLSNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAi
SGFuZGxlckluZm8uaCIKLSNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgotI2luY2x1ZGUgIkpJVENv
ZGUuaCIKLSNpbmNsdWRlICJKSVRNYXRoSUNGb3J3YXJkcy5oIgotI2luY2x1ZGUgIkpTQ2VsbC5o
IgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0j
aW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKLSNpbmNsdWRlICJMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5oIgotI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCi0jaW5j
bHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0j
aW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIgotI2luY2x1ZGUgIlByb2dyYW1FeGVj
dXRhYmxlLmgiCi0jaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCi0jaW5jbHVkZSAiVW5jb25k
aXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgotI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlIDx3
dGYvQmFnLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNs
dWRlICJHbG9iYWxDb2RlQmxvY2suaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpczsKLWNsYXNzIENvZGVCbG9ja1NldDsKLWNsYXNzIEV4ZWNTdGF0
ZTsKLWNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci1jbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKLWNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
OwotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0KLWVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdDsKLQotc3RydWN0IEFyaXRoUHJvZmlsZTsKLQotdHlwZWRlZiBIYXNoTWFwPENvZGVPcmln
aW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1Yklu
Zm9NYXA7Ci0KLWVudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVvcHRpbWl6YXRp
b24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKLQotY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpT
Q2VsbCB7Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBmcmllbmQgY2xhc3MgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOwotICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCi0gICAgICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLSAgICB9OwotCi0gICAgY2xh
c3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIgewotICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSBDb3B5UGFyc2VkQmxvY2tUYWcg
eyBDb3B5UGFyc2VkQmxvY2sgfTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQot
ICAgIERFQ0xBUkVfSU5GTzsKLQotcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayhWTSosIFN0cnVj
dHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgQ29kZUJs
b2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwg
dW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwot
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsK
LSNlbmRpZgotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3Bl
Kik7Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3Qq
KTsKLSNlbmRpZgotCi0gICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9i
amVjdDsKLQotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKLQot
ICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLmdldCgpOyB9Ci0KLSAgICBDU3RyaW5nIGluZmVycmVkTmFtZSgpIGNv
bnN0OwotICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0OwotICAgIGJvb2wgaGFzSGFzaCgp
IGNvbnN0OwotICAgIGJvb2wgaXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0OwotICAgIENTdHJp
bmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0OwotICAgIENTdHJpbmcgc291cmNlQ29k
ZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5vdCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJjZSB3ZSBwYXJz
ZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3MgbGlrZSBwcmVmaXggdGhlIHNvdXJjZSBmb3IgYSBmdW5j
dGlvbiB3aXRoIGEgcmVpZmllZCBzaWduYXR1cmUuCi0gICAgQ1N0cmluZyBzb3VyY2VDb2RlT25P
bmVMaW5lKCkgY29uc3Q7IC8vIEFzIHNvdXJjZUNvZGVGb3JUb29scygpLCBidXQgcmVwbGFjZXMg
YWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgIHZvaWQgZHVtcEFz
c3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYsIEpJVENvZGU6OkpJVFR5cGUpIGNvbnN0OwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotCi0gICAg
aW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KLSAg
ICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKLQotICAgIGludCBudW1DYWxs
ZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQotCi0gICAgaW50
KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQotCi0gICAgQ29kZUJs
b2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+
KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShWTSYsIENv
ZGVCbG9jayopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aFJlbGF0ZWRDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBGdW5j
dG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgVmVjdG9yPENv
ZGVCbG9jayosIDQ+IGNvZGVCbG9ja3M7Ci0gICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKHRoaXMp
OwotCi0gICAgICAgIHdoaWxlICghY29kZUJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IENvZGVCbG9jayogY3VycmVudENvZGVCbG9jayA9IGNvZGVCbG9ja3MudGFrZUxhc3QoKTsKLSAg
ICAgICAgICAgIGYoY3VycmVudENvZGVCbG9jayk7Ci0KLSAgICAgICAgICAgIGlmIChDb2RlQmxv
Y2sqIGFsdGVybmF0aXZlID0gY3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKLSAgICAg
ICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChhbHRlcm5hdGl2ZSk7Ci0gICAgICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrID0gY3VycmVudENvZGVCbG9jay0+c3BlY2lhbE9T
UkVudHJ5QmxvY2tPck51bGwoKSkKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChv
c3JFbnRyeUJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9yKTsKLSAgICB9
Ci0KLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7Ci0gICAgCi0g
ICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNp
b24oKTsKLQotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKLSAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFdlYWtseShTbG90
VmlzaXRvciYpOwotICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxsZWQoKTsKLQot
ICAgIHZvaWQgZHVtcFNvdXJjZSgpOwotICAgIHZvaWQgZHVtcFNvdXJjZShQcmludFN0cmVhbSYp
OwotCi0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoKTsKLSAgICB2b2lkIGR1bXBCeXRlY29kZShQcmlu
dFN0cmVhbSYpOwotICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAotICAgICAgICBQcmludFN0cmVhbSYs
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBT
dHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkp
OwotICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50U3RyZWFtJik7Ci0gICAgdm9p
ZCBwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
IHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKLQotICAgIHZvaWQgZHVtcE1hdGhJQ1N0YXRz
KCk7Ci0KLSAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdHJpY3RN
b2RlOyB9Ci0gICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBpc1N0cmljdE1v
ZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9Ci0KLSAgICBpbmxpbmUgYm9vbCBp
c0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA9
PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9pc1N0cmljdE1vZGUpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0NlbGwoKTsKLQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBib29sIGlz
VGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
aW5kZXggPj0gbV9udW1WYXJzOwotICAgIH0KLQotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVkSGFuZGxlciA9
IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7Ci0gICAgSGFuZGxlckluZm8qIGhhbmRsZXJG
b3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlI
YW5kbGVyKTsKLSAgICB2b2lkIHJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxsU2l0ZShDYWxs
U2l0ZUluZGV4KTsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB2b2lkIGV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90
LAotICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwotCi0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGJ5
dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7Ci0KLSAgICB2b2lk
IGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYg
cmVzdWx0KTsKLSAgICB2b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpOwot
ICAgIAotICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRDYWxsTGlua0luZm9N
YXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOwotCi0gICAgdm9pZCBnZXRCeVZhbEluZm9NYXAo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKLSAgICB2
b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCk7Ci0gICAgCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7
Ci0gICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSopOwotICAgIEpJVE11bElD
KiBhZGRKSVRNdWxJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBKSVROZWdJQyogYWRkSklUTmVnSUMo
QXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSop
OwotICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZvQmVnaW4oKSB7
IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZv
Pjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5lbmQoKTsgfQot
ICAgIAotICAgIC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAoKSB1bmxlc3Mg
eW91IHJlYWxseSBvbmx5IGludGVuZCB0byBnZXQgb25lCi0gICAgLy8gc3R1YiBpbmZvLgotICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7Ci0KLSAgICBCeVZh
bEluZm8qIGFkZEJ5VmFsSW5mbygpOwotCi0gICAgQ2FsbExpbmtJbmZvKiBhZGRDYWxsTGlua0lu
Zm8oKTsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0JlZ2lu
KCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8Q2FsbExpbmtJ
bmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2FsbExpbmtJbmZv
cy5lbmQoKTsgfQotCi0gICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHBy
aW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQotICAgIC8vIHRoYXQg
dGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0
aGlzLCB5b3UncmUgcmVhbGx5Ci0gICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KTsK
LSAgICAKLSAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0ZW1wdCBjb21w
aWxpbmcgc29tZXRoaW5nIHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQotICAgIC8vIHRo
ZSBiYXNlbGluZSBKSVQgd291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywgYnV0IGluc3Rl
YWQgaXQgd291bGQgcHV0IGl0cyBkYXRhIGludG8KLSAgICAvLyBhIG5ld2x5IGNyZWF0ZWQgSklU
Q29kZSwgd2hpY2ggY291bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBKSVQgY29tcGls
YXRpb24uIFRoZW4gd2UKLSAgICAvLyB3b3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhpcyBz
aWxseSBmdW5jdGlvbi4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTA2MQotICAgIHZvaWQgcmVzZXRKSVREYXRhKCk7Ci0jZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLQotICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFt
ZSwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwo
RXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQotICAgIHZvaWQgc2V0SklUQ29kZU1hcChz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBtX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBDb21w
YWN0SklUQ29kZU1hcCogaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXRD
b2RlTWFwLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0
QnlJZENhY2hlKEluc3RydWN0aW9uKik7Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJ
bnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1cm5BZGRyZXNz
IDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5z
dHJ1Y3Rpb24qPihyZXR1cm5BZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAg
fQotCi0gICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOwotICAgIHR5cGVk
ZWYgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0K
LSAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKTsgfQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mIGlu
c3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9Ci0gICAgY29uc3QgUmVmQ291
bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9p
bnN0cnVjdGlvbnM7IH0KLQotICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKTsK
LQotICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7Ci0KLSAgICB1bnNpZ25lZCBpbnN0cnVj
dGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9Ci0KLSAg
ICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQo
KSkKLSAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7Ci0gICAgCi0gICAgdm9pZCBzZXRK
SVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCho
ZWFwKCktPmlzRGVmZXJyZWQoKSk7Ci0gICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlB
bGxvY2F0ZWQoY29kZS0+c2l6ZSgpKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBpcyBw
cm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNvbWV0aGlu
ZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgotICAgICAgICBtX2ppdENv
ZGUgPSBjb2RlOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJl
dHVybiBtX2ppdENvZGU7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IGppdENvZGVPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdENvZGUpOyB9Ci0gICAgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEpJVENvZGUqIGpp
dENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIHJlc3VsdCA9IEpJVENvZGU6OmppdFR5cGVGb3Ioaml0
Q29kZSk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlz
bid0IG5lZWRlZC4gT2ggd2VsbCwgcGFyYW5vaWEgaXMgZ29vZC4KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7
Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwotCi0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgp
OwotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOwotICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUpOyB9Ci0KLSAg
ICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVw
bGFjZSk7Ci0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRv
UmVwbGFjZSBpcyBteSBKSVRUeXBlCi0jZW5kaWYKLQotICAgIHZvaWQgamV0dGlzb24oUHJvZmls
ZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291bnRSZW9wdGlt
aXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsKLSAgICAKLSAgICBFeGVjdXRh
YmxlQmFzZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCk7IH0KLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lclNjcmlwdEV4ZWN1dGFibGUo
KSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3duZXJFeGVjdXRh
YmxlLmdldCgpKTsgfQotCi0gICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQotCi0g
ICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcikgeyBt
X3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQotCi0gICAgYm9vbCB1
c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZhbCgpOyB9Ci0K
LSAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIp
Ci0gICAgewotICAgICAgICBBU1NFUlQoc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkgfHwgIXNjb3Bl
UmVnaXN0ZXIuaXNWYWxpZCgpKTsKLSAgICAgICAgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdp
c3RlcjsKLSAgICB9Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOwotICAgIH0KLSAgICAKLSAg
ICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5cGUpOwotICAgIH0KLQotICAgIFB1dFByb3BlcnR5U2xv
dDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY29k
ZVR5cGUoKSA9PSBFdmFsQ29kZSkKLSAgICAgICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWRFdmFsOwotICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkOwot
ICAgIH0KLQotICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlT2Zmc2V0OyB9Ci0gICAgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7IH0KLQotICAgIHNpemVfdCBu
dW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mSnVtcFRhcmdldHMoKTsgfQotICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+anVtcFRhcmdldChpbmRleCk7IH0KLQotICAg
IFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X251bVBhcmFtZXRlcnMgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykpOwot
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwotICAgIH0KLSAg
ICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgpCi0gICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZtX2FyZ3VtZW50
VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC0+bV9i
eXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92YWx1ZVByb2Zp
bGVzLnNpemUoKTsgfQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGludCBpbmRleCkg
eyByZXR1cm4gJm1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KLSAgICBWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgU3Bl
Y3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVlUHJvZmlsZXMo
KTsKLSAgICB9Ci0gICAgVmFsdWVQcm9maWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyh1bnNp
Z25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRW
YWx1ZVByb2ZpbGVzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoaW5kZXgpOwotICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlKGluZGV4IC0gbnVtYmVyT2ZB
cmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgfQotCi0gICAgUmFyZUNhc2VQcm9maWxlKiBh
ZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBudW1i
ZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgp
OyB9Ci0gICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJvZmlsZUNvdW50
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIGJvb2wgbGlrZWx5
VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFo
YXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlr
ZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBib29sIGNvdWxk
VGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmICghaGFz
QmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlvbnM6OmNvdWxk
VGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7Ci0gICAgfQotCi0gICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKLQotICAgIGJvb2wg
Y291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICB1bnNp
Z25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2FycmF5UHJvZmls
ZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgQXJyYXlQcm9maWxlVmVjdG9yJiBhcnJheVByb2ZpbGVz
KCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzOyB9Ci0gICAgQXJyYXlQcm9maWxlKiBhZGRBcnJh
eVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2Zp
bGUqIGdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogZ2V0T3JBZGRBcnJh
eVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgLy8gRXhjZXB0aW9uIGhh
bmRsaW5nIHN1cHBvcnQKLQotICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnMuc2l6ZSgpIDogMDsgfQotICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBp
bmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Ci0KLSAgICBib29sIGhhc0V4cHJlc3Npb25JbmZv
KCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7IH0KLQotI2lm
IEVOQUJMRShERkdfSklUKQotICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4mIGNvZGVPcmlnaW5zKCk7Ci0gICAgCi0gICAgLy8gSGF2aW5nIGNvZGUgb3JpZ2lu
cyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KLSAgICBib29sIGhh
c0NvZGVPcmlnaW5zKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSgpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGJvb2wgY2FuR2V0Q29kZU9y
aWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNDb2RlT3Jp
Z2lucygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gaW5kZXgu
Yml0cygpIDwgY29kZU9yaWdpbnMoKS5zaXplKCk7Ci0gICAgfQotCi0gICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gY29k
ZU9yaWdpbnMoKVtpbmRleC5iaXRzKCldOwotICAgIH0KLQotICAgIGJvb2wgYWRkRnJlcXVlbnRF
eGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCi0gICAgewotICAgICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7Ci0gICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQ
cm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOwotICAgIH0KLQotICAgIGJvb2wgaGFzRXhp
dFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwotICAgIH0KLSAgICBib29sIGhhc0V4aXRT
aXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBo
YXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwotICAgIH0KLQotICAgIERGRzo6RXhpdFByb2ZpbGUm
IGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQotCi0gICAgQ29tcHJlc3Nl
ZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOwotICAg
IH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIC8vIENvbnN0YW50IFBvb2wKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCkgKyBudW1iZXJP
ZkRGR0lkZW50aWZpZXJzKCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZERkdJZGVudGlmaWVycygp
IGNvbnN0OwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4KSBjb25z
dDsKLSNlbHNlCi0gICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyB9Ci0gICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5pZGVudGlmaWVyKGluZGV4KTsgfQotI2VuZGlmCi0KLSAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQotICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikKLSAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+
dm0oKSwgdGhpcywgdik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudExhemlseSgpCi0g
ICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25v
d24+KCkpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBl
bmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVy
KGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XTsgfQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXND
b25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5F
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9Ci0KLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4
XS5nZXQoKTsgfQotICAgIAotICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KLQotICAgIHVuc2lnbmVkIG51
bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJl
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgIH0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFu
dEJ1ZmZlcihjb25zdCBWZWN0b3I8SlNWYWx1ZT4mIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGNy
ZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcmFy
ZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9j
b25zdGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQotICAgIFZlY3RvcjxKU1ZhbHVlPiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rvcih1bnNpZ25l
ZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKLSAgICB9Ci0gICAgSlNW
YWx1ZSogY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1
cm4gY29uc3RhbnRCdWZmZXJBc1ZlY3RvcihpbmRleCkuZGF0YSgpOwotICAgIH0KLQotICAgIEhl
YXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiAmbV92bS0+aGVhcDsgfQotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQotCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsKLQotICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpCi0gICAgewotICAgICAg
ICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
ICAgICAgICAgaWYgKCEhbV9saXZlbmVzc0FuYWx5c2lzKQotICAgICAgICAgICAgICAgIHJldHVy
biAqbV9saXZlbmVzc0FuYWx5c2lzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXZlbmVz
c0FuYWx5c2lzU2xvdygpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHZhbGlkYXRlKCk7Ci0KLSAg
ICAvLyBKdW1wIFRhYmxlcwotCi0gICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXMuc2l6ZSgpIDogMDsgfQotICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxl
KCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVt
cFRhYmxlcy5hcHBlbmQoU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1
cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9Ci0gICAgdm9p
ZCBjbGVhclN3aXRjaEp1bXBUYWJsZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRh
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXMuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBh
ZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsg
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJpbmdKdW1wVGFi
bGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgp
OyB9Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLQotICAgIEV2YWxDb2RlQ2Fj
aGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJu
IG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQotCi0gICAgZW51bSBTaHJpbmtNb2RlIHsK
LSAgICAgICAgLy8gU2hyaW5rIHByaW9yIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIHRoYXQg
bWF5IHBvaW50IGRpcmVjdGx5IGludG8gdmVjdG9ycy4KLSAgICAgICAgRWFybHlTaHJpbmssCi0K
LSAgICAgICAgLy8gU2hyaW5rIGFmdGVyIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlLCBhbmQgYWZ0
ZXIgcG9zc2libHkgY3JlYXRpbmcgbmV3IHZlY3RvcnMKLSAgICAgICAgLy8gYW5kIGFwcGVuZGlu
ZyB0byBvdGhlcnMuIEF0IHRoaXMgdGltZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJpbmsgY2VydGFp
biB2ZWN0b3JzCi0gICAgICAgIC8vIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5lcmF0ZWQgbWFj
aGluZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGVtIGRpcmVjdGx5LgotICAgICAgICBMYXRlU2hy
aW5rCi0gICAgfTsKLSAgICB2b2lkIHNocmlua1RvRml0KFNocmlua01vZGUpOwotCi0gICAgLy8g
RnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIEpJVHRpbmcga2lja3MgaW4sIGluIGEgbWl4
ZWQgbW9kZQotICAgIC8vIGV4ZWN1dGlvbiB3b3JsZC4KLQotICAgIGJvb2wgY2hlY2tJZkpJVFRo
cmVzaG9sZFJlYWNoZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291
bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCi0gICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKLSAgICB9Ci0KLSAgICBpbnQzMl90IHRocmVzaG9s
ZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwot
ICAgIHZvaWQgaml0U29vbigpOwotCi0gICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
JiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xs
aW50RXhlY3V0ZUNvdW50ZXI7Ci0gICAgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVy
ZSosIEJhZzxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwotICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAmIGxsaW50
R2V0QnlJZFdhdGNocG9pbnRNYXAoKSB7IHJldHVybiBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRN
YXA7IH0KLQotICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29t
cGlsYXRpb24ga2lja3MgaW4uIFRoaXMKLSAgICAvLyBjb250cm9scyBib3RoIHdoZW4gdGhlIG9w
dGltaXppbmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKLSAgICAvLyBlbnRyeSBo
YXBwZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1
cm4KLSAgICAvLyB0cmlnZ2VyLiBJbiBlaXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRpdGlvbiB0byBt
X2ppdEV4ZWN1dGVDb3VudGVyCi0gICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBub24tbmVnYXRp
dmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzCi0gICAgLy8gaW52b2tlZC4gVGhpcyBpbmNs
dWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcwotICAgIC8vIGFs
cmVhZHkgYmVlbiBvcHRpbWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5zIGEgQ29kZUJs
b2NrCi0gICAgLy8gdGhhdCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdoZXIgdGllciBKSVQgdGhh
biB0aGlzIG9uZSkuIEluIHRoZQotICAgIC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJpZ2dlciwgaWYg
dGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcwotICAgIC8vIChvciBoYXMgYWxyZWFk
eSBzdWNjZWVkZWQgaW4gdGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0bwotICAgIC8v
IHJlZGlyZWN0IHByb2dyYW0gZmxvdyBpbnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4KLQotICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRpbWl6YXRpb24g
dHJpZ2dlcnMsCi0gICAgLy8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNo
IHdlIGRlZmluZSB0aGUgaGV1cmlzdGljcwotICAgIC8vIGZvciBob3cgbXVjaCB3YXJtLXVwIGlz
IG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24KLSAgICAvLyB0cmlnZ2VyIGZp
bGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCks
Ci0gICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9y
LgotCi0gICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVz
LCB3ZSB0cmlnZ2VyIGEKLSAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2Ug
aW5jcmVhc2UgdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VyCi0gICAgLy8gdG8gYXZvaWQgdGhyYXNo
aW5nLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7Ci0jaWYgRU5B
QkxFKEpJVCkKLSAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIFJlZ2lzdGVyU2V0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7IH0KLSAgICBzdGF0aWMgc2l6
ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAg
ICBzaXplX3QgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0KLSAgICB1bnNp
Z25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCk7Ci0KLSAgICBpbnQzMl90IGNvZGVUeXBlVGhyZXNo
b2xkTXVsdGlwbGllcigpIGNvbnN0OwotCi0gICAgaW50MzJfdCBhZGp1c3RlZENvdW50ZXJWYWx1
ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOwotCi0gICAgaW50MzJfdCogYWRkcmVzc09mSklU
RXhlY3V0ZUNvdW50ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2ppdEV4ZWN1dGVDb3Vu
dGVyLm1fY291bnRlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2pp
dEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIsIG1fY291bnRlcik7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0
aW9uQWN0aXZlVGhyZXNob2xkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSklURXhlY3V0aW9uVG90YWxDb3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciwgbV90b3RhbENvdW50KTsgfQotCi0gICAgY29uc3QgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyJiBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhl
Y3V0ZUNvdW50ZXI7IH0KLQotICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9Ci0KLSAgICAvLyBD
aGVjayBpZiB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkLCBhbmQg
aWYgbm90LAotICAgIC8vIGFkanVzdCB0aGUgaGV1cmlzdGljcyBhY2NvcmRpbmdseS4gUmV0dXJu
cyB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgaGFzCi0gICAgLy8gYmVlbiByZWFjaGVkLgotICAgIGJv
b2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKTsKLQotICAgIC8vIENhbGwg
dGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBUaGlz
IGlzCi0gICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUg
dHlwaWNhbGx5IG1vcmUKLSAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KLSAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKLQotICAgIC8vIENhbGwg
dGhpcyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0
aGF0Ci0gICAgLy8gb3B0aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJvdWdobHkg
Ml4yOSBpbnZvY2F0aW9ucywKLSAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFudCB0byBkZWxh
eSB0aGF0IGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMKLSAgICAvLyBpcyBjYWxsZWQgaWYgb3B0
aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCi0gICAgLy8gdGhl
IGZ1dHVyZSBhcyB3ZWxsLgotICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLQot
ICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRzIHN0YXJ0
aW5nIHN0YXRlLAotICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBiZWZvcmUgdGhl
IG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKLSAgICAvLyBmaXJlcy4gVGhpcyBpcyBjYWxsZWQg
aW4gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4gSXQgYWxzbwotICAgIC8vIG1ha2VzIHNlbnNl
IHRvIGNhbGwgdGhpcyBpZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0Ci0gICAgLy8g
T1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28gdGhlIHZhbHVlIG9mIHRoZSBleGVj
dXRlCi0gICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFp
bGFibGUgZGlyZWN0bHkuCi0gICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0KLSAgICAv
LyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5
IGFmdGVyCi0gICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKCk7Ci0KLSAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9u
IHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKLSAgICAvLyBub3QgbmVjZXNzYXJpbHkgdGhlIG5l
eHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgotICAgIC8vIHN1Y2NlZWRz
LiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMgYXJlCi0gICAg
Ly8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkgYWZmZWN0cyBj
YWxsCi0gICAgLy8gZnJhbWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlzIENvZGVCbG9j
ay4gVGhlIHZhbHVlIGhlcmUKLSAgICAvLyBpcyB0dW5lZCB0byBzdHJpa2UgYSBiYWxhbmNlIGJl
dHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVudHJ5Ci0gICAgLy8gKHdoaWNoIGlzIHRvbyBoaWdoIHRv
IHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdlIHRvCi0gICAgLy8gdHJpZ2dlciBP
U1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxpbmUKLSAgICAv
LyBjb2RlICh3aGljaCBpcyBoaWdoIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdh
bnQgdG8KLSAgICAvLyBoYXZlIGEgZnVsbCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2Fs
bGluZyB0aGlzIGluc3RlYWQgb2YKLSAgICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkgaXMg
Zm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMKLSAgICAvLyB3aXRoIGxvb3BzLiBD
b25zaWRlciB0aGF0IHRoZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUKLSAgICAvLyBy
ZWN1cnNpdmUgZnVuY3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhl
IHRvcAotICAgIC8vIG9uZSB0cmlnZ2VycyBvcHRpbWl6YXRpb24sIGFuZCB0aGVuIHJldHVybnMs
IGFuZCB0aGVuIGFsbCBvZgotICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBkb24ndCB3YW50
IG9wdGltaXphdGlvbiB0byBiZSB0cmlnZ2VyZWQgb24KLSAgICAvLyBlYWNoIHJldHVybiwgYXMg
dGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQotICAgIC8vIHRv
IHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBo
b3QKLSAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KLSAgICB2b2lkIG9wdGltaXplU29vbigp
OwotCi0gICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCk7Ci0K
LSAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3Vs
dChDb21waWxhdGlvblJlc3VsdCk7Ci0gICAgCi0gICAgdWludDMyX3Qgb3NyRXhpdENvdW50ZXIo
KSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9Ci0KLSAgICB2b2lkIGNvdW50T1NS
RXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9Ci0KLSAgICB1aW50MzJfdCogYWRkcmVzc09m
T1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiAmbV9vc3JFeGl0Q291bnRlcjsgfQotCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9vc3JFeGl0Q291bnRlcik7IH0KLQotICAgIHVpbnQzMl90IGFk
anVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOwotICAg
IHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7Ci0gICAgdWlu
dDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOwotICAg
IGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpOwotICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZUZy
b21Mb29wTm93KCk7Ci0KLSAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJT
ZXQpOwotICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1ZV9wdHI8UmVn
aXN0ZXJBdE9mZnNldExpc3Q+KTsKLSAgICAKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5n
ZXQoKTsgfQotI2Vsc2UgLy8gTm8gSklUCi0gICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mTExJ
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGlj
IHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkg
eyByZXR1cm4gMDsgfTsKLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7IH0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSAg
ICBib29sIHNob3VsZE9wdGltaXplTm93KCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2Zp
bGVQcmVkaWN0aW9ucygpOwotICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwot
ICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKLQotICAgIHVuc2lnbmVkIGZyYW1lUmVn
aXN0ZXJDb3VudCgpOwotICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQoKTsKLQotICAgIGJvb2wg
aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1u
KTsKLQotICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJSZXF1ZXN0czsgfQotICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyBy
ZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQotCi0gICAgdm9pZCBhZGRCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpCi0gICAgewotICAgICAgICBBU1NFUlQobV9udW1CcmVha3BvaW50
cyA+PSBudW1CcmVha3BvaW50cyk7Ci0gICAgICAgIG1fbnVtQnJlYWtwb2ludHMgLT0gbnVtQnJl
YWtwb2ludHM7Ci0gICAgfQotCi0gICAgZW51bSBTdGVwcGluZ01vZGUgewotICAgICAgICBTdGVw
cGluZ01vZGVEaXNhYmxlZCwKLSAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAotICAgIH07Ci0g
ICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKLQotICAgIHZvaWQgY2xlYXJE
ZWJ1Z2dlclJlcXVlc3RzKCkKLSAgICB7Ci0gICAgICAgIG1fc3RlcHBpbmdNb2RlID0gU3RlcHBp
bmdNb2RlRGlzYWJsZWQ7Ci0gICAgICAgIG1fbnVtQnJlYWtwb2ludHMgPSAwOwotICAgIH0KLQot
ICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAg
ICAKLSAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgot
Ci0gICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOwotICAgIGludCBtX251bVZhcnM7Ci0gICAgCi0g
ICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVzcG9uc2liaWxp
dHkgb2YgYW55b25lIGRvaW5nIGFueQotICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcgdG8gaG9sZCB0
aGUgbG9jazoKLSAgICAvLwotICAgIC8vIC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUgY2FjaGUgaW4g
dGhpcyBjb2RlIGJsb2NrLgotICAgIC8vCi0gICAgLy8gLSBRdWVyaW5nIGFueSBpbmxpbmUgY2Fj
aGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4KLSAgICAvLyAg
IHRoZSBtYWluIHRocmVhZC4KLSAgICAvLwotICAgIC8vIEFkZGl0aW9uYWxseSwgaXQncyBvbmx5
IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hlIG9uIHRoZSBtYWluCi0gICAgLy8gdGhy
ZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0aGUgaW5saW5l
IGNhY2hlIHdpdGhvdXQKLSAgICAvLyBsb2NraW5nLiBUaGlzIGlzIGNydWNpYWwgc2luY2UgZXhl
Y3V0aW5nIHRoZSBpbmxpbmUgY2FjaGUgaXMgZWZmZWN0aXZlbHkKLSAgICAvLyAicXVlcnlpbmci
IGl0LgotICAgIC8vCi0gICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVzIGlzIHRo
YXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cwotICAgIC8vIHdpdGhvdXQgaG9sZGlu
ZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBh
bnkKLSAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNoIHdoYXQgdGhl
eSdyZSBkb2luZy4KLSAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKLQotICAg
IEF0b21pYzxib29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKLQotICAgIGJvb2wgbV9z
aG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3
YW50cyB0byBzdG9yZSB0byBpdC4KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgdW5zaWduZWQgbV9j
YXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCi0jZW5kaWYK
LQotICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkIDogMTsgLy8gSW5pdGlh
bGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCi0KLSAgICBib29sIG1fZGlkRmFpbEpJVENvbXBp
bGF0aW9uIDogMTsKLSAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKLSAgICBi
b29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7Ci0gICAgYm9vbCBtX2lzQ29uc3RydWN0
b3IgOiAxOwotICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwotICAgIHVuc2lnbmVkIG1fY29k
ZVR5cGUgOiAyOyAvLyBDb2RlVHlwZQotCi0gICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNl
IGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKLSAg
ICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMgbmFtZXNwYWNl
cy4KLSAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLQotICAgIHN0cnVjdCBSYXJl
RGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwotCi0gICAgICAg
IC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKLSAgICAgICAgVmVjdG9y
PFZlY3RvcjxKU1ZhbHVlPj4gbV9jb25zdGFudEJ1ZmZlcnM7Ci0KLSAgICAgICAgLy8gSnVtcCBU
YWJsZXMKLSAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OwotICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXM7Ci0KLSAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7Ci0gICAgfTsKLQot
ICAgIHZvaWQgY2xlYXJFeGNlcHRpb25IYW5kbGVycygpCi0gICAgewotICAgICAgICBpZiAobV9y
YXJlRGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgSGFu
ZGxlckluZm8mIGhhbmRsZXIpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7IC8vIFdlIG1heSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFuIGlubGluZWQg
Y2FsbCBmcmFtZS4KLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBl
bmQoaGFuZGxlcik7Ci0gICAgfQotCi0gICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlKTsKLQotI2lm
IEVOQUJMRShKSVQpCi0gICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwotICAgIE9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQ
Qyh2b2lkKiBwYyk7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgZmluYWxpemVMTElu
dElubGluZUNhY2hlcygpOwotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hl
cygpOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7Ci0jZWxzZQotICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKLQotICAgIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKLSAgICAKLSAg
ICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7Ci0gICAgCi0gICAgdm9p
ZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSk7Ci0gICAgCi0gICAg
ZG91YmxlIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKLQotICAgIHZvaWQg
dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzKTsKLQotICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdy
aXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7Ci0KLSAg
ICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYmIHN0YXRpY19j
YXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgPCBtX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0
aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0gICAgICAgIFBy
aW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJ
bnN0cnVjdGlvbiomLAotICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHViSW5mb01hcCgp
LCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwotCi0gICAgQ1N0
cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0OwotICAgIENTdHJpbmcgY29uc3RhbnROYW1l
KGludCBpbmRleCkgY29uc3Q7Ci0gICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mLCBF
eGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIq
IG9wKTsKLSAgICB2b2lkIHByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKLSAgICB2
b2lkIHByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24sIGNvbnN0IGNo
YXIqIG9wKTsKLSAgICB2b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRl
KiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomKTsKLSAgICB2b2lkIHByaW50R2V0
QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBj
b25zdCBTdHViSW5mb01hcCYpOwotICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMs
IERvbnREdW1wQ2FjaGVzIH07Ci0gICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4
ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciog
b3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNvbnN0IENhbGxM
aW5rSW5mb01hcCYpOwotICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9w
KTsKLSAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgaW50IGxv
Y2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOwotICAgIHZvaWQgcHJpbnRMb2NhdGlvbkFuZE9w
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCk7Ci0gICAgdm9pZCBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rl
ck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IElu
c3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7Ci0KLSAgICB2b2lk
IGJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwotICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5z
dHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgdm9pZCBkdW1wQXJy
YXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJl
YW0mLCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQcmludGVk
UHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJlYW0mLCBBcml0
aFByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLQotICAgIGJvb2wgc2hvdWxk
VmlzaXRTdHJvbmdseSgpOwotICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVu
Y2UoKTsKLSAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKTsKLSAgICAKLSAgICB2
b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBkZXRlcm1p
bmVMaXZlbmVzcyhTbG90VmlzaXRvciYpOwotICAgICAgICAKLSAgICB2b2lkIHN0cm9uZ2x5Vmlz
aXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBzdHJvbmdseVZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdl
dHMoU2xvdFZpc2l0b3ImKTsKLQotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVNp
bmNlQ3JlYXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAotICAgICAgICAgICAgc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2NyZWF0aW9uVGltZSk7Ci0gICAgfQotCi0gICAg
dm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9y
YXJlRGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVE
YXRhPigpOwotICAgIH0KLQotICAgIHZvaWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JD
b250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4mKTsKLQotICAg
IFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7Ci0gICAgaW50
IG1fbnVtUGFyYW1ldGVyczsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVkIG1fZGVidWdn
ZXJSZXF1ZXN0czsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faGFz
RGVidWdnZXJTdGF0ZW1lbnQgOiAxOwotICAgICAgICAgICAgdW5zaWduZWQgbV9zdGVwcGluZ01v
ZGUgOiAxOwotICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6IDMwOwotICAg
ICAgICB9OwotICAgIH07Ci0gICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX293bmVy
RXhlY3V0YWJsZTsKLSAgICBWTSogbV92bTsKLQotICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVy
OwotICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAgbXV0YWJsZSBDb2Rl
QmxvY2tIYXNoIG1faGFzaDsKLQotICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7
Ci0gICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9maXJzdExpbmVD
b2x1bW5PZmZzZXQ7Ci0KLSAgICBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlua0luZm8+IG1f
bGxpbnRDYWxsTGlua0luZm9zOwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5r
SW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5n
TExJbnRDYWxsczsKLSAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0
Y2hwb2ludE1hcDsKLSAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwotI2lmIEVOQUJMRShK
SVQpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBtX2NhbGxlZVNh
dmVSZWdpc3RlcnM7Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAg
ICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0g
ICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOwot
ICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwotICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwot
I2VuZGlmCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVN
YXA7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24t
REZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKLSAg
ICAvLyBmb3IgREZHIGNvZGUgYmxvY2tzLgotICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJv
ZmlsZTsKLSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZXM7Ci0jZW5kaWYKLSAgICBSZWZDb3VudGVkQXJyYXk8VmFsdWVQ
cm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8VmFs
dWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7Ci0gICAgU2VnbWVudGVkVmVjdG9yPFJhcmVDYXNl
UHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxBcnJh
eUFsbG9jYXRpb25Qcm9maWxlPiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzOwotICAgIEFycmF5
UHJvZmlsZVZlY3RvciBtX2FycmF5UHJvZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlPiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlczsKLQotICAgIC8v
IENvbnN0YW50IFBvb2wKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0ZXIpID09IHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3NhbWVfc2l6ZV9h
c19Xcml0ZUJhcnJpZXJfVW5rbm93bik7Ci0gICAgLy8gVE9ETzogVGhpcyBjb3VsZCBqdXN0IGJl
IGEgcG9pbnRlciB0byBtX3VubGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRoZSBERkcgbXV0
YXRlcwotICAgIC8vIGl0LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cuCi0gICAgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKLSAgICBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsKLSAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0
YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKLSAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVy
PEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKLQotICAgIFdyaXRlQmFycmll
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7Ci0gICAgCi0gICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKLQotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwotICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7
Ci0gICAgdWludDE2X3QgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7Ci0gICAgdWludDE2X3Qg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKLQotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVhdGlvblRpbWU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzQW5hbHlzaXM7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0KLSAgICBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKLSAgICBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKLX07Ci0KLS8vIFByb2dyYW0gY29kZSBpcyBu
b3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdAot
Ly8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCi0KLWNsYXNzIEdsb2JhbENvZGVCbG9jayA6
IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Ci0gICAgREVD
TEFSRV9JTkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBv
dGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgR2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENvZGVCbG9jayh2
bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwg
c291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAg
IHsKLSAgICB9Ci19OwotCiBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENv
ZGVCbG9jayB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKQEAg
LTExMTEsMjY1ICs3NSw0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIH07CiAKLWNsYXNzIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFs
Q29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwot
ICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBj
cmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sm
IG90aGVyKQotICAgIHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpCi0gICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7
Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywg
b3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQotICAgIHsKLSAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3Jh
bUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwotICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAg
ICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
Ci0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19Owot
Ci1jbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0K
LSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2Nr
VGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEV2YWxDb2RlQmxvY2sq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0t
PmhlYXApKQotICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tT
dHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVh
dGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFz
c1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgewotICAgICAgICBF
dmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxD
b2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLT5l
dmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgY29uc3QgSWRlbnRpZmllciYgdmFyaWFi
bGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHVubGlua2VkRXZhbENvZGVCbG9jaygpLT52YXJp
YWJsZShpbmRleCk7IH0KLSAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiB1bmxp
bmtlZEV2YWxDb2RlQmxvY2soKS0+bnVtVmFyaWFibGVzKCk7IH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2Vk
QmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAgIHsKLSAgICB9Ci0g
ICAgICAgIAotICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2
bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwg
c291cmNlUHJvdmlkZXIsIDAsIDEpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwotCi1wcml2YXRlOgotICAgIFVubGlua2VkRXZhbENvZGVCbG9j
ayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4ganNDYXN0PFVubGlua2Vk
RXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9Ci19OwotCi1jbGFzcyBGdW5j
dGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYg
Q29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEZ1bmN0aW9u
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29k
ZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVh
cCkpCi0gICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJs
b2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAg
ICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRnVuY3Rpb25Db2RlQmxv
Y2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUsCi0gICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAg
ICB7Ci0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgp
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlk
ZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGdW5j
dGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0s
IHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
RnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKLSAgICAgICAgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWdu
ZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLX07Ci0KLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi1jbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2Rl
QmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFS
RV9JTkZPOwotCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAg
ICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0
dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVy
biBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlD
b2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZt
LCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwg
b3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBvdGhl
cikKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgIDogQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLSNlbmRpZgotCi1pbmxp
bmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCi17Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWdpc3Rlcio+KCZjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpKTsKLSAgICBy
ZXR1cm4gdGhpc1tpbmRleF07Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKFZp
cnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKLX0KLQot
aW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQotewotICAg
IFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAg
IHJldHVybiB0aGlzW2luZGV4XTsKLX0KLQotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICByZXR1cm4gdW5jaGVja2VkUihy
ZWcub2Zmc2V0KCkpOwotfQotCi1pbmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRXZWFr
bHlIYXNCZWVuQ2FsbGVkKCkKLXsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9y
ZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJs
b2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQotewotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2Fz
ZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJs
b2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2st
PmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRXZhbEV4ZWN1dGFibGVUeXBlOiB7
Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5tX2V2YWxDb2RlQmxvY2suZ2V0KCkp
KQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9y
d2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKLSAgICAgICAgaWYg
KENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJs
ZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9y
RWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2Rl
QmxvY2soZik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRo
aXMpLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJs
b2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEV4ZWN1dGFibGVUeXBlPgotSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJsb2NrKQot
ewotICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmlzX3Nh
bWU8RXhlY3V0YWJsZVR5cGUsIEV2YWxFeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAgICAgICAgICBy
ZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxl
Kj4odGhpcyktPmNvZGVCbG9jaygpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1lPEV4
ZWN1dGFibGVUeXBlLCBQcm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAgICAgcmVz
dWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxF
eGVjdXRhYmxlVHlwZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAg
ICAgIHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrKCkpOwotICAgICAgICBlbHNlIGlmIChz
dGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZT46OnZhbHVlKQot
ICAgICAgICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1w
bCh2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCByZXN1bHRDb2RlQmxvY2spOwotfQotCi0jZGVm
aW5lIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCBzdW1tYXJ5LCBkZXRhaWxzKSBcCi0g
ICAgKGNvZGVCbG9jay0+dm0oKS0+bG9nRXZlbnQoY29kZUJsb2NrLCBzdW1tYXJ5LCBbJl0gKCkg
eyByZXR1cm4gdG9DU3RyaW5nIGRldGFpbHM7IH0pKQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjA4MzAzKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDY2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKworI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgorI2luY2x1ZGUg
IkJhc2ljQmxvY2tMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVV
c2VEZWYuaCIKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgorI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNp
bmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAi
RnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgorI2luY2x1ZGUgIkdldFB1dEluZm8uaCIKKyNpbmNs
dWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1
ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1l
bnQuaCIKKyNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCisjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCisjaW5jbHVkZSAiTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiTG93TGV2
ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQQ1Rv
Q29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVk
ZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlJlZHVjZVdoaXRlc3BhY2UuaCIKKyNp
bmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3RhY2tWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNp
bmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgor
I2luY2x1ZGUgIlVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKKyNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
QmFnVG9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUg
PHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVk
U3RyaW5nSW1wbC5oPgorCisjaWYgRU5BQkxFKEpJVCkKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zm
c2V0TGlzdC5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShGVExfSklUKQorI2luY2x1ZGUgIkZU
TEpJVENvZGUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZv
IENvZGVCbG9jazo6c19pbmZvID0geworICAgICJDb2RlQmxvY2siLCAwLCAwLAorICAgIENSRUFU
RV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9u
Q29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJhc2U6OnNf
aW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29kZUJsb2NrKQorfTsK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUNv
ZGVCbG9jazo6c19pbmZvID0geworICAgICJXZWJBc3NlbWJseUNvZGVCbG9jayIsICZCYXNlOjpz
X2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUNvZGVCbG9jaykK
K307CisjZW5kaWYKKworY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9jazo6c19pbmZvID0g
eworICAgICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9N
RVRIT0RfVEFCTEUoR2xvYmFsQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZvIFByb2dy
YW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpz
X2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29kZUJsb2NrKQorfTsK
KworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAg
ICAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRF
X01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJ
bmZvIEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiRXZhbENvZGVCbG9jayIsICZCYXNl
OjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29kZUJsb2NrKQorfTsK
Kwordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
anNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNvZGVCbG9jaygpOwor
fQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQordm9pZCBXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2Nr
Kj4oY2VsbCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorI2VuZGlmCisKK3ZvaWQgUHJv
Z3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFByb2dy
YW1Db2RlQmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9pZCBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaygp
OworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAg
IGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2NrKCk7Cit9CisKK0NT
dHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAoreworICAgIHN3aXRjaCAoY29k
ZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICAgICAgcmV0dXJuICI8Z2xvYmFs
PiI7CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgcmV0dXJuICI8ZXZhbD4iOworICAgIGNh
c2UgRnVuY3Rpb25Db2RlOgorICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgpOworICAgIGNhc2Ug
TW9kdWxlQ29kZToKKyAgICAgICAgcmV0dXJuICI8bW9kdWxlPiI7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOworICAgIH0KK30K
KworYm9vbCBDb2RlQmxvY2s6Omhhc0hhc2goKSBjb25zdAoreworICAgIHJldHVybiAhIW1faGFz
aDsKK30KKworYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvQ29tcHV0ZUhhc2goKSBjb25zdAorewor
ICAgIHJldHVybiAhaXNDb21waWxhdGlvblRocmVhZCgpOworfQorCitDb2RlQmxvY2tIYXNoIENv
ZGVCbG9jazo6aGFzaCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hhc2gpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNTYWZlVG9Db21wdXRlSGFzaCgpKTsKKyAgICAgICAgbV9oYXNoID0gQ29k
ZUJsb2NrSGFzaChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCksIHNwZWNpYWxpemF0
aW9uS2luZCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1faGFzaDsKK30KKworQ1N0cmluZyBDb2Rl
QmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0Cit7CisgICAgaWYgKGNvZGVUeXBlKCkg
IT0gRnVuY3Rpb25Db2RlKQorICAgICAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCkt
PnNvdXJjZSgpLnRvVVRGOCgpOworICAgIAorICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9
IHNvdXJjZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSk7CisgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkID0gZXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxl
KCk7CisgICAgdW5zaWduZWQgdW5saW5rZWRTdGFydE9mZnNldCA9IHVubGlua2VkLT5zdGFydE9m
ZnNldCgpOworICAgIHVuc2lnbmVkIGxpbmtlZFN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291
cmNlKCkuc3RhcnRPZmZzZXQoKTsKKyAgICBpbnQgZGVsdGEgPSBsaW5rZWRTdGFydE9mZnNldCAt
IHVubGlua2VkU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgcmFuZ2VTdGFydCA9IGRlbHRhICsg
dW5saW5rZWQtPnVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKTsKKyAgICB1bnNpZ25lZCByYW5n
ZUVuZCA9IGRlbHRhICsgdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCkgKyB1bmxpbmtlZC0+c291cmNl
TGVuZ3RoKCk7CisgICAgcmV0dXJuIHRvQ1N0cmluZygKKyAgICAgICAgImZ1bmN0aW9uICIsCisg
ICAgICAgIHByb3ZpZGVyLT5zb3VyY2UoKS5zdWJzdHJpbmcocmFuZ2VTdGFydCwgcmFuZ2VFbmQg
LSByYW5nZVN0YXJ0KS51dGY4KCkpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29k
ZU9uT25lTGluZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlZHVjZVdoaXRlc3BhY2Uoc291cmNl
Q29kZUZvclRvb2xzKCkpOworfQorCitDU3RyaW5nIENvZGVCbG9jazo6aGFzaEFzU3RyaW5nSWZQ
b3NzaWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0hhc2goKSB8fCBpc1NhZmVUb0NvbXB1dGVI
YXNoKCkpCisgICAgICAgIHJldHVybiB0b0NTdHJpbmcoaGFzaCgpKTsKKyAgICByZXR1cm4gIjxu
by1oYXNoPiI7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW50
U3RyZWFtJiBvdXQsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpKTsKKyAg
ICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+Iik7CisgICAgaWYgKCEhbV9h
bHRlcm5hdGl2ZSkKKyAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoYWx0ZXJuYXRpdmUoKSks
ICItPiIpOworICAgIG91dC5wcmludChSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwgIiwg
Iiwgaml0VHlwZSwgY29kZVR5cGUoKSk7CisKKyAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpCisgICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQoKSk7CisgICAgb3V0
LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7CisgICAgaWYgKHRoaXMtPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAg
ICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsKKyAgICBpZiAob3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCisgICAgICAgIG91dC5wcmludCgi
IChOZXZlcklubGluZSkiKTsKKyAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVy
T3B0aW1pemUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgKE5ldmVyT3B0aW1pemUpIik7CisgICAg
ZWxzZSBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVyRlRMT3B0aW1pemUoKSkKKyAg
ICAgICAgb3V0LnByaW50KCIgKE5ldmVyRlRMT3B0aW1pemUpIik7CisgICAgaWYgKG93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCisgICAgICAgIG91dC5wcmlu
dCgiIChEaWRUcnlUb0VudGVySW5Mb29wKSIpOworICAgIGlmIChvd25lclNjcmlwdEV4ZWN1dGFi
bGUoKS0+aXNTdHJpY3RNb2RlKCkpCisgICAgICAgIG91dC5wcmludCgiIChTdHJpY3RNb2RlKSIp
OworICAgIGlmIChtX2RpZEZhaWxKSVRDb21waWxhdGlvbikKKyAgICAgICAgb3V0LnByaW50KCIg
KEpJVEZhaWwpIik7CisgICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCAmJiBtX2RpZEZhaWxGVExDb21waWxhdGlvbikKKyAgICAgICAgb3V0LnByaW50KCIgKEZU
TEZhaWwpIik7CisgICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCAmJiBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwpCisgICAgICAgIG91dC5wcmludCgiIChIYWRG
VExSZXBsYWNlbWVudCkiKTsKKyAgICBvdXQucHJpbnQoIl0iKTsKK30KKwordm9pZCBDb2RlQmxv
Y2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wQXNzdW1pbmdKSVRU
eXBlKG91dCwgaml0VHlwZSgpKTsKK30KKworc3RhdGljIENTdHJpbmcgaWROYW1lKGludCBpZDAs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIHJldHVybiB0b0NTdHJpbmcoaWRlbnQu
aW1wbCgpLCAiKEBpZCIsIGlkMCwgIikiKTsKK30KKworQ1N0cmluZyBDb2RlQmxvY2s6OnJlZ2lz
dGVyTmFtZShpbnQgcikgY29uc3QKK3sKKyAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
cikpCisgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CisKKyAgICByZXR1cm4gdG9DU3Ry
aW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7Cit9CisKK0NTdHJpbmcgQ29kZUJsb2NrOjpjb25zdGFu
dE5hbWUoaW50IGluZGV4KSBjb25zdAoreworICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFu
dChpbmRleCk7CisgICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgpLCAiKSIpOworfQorCitzdGF0aWMgQ1N0cmluZyByZWdleHBUb1NvdXJjZVN0cmlu
ZyhSZWdFeHAqIHJlZ0V4cCkKK3sKKyAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwg
MCwgMCB9OworICAgIGludCBpbmRleCA9IDE7CisgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpCisg
ICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnZyc7CisgICAgaWYgKHJlZ0V4cC0+aWdub3JlQ2Fz
ZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOworICAgIGlmIChyZWdFeHAtPm11
bHRpbGluZSgpKQorICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKKyAgICBpZiAocmVnRXhw
LT5zdGlja3koKSkKKyAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd5JzsKKyAgICBpZiAocmVn
RXhwLT51bmljb2RlKCkpCisgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAndSc7CisKKyAgICBy
ZXR1cm4gdG9DU3RyaW5nKCIvIiwgcmVnRXhwLT5wYXR0ZXJuKCkuaW1wbCgpLCBwb3N0Zml4KTsK
K30KKworc3RhdGljIENTdHJpbmcgcmVnZXhwTmFtZShpbnQgcmUsIFJlZ0V4cCogcmVnZXhwKQor
eworICAgIHJldHVybiB0b0NTdHJpbmcocmVnZXhwVG9Tb3VyY2VTdHJpbmcocmVnZXhwKSwgIihA
cmUiLCByZSwgIikiKTsKK30KKworTkVWRVJfSU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1
Z0hvb2tOYW1lKGludCBkZWJ1Z0hvb2tUeXBlKQoreworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
RGVidWdIb29rVHlwZT4oZGVidWdIb29rVHlwZSkpIHsKKyAgICAgICAgY2FzZSBEaWRFbnRlckNh
bGxGcmFtZToKKyAgICAgICAgICAgIHJldHVybiAiZGlkRW50ZXJDYWxsRnJhbWUiOworICAgICAg
ICBjYXNlIFdpbGxMZWF2ZUNhbGxGcmFtZToKKyAgICAgICAgICAgIHJldHVybiAid2lsbExlYXZl
Q2FsbEZyYW1lIjsKKyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVudDoKKyAgICAgICAg
ICAgIHJldHVybiAid2lsbEV4ZWN1dGVTdGF0ZW1lbnQiOworICAgICAgICBjYXNlIFdpbGxFeGVj
dXRlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHJldHVybiAid2lsbEV4ZWN1dGVFeHByZXNzaW9u
IjsKKyAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06CisgICAgICAgICAgICByZXR1cm4g
IndpbGxFeGVjdXRlUHJvZ3JhbSI7CisgICAgICAgIGNhc2UgRGlkRXhlY3V0ZVByb2dyYW06Cisg
ICAgICAgICAgICByZXR1cm4gImRpZEV4ZWN1dGVQcm9ncmFtIjsKKyAgICAgICAgY2FzZSBEaWRS
ZWFjaEJyZWFrcG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gImRpZFJlYWNoQnJlYWtwb2ludCI7
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
IiI7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoUHJpbnRTdHJlYW0mIG91dCwg
RXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNv
bnN0IGNoYXIqIG9wKQoreworICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworCisgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7CisgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OnByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVj
LCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wKQor
eworICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnBy
aW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBpbnQgbG9jYXRpb24sIGNv
bnN0IGNoYXIqIG9wKQoreworICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGlu
dCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcywgJWQoLT4lZCki
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Cit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVj
U3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCkKK3sKKyAg
ICBjb25zdCBjaGFyKiBvcDsKKyAgICBzd2l0Y2ggKGV4ZWMtPmludGVycHJldGVyKCktPmdldE9w
Y29kZUlEKGl0LT51Lm9wY29kZSkpIHsKKyAgICBjYXNlIG9wX2dldF9ieV9pZDoKKyAgICAgICAg
b3AgPSAiZ2V0X2J5X2lkIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
cHJvdG9fbG9hZDoKKyAgICAgICAgb3AgPSAiZ2V0X2J5X2lkX3Byb3RvX2xvYWQiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDoKKyAgICAgICAgb3AgPSAiZ2V0
X2J5X2lkX3Vuc2V0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVu
Z3RoOgorICAgICAgICBvcCA9ICJhcnJheV9sZW5ndGgiOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIENPTVBJ
TEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAgICAgICBvcCA9IDA7Cisj
ZW5kaWYKKyAgICB9CisgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOworICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsK
KyAgICBpdCArPSA0OyAvLyBJbmNyZW1lbnQgdXAgdG8gdGhlIHZhbHVlIHByb2ZpbGVyLgorfQor
CitzdGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IG5hbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sK
KyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91dC5wcmlu
dGYoIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGlkZW50LmltcGwoKSk7CisgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICBvdXQucHJpbnRmKCIgKG9mZnNl
dCA9ICVkKSIsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBDaGFpbihQcmludFN0cmVh
bSYgb3V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQor
eworICAgIG91dC5wcmludGYoImNoYWluID0gJXA6IFsiLCBjaGFpbik7CisgICAgYm9vbCBmaXJz
dCA9IHRydWU7CisgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogY3VycmVudFN0cnVj
dHVyZSA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgICAqY3VycmVudFN0cnVjdHVyZTsKKyAgICAg
ICAgICsrY3VycmVudFN0cnVjdHVyZSkgeworICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAg
ICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnRmKCIs
ICIpOworICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGN1cnJlbnRTdHJ1Y3R1
cmUtPmdldCgpLCBpZGVudCk7CisgICAgfQorICAgIG91dC5wcmludGYoIl0iKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiBvdXQsIEV4
ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYgbWFwKQorewor
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBs
b2NhdGlvbjsKKworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihpbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIAorICAgIFVOVVNFRF9QQVJBTShpZGVudCk7IC8v
IHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0Zm9ybSBjb25maWd1
cmF0aW9ucy4KKyAgICAKKyAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2V0T3Bjb2RlSUQo
aW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9hcnJheV9sZW5ndGgpCisgICAgICAg
IG91dC5wcmludGYoIiBsbGludChhcnJheV9sZW5ndGgpIik7CisgICAgZWxzZSBpZiAoU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEKSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KHN0cnVjdHVyZUlEKTsKKyAgICAgICAgb3V0LnByaW50ZigiIGxsaW50KCIpOworICAgICAg
ICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0cnVjdHVyZSwgaWRlbnQpOworICAgICAg
ICBvdXQucHJpbnRmKCIpIik7CisgICAgICAgIGlmIChleGVjLT5pbnRlcnByZXRlcigpLT5nZXRP
cGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lkX3Byb3RvX2xv
YWQpCisgICAgICAgICAgICBvdXQucHJpbnRmKCIgcHJvdG8oJXApIiwgaW5zdHJ1Y3Rpb25bNl0u
dS5wb2ludGVyKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YlB0ciA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7CisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdHViUHRyOworICAgICAgICBpZiAo
c3R1YkluZm8ucmVzZXRCeUdDKQorICAgICAgICAgICAgb3V0LnByaW50KCIgKFJlc2V0IEJ5IEdD
KSIpOworICAgICAgICAKKyAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsKKyAgICAgICAgICAg
IAorICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRyOworICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzcyogc3R1YiA9IG51bGxwdHI7CisgICAgICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgY2FzZSBDYWNoZVR5cGU6Okdl
dEJ5SWRTZWxmOgorICAgICAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOworICAgICAgICAgICAg
YmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoK
KyAgICAgICAgICAgIG91dC5wcmludGYoInN0dWIiKTsKKyAgICAgICAgICAgIHN0dWIgPSBzdHVi
SW5mby51LnN0dWI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYWNoZVR5cGU6
OlVuc2V0OgorICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBv
dXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoYmFzZVN0
cnVjdHVyZSkgeworICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKKyAgICAgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRlbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHN0dWIpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgKnN0
dWIpOworCisgICAgICAgIG91dC5wcmludGYoIikiKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShtYXApOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRD
YWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZv
TWFwJiBtYXApCit7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKSArIGxvY2F0aW9uOworCisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBp
ZGVudGlmaWVyKGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgCisgICAgVU5VU0VEX1BB
UkFNKGlkZW50KTsgLy8gdGVsbCB0aGUgY29tcGlsZXIgdG8gc2h1dCB1cCBpbiBjZXJ0YWluIHBs
YXRmb3JtIGNvbmZpZ3VyYXRpb25zLgorCisgICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9u
WzhdLnUucHV0QnlJZEZsYWdzKTsKKyAgICAKKyAgICBpZiAoU3RydWN0dXJlSUQgc3RydWN0dXJl
SUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEKSB7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlE
KTsKKyAgICAgICAgb3V0LnByaW50KCIgbGxpbnQoIik7CisgICAgICAgIGlmIChTdHJ1Y3R1cmVJ
RCBuZXdTdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJlSUQpIHsKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0
LCAicHJldiIsIHN0cnVjdHVyZSwgaWRlbnQpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIp
OworICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgbmV3U3RydWN0dXJlLCBp
ZGVudCk7CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gaW5zdHJ1Y3Rp
b25bN10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKSkgeworICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCAiKTsKKyAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFpbiwgaWRlbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUo
b3V0LCAic3RydWN0Iiwgc3RydWN0dXJlLCBpZGVudCk7CisgICAgICAgIG91dC5wcmludCgiKSIp
OworICAgIH0KKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViUHRyID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkpIHsKKyAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0dWJQdHI7CisgICAgICAgIGlmIChzdHViSW5mby5y
ZXNldEJ5R0MpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAoUmVzZXQgQnkgR0MpIik7CisgICAg
ICAgIAorICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOworICAgICAgICAKKyAgICAgICAgc3dp
dGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5
SWRSZXBsYWNlOgorICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAiKTsKKyAgICAgICAg
ICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgICAgIG91dC5wcmludCgic3R1Yiwg
IiwgKnN0dWJJbmZvLnUuc3R1Yik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgICAgICBvdXQucHJpbnRmKCJ1bnNl
dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgb3V0LnByaW50ZigiKSIpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKG1hcCk7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50
U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVj
dGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBi
b29sJiBoYXNQcmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIG1hcCkKK3sK
KyAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgaW50IGZ1bmMgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICBpbnQgYXJnQ291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKKyAgICBvdXQucHJpbnQocmVnaXN0
ZXJOYW1lKGRzdCksICIsICIsIHJlZ2lzdGVyTmFtZShmdW5jKSwgIiwgIiwgYXJnQ291bnQsICIs
ICIsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICBvdXQucHJpbnQoIiAodGhpcyBhdCAiLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgwLCAtcmVnaXN0ZXJPZmZzZXQpLCAiKSIpOworICAgIGlmIChj
YWNoZUR1bXBNb2RlID09IER1bXBDYWNoZXMpIHsKKyAgICAgICAgTExJbnRDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGl0WzFdLnUuY2FsbExpbmtJbmZvOworICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLT5sYXN0U2VlbkNhbGxlZSkgeworICAgICAgICAgICAgb3V0LnByaW50ZigKKyAgICAg
ICAgICAgICAgICAiIGxsaW50KCVwLCBleGVjICVwKSIsCisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKSwKKyAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmxhc3RTZWVuQ2FsbGVlLT5leGVjdXRhYmxlKCkpOworICAgICAgICB9CisjaWYgRU5BQkxF
KEpJVCkKKyAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogaW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdp
bihsb2NhdGlvbikpKSB7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBpbmZvLT5s
YXN0U2VlbkNhbGxlZSgpOworICAgICAgICAgICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFyZ2V0LT5leGVjdXRh
YmxlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaml0VHlwZSgpICE9IEpJ
VENvZGU6OkZUTEpJVCkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHN0YXR1cygiLCBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwgIikiKTsKKyNlbHNlCisg
ICAgICAgIFVOVVNFRF9QQVJBTShtYXApOworI2VuZGlmCisgICAgfQorICAgICsraXQ7CisgICAg
KytpdDsKKyAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGlu
Zyk7CisgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworfQorCit2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mIG91dCwg
RXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNv
bnN0IGNoYXIqIG9wKQoreworICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgIGlu
dCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsK
KyAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlk
TmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSk7CisgICAgaXQgKz0gNTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBTb3VyY2UoKQorewor
ICAgIGR1bXBTb3VyY2UoV1RGOjpkYXRhRmlsZSgpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1
bXBTb3VyY2UoUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlz
RnVuY3Rpb25FeGVjdXRhYmxlKCkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCisgICAgICAgICAgICBmdW5jdGlvbkV4
ZWN1dGFibGUtPnBhcmFtZXRlcnNTdGFydE9mZnNldCgpLAorICAgICAgICAgICAgZnVuY3Rpb25F
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgKyAxKTsgLy8gVHlwZSBwcm9maWxp
bmcgZW5kIG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30nLgorICAgICAgICAK
KyAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiAiLCBpbmZlcnJlZE5hbWUoKSwgc291cmNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvdXQucHJpbnQoZXhlY3V0YWJsZS0+c291cmNl
KCkudmlldygpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgpCit7CisgICAg
ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICAvLyBXZSBvbmx5IHVzZSB0aGUgRXhl
Y1N0YXRlKiBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgbGVhZCB0byBKUyBleGVjdXRp
b24sCisgICAgLy8gbGlrZSBjb252ZXJ0aW5nIGEgSlNTdHJpbmcgdG8gYSBTdHJpbmcuIEhlbmNl
IHRoZSBnbG9iYWxFeGVjIGlzIGFwcHJvcHJpYXRlLgorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgCisgICAgc2l6ZV90IGluc3RydWN0aW9u
Q291bnQgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMoKS5z
aXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5pbnRlcnByZXRlcigpLT5nZXRPcGNvZGVJ
RChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQorICAgICAgICArK2luc3RydWN0aW9uQ291
bnQ7CisKKyAgICBvdXQucHJpbnQoKnRoaXMpOworICAgIG91dC5wcmludGYoCisgICAgICAgICI6
ICVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5dGVzOyAlZCBwYXJhbWV0ZXIocyk7ICVkIGNhbGxl
ZSByZWdpc3RlcihzKTsgJWQgdmFyaWFibGUocykiLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAorICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24p
KSwKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZUxvY2FscywgbV9udW1WYXJz
KTsKKyAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgc2NvcGVSZWdpc3RlcigpKTsKKyAgICBv
dXQucHJpbnRmKCJcbiIpOworICAgIAorICAgIFN0dWJJbmZvTWFwIHN0dWJJbmZvczsKKyAgICBD
YWxsTGlua0luZm9NYXAgY2FsbExpbmtJbmZvczsKKyAgICBnZXRTdHViSW5mb01hcChzdHViSW5m
b3MpOworICAgIGdldENhbGxMaW5rSW5mb01hcChjYWxsTGlua0luZm9zKTsKKyAgICAKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIGNv
bnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5lbmQoKTsKKyAgICBmb3IgKGNv
bnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGR1
bXBCeXRlY29kZShvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgc3R1YkluZm9zLCBjYWxsTGlua0luZm9z
KTsKKyAgICAKKyAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIG91dC5w
cmludGYoIlxuSWRlbnRpZmllcnM6XG4iKTsKKyAgICAgICAgc2l6ZV90IGkgPSAwOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgIGlkJXUgPSAlc1xuIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGkpLCBpZGVudGlmaWVyKGkpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChpICE9IG51bWJlck9mSWRlbnRpZmll
cnMoKSk7CisgICAgfQorCisgICAgaWYgKCFtX2NvbnN0YW50UmVnaXN0ZXJzLmlzRW1wdHkoKSkg
eworICAgICAgICBvdXQucHJpbnRmKCJcbkNvbnN0YW50czpcbiIpOworICAgICAgICBzaXplX3Qg
aSA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHN3aXRjaCAo
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAgICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgICAgICAgICAgc291
cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3VyY2UgYXMgZG91Ymxl
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
Ok90aGVyOgorICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0
aW9uID0gIiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aSksIHRvQ1N0cmluZyhtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5kYXRhKCksIHNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICsraTsKKyAgICAg
ICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICB9CisKKyAg
ICBpZiAoc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKSB7
CisgICAgICAgIG91dC5wcmludGYoIlxubV9yZWdleHBzOlxuIik7CisgICAgICAgIHNpemVfdCBp
ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgb3V0LnByaW50ZigiICByZSV1ID0gJXNc
biIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VTdHJpbmcobV91bmxp
bmtlZENvZGUtPnJlZ2V4cChpKSkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAg
fSB3aGlsZSAoaSA8IGNvdW50KTsKKyAgICB9CisKKyAgICBkdW1wRXhjZXB0aW9uSGFuZGxlcnMo
b3V0KTsKKyAgICAKKyAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSkgeworICAgICAgICBvdXQucHJpbnRmKCJTd2l0Y2ggSnVtcCBU
YWJsZXM6XG4iKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7CisgICAgICAgICAgICBpbnQgZW50
cnkgPSAwOworICAgICAgICAgICAgVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0uYnJhbmNoT2Zmc2V0cy5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNldHMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlciwgKytlbnRyeSkgeworICAgICAgICAgICAgICAgIGlmICghKml0
ZXIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIlx0XHQlNGQgPT4gJTA0ZFxuIiwgZW50cnkgKyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbaV0ubWluLCAqaXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIgICAgICB9XG4iKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAo
aSA8IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzLmlzRW1wdHkoKSkgeworICAgICAgICBvdXQucHJpbnRmKCJcblN0cmluZyBTd2l0Y2ggSnVt
cCBUYWJsZXM6XG4iKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7CisgICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuZW5kKCk7Cisg
ICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0u
b2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIGl0ZXItPmtleS0+dXRmOCgpLmRh
dGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiAgICAgIH1cbiIpOworICAgICAgICAgICAgKytpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9y
YXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7CisgICAgfQorCisgICAg
b3V0LnByaW50ZigiXG4iKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmR1bXBFeGNlcHRpb25IYW5k
bGVycyhQcmludFN0cmVhbSYgb3V0KQoreworICAgIGlmIChtX3JhcmVEYXRhICYmICFtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBvdXQucHJpbnRm
KCJcbkV4Y2VwdGlvbiBIYW5kbGVyczpcbiIpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworICAgICAgICAgICAgb3V0LnByaW50ZigiXHQgJWQ6
IHsgc3RhcnQ6IFslNGRdIGVuZDogWyU0ZF0gdGFyZ2V0OiBbJTRkXSB9ICVzXG4iLAorICAgICAg
ICAgICAgICAgIGkgKyAxLCBoYW5kbGVyLnN0YXJ0LCBoYW5kbGVyLmVuZCwgaGFuZGxlci50YXJn
ZXQsIGhhbmRsZXIudHlwZU5hbWUoKSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0gd2hp
bGUgKGkgPCBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKSk7CisgICAgfQor
fQorCit2b2lkIENvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQs
IGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCit7CisgICAgaWYgKGhhc1ByaW50ZWRQcm9maWxp
bmcpIHsKKyAgICAgICAgb3V0LnByaW50KCI7ICIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIG91dC5wcmludCgiICAgICIpOworICAgIGhhc1ByaW50ZWRQcm9maWxpbmcgPSB0
cnVlOworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICAr
K2l0OworICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5wcm9maWxlLT5icmllZkRlc2Ny
aXB0aW9uKGxvY2tlcik7CisgICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OworICAgIG91dC5wcmludChkZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1w
QXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwg
Ym9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIAorICAgICsraXQ7CisgICAgaWYgKCFpdC0+dS5hcnJheVByb2Zp
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUuYXJy
YXlQcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKGxvY2tlciwgdGhpcyk7CisgICAgaWYgKCFkZXNj
cmlwdGlvbi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJlZ2luRHVtcFByb2ZpbGlu
ZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIG91dC5wcmludChkZXNjcmlwdGlvbik7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wUmFyZUNhc2VQcm9maWxlKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSwgYm9vbCYgaGFz
UHJpbnRlZFByb2ZpbGluZykKK3sKKyAgICBpZiAoIXByb2ZpbGUgfHwgIXByb2ZpbGUtPm1fY291
bnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CisgICAgb3V0LnByaW50KG5hbWUsIHByb2ZpbGUtPm1fY291bnRl
cik7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wQXJpdGhQcm9maWxlKFByaW50U3RyZWFtJiBv
dXQsIEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKK3sK
KyAgICBpZiAoIXByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBiZWdpbkR1bXBQ
cm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICBvdXQucHJpbnQoInJlc3Vs
dHM6ICIsICpwcm9maWxlKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnByaW50TG9jYXRpb25BbmRP
cChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKQoreworICAgIG91dC5wcmludGYoIlslNGRdICUtMTdz
ICIsIGxvY2F0aW9uLCBvcCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpwcmludExvY2F0aW9uT3BB
bmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQg
bG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQgb3Bl
cmFuZCkKK3sKKyAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
IG9wKTsKKyAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShvcGVyYW5kKS5kYXRhKCkp
OworfQorCit2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAorICAgIFByaW50U3RyZWFtJiBv
dXQsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luLCBjb25zdCBJbnN0
cnVjdGlvbiomIGl0LAorICAgIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5mb3MsIGNvbnN0IENh
bGxMaW5rSW5mb01hcCYgY2FsbExpbmtJbmZvcykKK3sKKyAgICBpbnQgbG9jYXRpb24gPSBpdCAt
IGJlZ2luOworICAgIGJvb2wgaGFzUHJpbnRlZFByb2ZpbGluZyA9IGZhbHNlOworICAgIE9wY29k
ZUlEIG9wY29kZSA9IGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29k
ZSk7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBvcF9lbnRlcjogeworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZW50
ZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0
X3Njb3BlOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImdldF9zY29wZSIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9zY29wZWRf
YXJndW1lbnRzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVkX2FyZ3VtZW50czog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfY2xvbmVk
X2FyZ3VtZW50cyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2FyZ3VtZW50X2NvdW50OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFyZ3VtZW50X2NvdW50IiwgcjApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50T2Zmc2V0ID0g
KCsraXQpLT51LnVuc2lnbmVkVmFsdWU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfcmVzdCIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1lbnRzT2Zmc2V0OiAl
dSIsIGFyZ3VtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImdldF9yZXN0X2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJndW1lbnRPZmZzZXQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewor
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZmVycmVkSW5s
aW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNh
Y2hlZEZ1bmN0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfdGhpcyIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAldSwgJXUiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHksIGNhY2hl
ZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfdG9fdGhpczogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJ0b190aGlzIiwgcjApOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSAoKytpdCktPnUuc3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgY2FjaGUoc3RydWN0ID0gIiwgUmF3
UG9pbnRlcihzdHJ1Y3R1cmUpLCAiKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCIsICIsICgr
K2l0KS0+dS50b1RoaXNTdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jaGVja190ZHo6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5k
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfY2hlY2tfdGR6IiwgcjApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7CisgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19vYmplY3Qi
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAldSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAgICsraXQ7IC8vIFNraXAg
b2JqZWN0IGFsbG9jYXRpb24gcHJvZmlsZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19hcnJheSIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3YpLmRhdGEoKSwgYXJnYyk7CisgICAgICAgICAgICAr
K2l0OyAvLyBTa2lwIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZTogeworICAg
ICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGxl
bmd0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5X3dpdGhfc2l6ZSIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUobGVuZ3RoKS5kYXRhKCkpOworICAgICAgICAgICAgKytpdDsgLy8gU2tpcCBhcnJh
eSBhbGxvY2F0aW9uIHByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBhcmd2ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5
X2J1ZmZlciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAlZCIsIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7CisgICAgICAgICAgICArK2l0OyAvLyBTa2lw
IGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcmUwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJuZXdfcmVnZXhwIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKHIwID49MCAmJiByMCA8IChpbnQpbV91
bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgcmVnZXhwTmFtZShyZTAsIHJlZ2V4cChyZTApKS5kYXRhKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoImJhZF9yZWdleHAoJWQpIiwgcmUw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbW92OiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibW92Iik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9m
aWxlX3R5cGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgKytpdDsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICArK2l0OworICAg
ICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX3Byb2ZpbGVfdHlwZSIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OiB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9ICgrK2l0KS0+dS5i
YXNpY0Jsb2NrTG9jYXRpb247CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwcm9maWxlX2NvbnRyb2xfZmxvdyIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiWyVkLCAlZF0iLCBiYXNpY0Jsb2NrTG9jYXRpb24tPnN0YXJ0T2Zmc2V0KCks
IGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9ub3Q6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5vdCIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKKyAgICAgICAgICAgIHByaW50VW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxX251bGwiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVxOiB7CisgICAgICAgICAgICBwcmlu
dEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7CisgICAgICAgICAg
ICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXFfbnVsbCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zdHJpY3RlcTogewor
ICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN0cmlj
dGVxIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25z
dHJpY3RlcTogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm5zdHJpY3RlcSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9sZXNzOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibGVzcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9sZXNzZXE6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJsZXNzZXEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXIiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOiB7CisgICAgICAgICAgICBw
cmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ3JlYXRlcmVxIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luYzogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpbmMiLCBy
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlYzog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJkZWMiLCByMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3RvX251bWJlcjogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAidG9fbnVtYmVyIik7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmco
b3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX3RvX3N0cmluZzogeworICAgICAgICAgICAgcHJpbnRVbmFy
eU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fc3RyaW5nIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVnYXRlIik7CisgICAgICAg
ICAgICArK2l0OyAvLyBvcF9uZWdhdGUgaGFzIGFuIGV4dHJhIG9wZXJhbmQgZm9yIHRoZSBBcml0
aFByb2ZpbGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2FkZDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImFkZCIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbXVsOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibXVsIik7CisgICAgICAgICAgICArK2l0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9kaXY6IHsKKyAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkaXYiKTsKKyAgICAg
ICAgICAgICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX21vZDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm1vZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9wb3c6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwb3ciKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3Bfc3ViOiB7CisgICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAic3ViIik7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKKyAgICAgICAgICAgIHByaW50Qmlu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsc2hpZnQiKTsKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7Cisg
ICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicnNoaWZ0
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Vyc2hp
ZnQ6IHsKKyAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJ1cnNoaWZ0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2JpdGFuZDogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImJpdGFuZCIpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CisgICAgICAgICAgICBwcmlu
dEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYml0eG9yIik7CisgICAgICAgICAg
ICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9i
aXRvcjogeworICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImJpdG9yIik7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlOiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJvdmVycmlkZXNfaGFzX2luc3RhbmNlIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluc3RhbmNlb2YiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2Vv
Zl9jdXN0b206IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiaW5zdGFuY2VvZl9jdXN0b20iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIzKS5kYXRhKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF91bnNpZ25lZDog
eworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidW5z
aWduZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
dHlwZW9mOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJ0eXBlb2YiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfaXNfZW1wdHk6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgImlzX2VtcHR5Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfdW5kZWZpbmVkIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2Jvb2xlYW46IHsKKyAgICAgICAg
ICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2Jvb2xlYW4iKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaXNfbnVtYmVy
OiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJp
c19udW1iZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfaXNfY2VsbF93aXRoX3R5cGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgdHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfY2VsbF93aXRoX3R5cGUiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKKyAgICAgICAgICAgIHBy
aW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVjdCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVs
bDogeworICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
aXNfb2JqZWN0X29yX251bGwiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2Z1bmN0aW9uIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2luOiB7CisgICAgICAgICAgICBwcmludEJpbmFy
eU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW4iKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDogeworICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRy
eV9nZXRfYnlfaWQiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdp
c3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAs
IGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGlu
ZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgICAgICBjYXNlIG9wX2dldF9i
eV9pZF9wcm90b19sb2FkOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDoKKyAgICAg
ICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7CisgICAgICAgICAgICBwcmludEdldEJ5SWRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCk7CisgICAgICAgICAgICBwcmludEdldEJ5SWRDYWNo
ZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBzdHViSW5mb3MpOworICAgICAgICAgICAgZHVt
cFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlz
OiB7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJnZXRfYnlfaWRfd2l0aF90aGlzIik7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVk
UHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMyA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbF93aXRoX3RoaXMiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIzKS5kYXRhKCkpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQs
IGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIHByaW50UHV0QnlJZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkIik7CisgICAgICAgICAgICBwcmludFB1
dEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGxvY2F0aW9uLCBzdHViSW5mb3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRf
YnlfaWRfd2l0aF90aGlzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaWRO
YW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF93aXRoX3RoaXM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMyA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAicHV0X2J5X3ZhbF93aXRoX3RoaXMiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIzKS5k
YXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9w
dXRfZ2V0dGVyX2J5X2lkOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBp
ZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcl9i
eV9pZDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAicHV0X3NldHRlcl9ieV9pZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
ZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihp
ZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lk
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBuMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRh
KCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfZ2V0
dGVyX2J5X3ZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBu
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfZ2V0dGVyX2J5X3ZhbCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFsOiB7CisgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9zZXR0ZXJfYnlf
dmFsIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcyIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFt
ZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVmaW5lX2RhdGFfcHJvcGVydHkiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIzKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHI0ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMykuZGF0YSgpLCByZWdpc3Rlck5hbWUocjQpLmRhdGEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImRlbF9ieV9pZCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgaWROYW1lKGlk
MCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfdmFsIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7
CisgICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2Zp
bGluZyk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRl
ZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3B1dF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBp
bnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV92YWwiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKKyAgICAgICAgICAgIGR1
bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6
IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCkt
PnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxv
Y2F0aW9uLCBpdCwgInB1dF9ieV92YWxfZGlyZWN0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7CisgICAgICAgICAgICBkdW1wQXJyYXlQ
cm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRl
bF9ieV92YWwiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2luZGV4OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4wID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pbmRleCIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICV1LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBu
MCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9qbXA6IHsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImptcCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJWQoLT4lZCki
LCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKKyAgICAgICAgICAgIHByaW50Q29uZGl0aW9u
YWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImp0cnVlIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2pmYWxzZTogeworICAgICAg
ICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9u
LCAiamZhbHNlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2plcV9udWxsOiB7CisgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChvdXQsIGV4
ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqZXFfbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKKyAgICAgICAgICAgIHBy
aW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpuZXFf
bnVsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9q
bmVxX3B0cjogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIgPSAoKytpdCktPnUuc3BlY2lhbFBvaW50
ZXI7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmVxX3B0
ciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkICglcCksICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHBvaW50ZXIsIG1fZ2xvYmFsT2JqZWN0LT5hY3R1YWxQb2lu
dGVyRm9yKHBvaW50ZXIpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICsraXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2ps
ZXNzOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAiamxlc3MiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamxl
c3NlcSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lz
dGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2Nh
dGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2pncmVhdGVyOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamdyZWF0ZXIiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiamdyZWF0ZXJlcSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2pubGVzczogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpubGVz
cyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlv
biArIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2pubGVzc2VxOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5sZXNzZXEiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6IHsKKyAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJqbmdyZWF0ZXIiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpuZ3Jl
YXRlcmVxIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQpIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBvZmZzZXQsIGxv
Y2F0aW9uICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsb29wX2hpbnQiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfd2F0Y2hkb2c6IHsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIndhdGNoZG9nIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJsb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImxvZ19zaGFkb3dfY2hpY2tlbl90YWlsIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAic3dpdGNoX2ltbSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJWQsICVkKC0+
JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9uICsgZGVmYXVsdFRh
cmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjogeworICAg
ICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
c2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRjaF9jaGFyIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCksICVzIiwgdGFibGVJbmRleCwgZGVm
YXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2NydXRp
bmVlUmVnaXN0ZXIpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKKyAgICAgICAgICAgIGludCB0YWJsZUluZGV4
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZGVmYXVsdFRhcmdldCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJlZ2lzdGVyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfc3RyaW5nIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlZCwgJWQoLT4lZCksICVzIiwgdGFibGVJbmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRpb24g
KyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19mdW5j
OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJuZXdfZnVuYyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
LCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCks
IGYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3
X2dlbmVyYXRvcl9mdW5jOiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1bmMiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOiB7CisgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfYXN5
bmNfZnVuYyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJuZXdfZnVuY19leHAiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
ZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBm
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19n
ZW5lcmF0b3JfZnVuY19leHA6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19nZW5lcmF0b3JfZnVuY19leHAiKTsK
KyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4cDogeworICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibmV3X2FzeW5jX2Z1bmNfZXhwIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMs
IGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
ZjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zZXRf
ZnVuY3Rpb25fbmFtZTogeworICAgICAgICAgICAgaW50IGZ1bmNSZWcgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBuYW1lUmVnID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzZXRf
ZnVuY3Rpb25fbmFtZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKGZ1bmNSZWcpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKG5hbWVSZWcpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAg
ICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbCIsIER1
bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3MpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6IHsKKyAgICAg
ICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGFpbF9jYWxsIiwg
RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAg
ICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsX2V2YWwi
LCBEb250RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAgaW50IHJlc3VsdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGNhbGxlZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGZp
cnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgdmFy
QXJnT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICArK2l0OworICAgICAg
ICAgICAgY29uc3QgY2hhciogb3BOYW1lOworICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBvcF9j
YWxsX3ZhcmFyZ3MpCisgICAgICAgICAgICAgICAgb3BOYW1lID0gImNhbGxfdmFyYXJncyI7Cisg
ICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCisgICAg
ICAgICAgICAgICAgb3BOYW1lID0gImNvbnN0cnVjdF92YXJhcmdzIjsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKKyAgICAgICAgICAgICAgICBv
cE5hbWUgPSAidGFpbF9jYWxsX3ZhcmFyZ3MiOworICAgICAgICAgICAgZWxzZSBpZiAob3Bjb2Rl
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBvcE5h
bWUgPSAidGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzIjsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wTmFtZSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcywgJWQsICVkIiwgcmVnaXN0ZXJO
YW1lKHJlc3VsdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoY2FsbGVlKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZSh0aGlzVmFsdWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3VtZW50cykuZGF0YSgpLCBm
aXJzdEZyZWVSZWdpc3RlciwgdmFyQXJnT2Zmc2V0KTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVBy
b2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9yZXQ6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmV0IiwgcjApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAg
ICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY29uc3RydWN0
IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZvcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N0cmNhdDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBjb3VudCA9ICgrK2l0KS0+dS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAic3RyY2F0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBjb3VudCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX3ByaW1p
dGl2ZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX3ByaW1pdGl2ZSIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAgICAgICAgICBpbnQgZHN0
ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRh
dGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJheVByb2ZpbGU7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAl
cywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgYXJyYXlQcm9maWxlKTsKKyAg
ICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpIC0g
MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBlbnVt
ZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSIpOwor
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0
eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSk7CisgICAgICAg
ICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpIC0gMTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX2dlbmVy
aWNfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5
TmFtZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2dl
bmVyaWNfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBpbmRleCA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBlbnVtZXJh
dG9yID0gaXRbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gaXRbNl0udS5wcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2RpcmVjdF9wbmFtZSIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVyTmFtZShkc3QpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFt
ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1l
cmF0b3IpLmRhdGEoKSwgcHJvZmlsZSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RI
KG9wX2dldF9kaXJlY3RfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAg
ICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRb
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAib3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOiB7CisgICAgICAg
ICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0
b3IgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAg
ICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAg
ICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0g
aXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShp
bmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfdG9faW5k
ZXhfc3RyaW5nKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX3B1c2hfd2l0aF9zY29wZTogeworICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG5ld1Njb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgY3VycmVudFNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXNo
X3dpdGhfc2NvcGUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuZXdTY29wZSkuZGF0YSgpLCByZWdp
c3Rlck5hbWUoY3VycmVudFNjb3BlKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcGFyZW50U2NvcGUg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9wYXJlbnRfc2NvcGUiKTsKKyAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHBhcmVudFNjb3BlKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogeworICAgICAgICAgICAg
aW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNjb3BlID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc3ltYm9sVGFibGUgPSAoKytpdCktPnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbml0aWFsVmFsdWUgPSAoKytpdCktPnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgImNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50Iik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzLCAlcyIsIAorICAgICAgICAgICAgICAgIHJlZ2lzdGVyTmFtZShkc3QpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzeW1ib2xUYWJs
ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5pdGlhbFZhbHVlKS5kYXRhKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNhdGNoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90aHJvdzogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0aHJv
dyIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
dGhyb3dfc3RhdGljX2Vycm9yOiB7CisgICAgICAgICAgICBpbnQgazAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIEVycm9yVHlwZSBrMSA9IHN0YXRpY19jYXN0PEVycm9yVHlwZT4o
KCsraXQpLT51LnVuc2lnbmVkVmFsdWUpOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3dfc3RhdGljX2Vycm9yIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgIiwgY29uc3RhbnROYW1lKGswKS5kYXRhKCkpOworICAgICAg
ICAgICAgb3V0LnByaW50KGsxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZGVidWc6IHsKKyAgICAgICAgICAgIGludCBkZWJ1Z0hvb2tUeXBlID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaGFzQnJlYWtwb2ludEZsYWcgPSAoKytp
dCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImRlYnVnIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQi
LCBkZWJ1Z0hvb2tOYW1lKGRlYnVnSG9va1R5cGUpLCBoYXNCcmVha3BvaW50RmxhZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2Fzc2VydDogeworICAg
ICAgICAgICAgaW50IGNvbmRpdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGxpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFzc2VydCIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVkIiwgcmVnaXN0ZXJOYW1lKGNvbmRpdGlvbikuZGF0YSgpLCBsaW5lKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW5kOiB7Cisg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVu
ZCIsIHIwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgc2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KCgrK2l0KS0+dS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGludCBkZXB0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAg
dm9pZCogcG9pbnRlciA9ICgrK2l0KS0+dS5wb2ludGVyOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9zY29wZSIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgPCVzPiwgJWQsICVwIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUoaWQwLCBp
ZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZVR5cGVOYW1lKHJlc29sdmVUeXBlKSwgZGVw
dGgsIHBvaW50ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIEdldFB1dEluZm8g
Z2V0UHV0SW5mbyA9IEdldFB1dEluZm8oKCsraXQpLT51Lm9wZXJhbmQpOworICAgICAgICAgICAg
KytpdDsgLy8gU3RydWN0dXJlCisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9ICgrK2l0KS0+dS5v
cGVyYW5kOyAvLyBPcGVyYW5kCisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9zY29wZSIpOworICAgICAgICAgICAgb3V0LnBy
aW50KHJlZ2lzdGVyTmFtZShyMCksICIsICIsIHJlZ2lzdGVyTmFtZShyMSkpOworICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFYKQorICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKSk7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgZ2V0UHV0SW5mby5vcGVyYW5kKCksICI8Iiwg
cmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSksICJ8IiwgcmVzb2x2ZVR5
cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSksICJ8IiwgaW5pdGlhbGl6YXRpb25Nb2Rl
TmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSwgIj4sICIsIG9wZXJhbmQpOwor
ICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRf
dG9fc2NvcGU6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIx
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBHZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKKyAgICAgICAgICAgICsraXQ7IC8vIFN0
cnVjdHVyZQorICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUub3BlcmFuZDsgLy8g
T3BlcmFuZAorICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAicHV0X3RvX3Njb3BlIik7CisgICAgICAgICAgICBvdXQucHJpbnQocmVnaXN0ZXJO
YW1lKHIwKSk7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlkMCkgPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIGFub255bW91cyIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCBpZE5hbWUoaWQw
LCBpZGVudGlmaWVyKGlkMCkpKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiLCByZWdpc3Rl
ck5hbWUocjEpLCAiLCAiLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSwgIjwiLCByZXNvbHZlTW9kZU5h
bWUoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpKSwgInwiLCByZXNvbHZlVHlwZU5hbWUoZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpKSwgInwiLCBpbml0aWFsaXphdGlvbk1vZGVOYW1lKGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLCAiPiwgPHN0cnVjdHVyZT4sICIsIG9wZXJhbmQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9h
cmd1bWVudHM6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9hcmd1bWVudHMiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCk7CisgICAgICAgICAgICBkdW1wVmFsdWVQcm9m
aWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6IHsKKyAgICAgICAg
ICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IG9mZnNldCA9
ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJwdXRfdG9fYXJndW1lbnRzIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJWQs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIG9mZnNldCwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
ZHVtcFJhcmVDYXNlUHJvZmlsZShvdXQsICJyYXJlIGNhc2U6ICIsIHJhcmVDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgewor
ICAgICAgICBkdW1wQXJpdGhQcm9maWxlKG91dCwgYXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQobG9jYXRpb24pLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB9CisgICAgCisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgVmVjdG9yPERGRzo6RnJlcXVlbnRFeGl0U2l0ZT4gZXhpdFNpdGVz
ID0gZXhpdFByb2ZpbGUoKS5leGl0U2l0ZXNGb3IobG9jYXRpb24pOworICAgIGlmICghZXhpdFNp
dGVzLmlzRW1wdHkoKSkgeworICAgICAgICBvdXQucHJpbnQoIiAhISBmcmVxdWVudCBleGl0czog
Iik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4aXRTaXRlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgZXhpdFNpdGVzW2ldLmtpbmQoKSwgIiAiLCBleGl0U2l0ZXNbaV0uaml0VHlwZSgpKTsK
KyAgICB9CisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICBVTlVTRURfUEFSQU0obG9jYXRp
b24pOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorICAgIG91dC5wcmludCgiXG4iKTsKK30K
Kwordm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwKKyAgICBjb25zdCBTdHViSW5mb01hcCYgc3R1YkluZm9z
LCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCit7CisgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogaXQgPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVPZmZzZXQ7CisgICAg
ZHVtcEJ5dGVjb2RlKG91dCwgZXhlYywgaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgaXQsIHN0dWJJ
bmZvcywgY2FsbExpbmtJbmZvcyk7Cit9CisKKyNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RP
UihtYWNybykgXAorICAgIG1hY3JvKGluc3RydWN0aW9ucykgXAorICAgIG1hY3JvKGNhbGxMaW5r
SW5mb3MpIFwKKyAgICBtYWNybyhsaW5rZWRDYWxsZXJMaXN0KSBcCisgICAgbWFjcm8oaWRlbnRp
ZmllcnMpIFwKKyAgICBtYWNybyhmdW5jdGlvbkV4cHJlc3Npb25zKSBcCisgICAgbWFjcm8oY29u
c3RhbnRSZWdpc3RlcnMpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUl9SQVJFX0RB
VEEobWFjcm8pIFwKKyAgICBtYWNybyhyZWdleHBzKSBcCisgICAgbWFjcm8oZnVuY3Rpb25zKSBc
CisgICAgbWFjcm8oZXhjZXB0aW9uSGFuZGxlcnMpIFwKKyAgICBtYWNybyhzd2l0Y2hKdW1wVGFi
bGVzKSBcCisgICAgbWFjcm8oc3RyaW5nU3dpdGNoSnVtcFRhYmxlcykgXAorICAgIG1hY3JvKGV2
YWxDb2RlQ2FjaGUpIFwKKyAgICBtYWNybyhleHByZXNzaW9uSW5mbykgXAorICAgIG1hY3JvKGxp
bmVJbmZvKSBcCisgICAgbWFjcm8oY2FsbFJldHVybkluZGV4VmVjdG9yKQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBWZWN0b3I8VD4mIHZl
Y3RvcikKK3sKKyAgICByZXR1cm4gdmVjdG9yLmNhcGFjaXR5KCkgKiBzaXplb2YoVCk7Cit9CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIFB1dFRvU2NvcGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVE
ZXRhaWwgeworcHVibGljOgorICAgIFB1dFRvU2NvcGVGaXJlRGV0YWlsKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCisgICAgICAgICwgbV9pZGVudChpZGVudCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgb3V0LnByaW50KCJMaW5raW5nIHB1dF90b19zY29wZSBpbiAiLCBGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wKGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCkpKSwgIiBmb3IgIiwgbV9pZGVudCk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIGNvbnN0IElkZW50aWZpZXImIG1faWRl
bnQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2Rl
QmxvY2smIG90aGVyKQorICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9i
YWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCisgICAgLCBtX251bUNhbGxlZUxvY2Fscyhv
dGhlci5tX251bUNhbGxlZUxvY2FscykKKyAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMp
CisgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorI2lmIEVOQUJMRShKSVQpCisg
ICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQor
I2VuZGlmCisgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
KGZhbHNlKQorICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikKKyAg
ICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQorICAgICwgbV9jb2RlVHlw
ZShvdGhlci5tX2NvZGVUeXBlKQorICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIHRo
aXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQorICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRl
bWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQor
ICAgICwgbV9udW1CcmVha3BvaW50cygwKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVy
Lm1fdm0sIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQorICAgICwgbV92bShv
dGhlci5tX3ZtKQorICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCisg
ICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKKyAgICAsIG1fc2NvcGVS
ZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0ZXIpCisgICAgLCBtX2hhc2gob3RoZXIubV9oYXNo
KQorICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCisgICAgLCBtX3NvdXJjZU9mZnNldChv
dGhlci5tX3NvdXJjZU9mZnNldCkKKyAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KG90aGVy
Lm1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhl
ci5tX2NvbnN0YW50UmVnaXN0ZXJzKQorICAgICwgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCisgICAg
LCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQorICAgICwgbV9mdW5jdGlv
bkV4cHJzKG90aGVyLm1fZnVuY3Rpb25FeHBycykKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkK
KyAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKDApCisgICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6OmNocm9ubzo6c3Rl
YWR5X2Nsb2NrOjpub3coKSkKK3sKKyAgICBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZC5zdG9y
ZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisKKyAgICBBU1NFUlQoaGVhcCgp
LT5pc0RlZmVycmVkKCkpOworICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgpKTsK
KworICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBD
b2RlQmxvY2smIG90aGVyKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAg
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICBqaXRBZnRlcldhcm1VcCgpOworCisgICAgaWYg
KG90aGVyLm1fcmFyZURhdGEpIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OworICAgICAgICAKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyA9IG90
aGVyLm1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7CisgICAgICAgIG1fcmFyZURhdGEt
Pm1fY29uc3RhbnRCdWZmZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnM7
CisgICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURh
dGEtPm1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
OworICAgIH0KKyAgICAKKyAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOworfQor
CitDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywKKyAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQorICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQorICAgICwgbV9n
bG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBzY29wZS0+Z2xv
YmFsT2JqZWN0KCkpCisgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+
bV9udW1DYWxsZWVMb2NhbHMpCisgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm1f
bnVtVmFycykKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisjaWYgRU5BQkxF
KEpJVCkKKyAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxO
b3RTZXQpCisjZW5kaWYKKyAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQorICAg
ICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxl
ZFdpdGhGVEwoZmFsc2UpCisgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSkKKyAgICAsIG1faXNTdHJpY3RNb2RlKHVubGlua2VkQ29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKSkKKyAgICAsIG1fY29kZVR5cGUodW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkpCisgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhp
cywgdW5saW5rZWRDb2RlQmxvY2spCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNl
KQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251
bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQorICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9j
ay0+dm0oKSkKKyAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT50aGlzUmVn
aXN0ZXIoKSkKKyAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+c2NvcGVS
ZWdpc3RlcigpKQorICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCisgICAgLCBtX3NvdXJj
ZU9mZnNldChzb3VyY2VPZmZzZXQpCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChmaXJz
dExpbmVDb2x1bW5PZmZzZXQpCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigwKQorICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6
bm93KCkpCit7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZlcnJl
ZCgpKTsKKyAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CisKKyAgICBBU1NF
UlQobV9zb3VyY2UpOworICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAorICAgIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKworICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250
cm9sRmxvd1Byb2ZpbGVyKCkpCisgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgp
LT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBvd25l
ckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCBvd25lckV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CisKKyAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSwgdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpKTsKKyAgICBpZiAodW5saW5rZWRD
b2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
c1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5k
ZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1RpbWVDb25zdGFudENvdW50OyBpKyspIHsKKyAgICAg
ICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0gc3RhdGljX2Nhc3Q8TGlua1RpbWVDb25zdGFudD4o
aSk7CisgICAgICAgIGlmICh1bnNpZ25lZCByZWdpc3RlckluZGV4ID0gdW5saW5rZWRDb2RlQmxv
Y2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKQorICAgICAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xv
YmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNsb25lZCBzeW1ib2wgdGFibGUgZm9yIHRoZSBtb2R1
bGUgZW52aXJvbm1lbnQgc2luY2Ugd2UgbmVlZCB0byBpbnN0YW50aWF0ZQorICAgIC8vIHRoZSBt
b2R1bGUgZW52aXJvbm1lbnRzIGJlZm9yZSBsaW5raW5nIHRoZSBjb2RlIGJsb2NrLiBXZSByZXBs
YWNlIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlIHdpdGggdGhlIGFscmVhZHkgY2xvbmVkIG9uZS4K
KyAgICBpZiAoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jayo+KHVubGlua2VkQ29kZUJsb2NrKSkgeworICAgICAgICBTeW1ib2xUYWJsZSogY2xvbmVk
U3ltYm9sVGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUpLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCk7CisgICAgICAgIGlmIChtX3Zt
LT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBjbG9uZWRTeW1ib2xU
YWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAgfQorICAgICAg
ICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLT5tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgpLCBjbG9uZWRTeW1i
b2xUYWJsZSk7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRVcGRhdGVGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUgPSB2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCk7
CisgICAgbV9mdW5jdGlvbkRlY2xzID0gUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxGdW5j
dGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xz
KCkpOworICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
RnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJs
b2NrLT5mdW5jdGlvbkRlY2woaSk7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUpCisgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUo
KS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICBtX2Z1bmN0aW9uRGVj
bHNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93
bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICB9CisKKyAgICBtX2Z1bmN0aW9uRXhwcnMg
PSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+KHVubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CisgICAgZm9yIChzaXplX3Qg
Y291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
dW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsK
KyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSkKKyAgICAg
ICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFu
Z2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQ
cm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdF
bmRPZmZzZXQoKSk7CisgICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIHRoaXMs
IHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2Uo
KSkpOworICAgIH0KKworICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURhdGEoKSkg
eworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzaXpl
X3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXJDb3VudCgpKSB7Cisg
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5ncm93KGNvdW50KTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpDb25zdGFudEJ1ZmZlciYgYnVmZmVyID0g
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGkpOworICAgICAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2ldID0gYnVmZmVyOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5t
X2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVubGlua2VkQ29kZUJsb2NrLT5l
eGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVy
ID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKyNpZiBFTkFCTEUoSklUKQor
ICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsKKyNlbHNlCisgICAgICAgICAg
ICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7CisjZW5kaWYKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5ncm93KGNvdW50KTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAg
ICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0
b3IgcHRyID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZz
ZXRUYWJsZS5iZWdpbigpOworICAgICAgICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
OjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdW5saW5rZWRDb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRUYWJsZS5lbmQoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKDsgcHRyICE9IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgT2Zmc2V0
TG9jYXRpb24gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYnJhbmNoT2Zmc2V0
ID0gcHRyLT52YWx1ZS5icmFuY2hPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5hZGQocHRyLT5rZXks
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1w
VGFibGVzLmdyb3coY291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHNv
dXJjZVRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShpKTsKKyAgICAg
ICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFyZURhdGEtPm1fc3dp
dGNoSnVtcFRhYmxlc1tpXTsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUuYnJhbmNoT2Zmc2V0
cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7CisgICAgICAgICAgICAgICAgZGVzdFRhYmxl
Lm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEFsbG9jYXRlIG1ldGFkYXRhIGJ1ZmZlcnMgZm9yIHRoZSBieXRlY29kZQorICAg
IGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkxMaW50Q2FsbExp
bmtJbmZvcygpKQorICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcyA9IFJlZkNvdW50ZWRBcnJh
eTxMTEludENhbGxMaW5rSW5mbz4oc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygpKQorICAgICAgICBtX2FycmF5UHJv
ZmlsZXMuZ3JvdyhzaXplKTsKKyAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygpKQorICAgICAgICBtX2FycmF5QWxs
b2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PEFycmF5QWxsb2NhdGlvblByb2ZpbGU+
KHNpemUpOworICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSkKKyAgICAgICAgbV92YWx1ZVByb2ZpbGVzID0gUmVmQ291bnRlZEFy
cmF5PFZhbHVlUHJvZmlsZT4oc2l6ZSk7CisgICAgaWYgKHNpemVfdCBzaXplID0gdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzKCkpCisgICAgICAgIG1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlPihzaXplKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc2V0Q2FsbGVlU2F2ZVJl
Z2lzdGVycyhSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisjZW5kaWYKKworICAgIC8vIENvcHkgYW5kIHRyYW5zbGF0ZSB0aGUgVW5saW5rZWRJbnN0cnVj
dGlvbnMKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmNvdW50KCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbTo6
UmVhZGVyIGluc3RydWN0aW9uUmVhZGVyKHVubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSk7CisKKyAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNlZCBtb2R1bGUgZW52
aXJvbm1lbnRzLgorICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+IHN0cm9uZ2x5UmVm
ZXJlbmNlZE1vZHVsZUVudmlyb25tZW50czsKKworICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQpOworCisgICAgdW5zaWduZWQgdmFs
dWVQcm9maWxlQ291bnQgPSAwOworICAgIGF1dG8gbGlua1ZhbHVlUHJvZmlsZSA9IFsmXSh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgb3BMZW5ndGgpIHsKKyAgICAgICAgdW5zaWdu
ZWQgdmFsdWVQcm9maWxlSW5kZXggPSB2YWx1ZVByb2ZpbGVDb3VudCsrOworICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3ZhbHVlUHJvZmlsZUluZGV4XTsK
KyAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAg
ICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7CisgICAgICAgIGlu
c3RydWN0aW9uc1tieXRlY29kZU9mZnNldCArIG9wTGVuZ3RoIC0gMV0gPSBwcm9maWxlOworICAg
IH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhaW5zdHJ1Y3Rpb25SZWFkZXIuYXRFbmQo
KTsgKSB7CisgICAgICAgIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb24qIHBjID0gaW5zdHJ1Y3Rp
b25SZWFkZXIubmV4dCgpOworCisgICAgICAgIHVuc2lnbmVkIG9wTGVuZ3RoID0gb3Bjb2RlTGVu
Z3RoKHBjWzBdLnUub3Bjb2RlKTsKKworICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSB2bS5pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlKHBjWzBdLnUub3Bjb2RlKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDE7IGogPCBvcExlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMy
X3QpICE9IHNpemVvZihpbnRwdHJfdCkpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyBqXS51LnBvaW50ZXIgPSAwOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9w
ZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChwY1sw
XS51Lm9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7Cisg
ICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBB
cnJheVByb2ZpbGUoaSk7CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGgg
LSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzOgorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgorICAg
ICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJ
bmRleCA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVBy
b2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQcm9maWxlc1thcnJh
eVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
OgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CisgICAgICAgIGNhc2Ugb3Bf
dHJ5X2dldF9ieV9pZDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKKyAg
ICAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6CisgICAgICAgIGNhc2Ugb3BfdG9fbnVt
YmVyOiB7CisgICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewor
ICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0g
QXJyYXlQcm9maWxlKGkpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAt
IDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OiB7Cisg
ICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBB
cnJheVByb2ZpbGUoaSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0g
MV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgICAgIGNh
c2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKKyAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9z
aXplOiB7CisgICAgICAgICAgICBpbnQgYXJyYXlBbGxvY2F0aW9uUHJvZmlsZUluZGV4ID0gcGNb
b3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9w
TGVuZ3RoIC0gMV0gPSAmbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlc1thcnJheUFsbG9jYXRpb25Q
cm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OiB7CisgICAgICAgICAgICBpbnQgb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOworICAgICAgICAgICAgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlID0gJm1fb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVzW29iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXhdOworICAgICAgICAg
ICAgaW50IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFu
ZDsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU7CisgICAgICAgICAgICBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+
aW5pdGlhbGl6ZSh2bSwKKyAgICAgICAgICAgICAgICB0aGlzLCBtX2dsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NhbGw6CisgICAgICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsOgorICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAgICAgICAgICAgbGlu
a1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxl
SW5kZXggPSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5
UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0gPSAmbV9sbGlu
dENhbGxMaW5rSW5mb3NbcGNbNV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjWzVdLnUub3BlcmFuZF07Cisg
ICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKKyAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7CisgICAg
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZl
VHlwZT4ocGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUg
IT0gTG9jYWxDbG9zdXJlVmFyKTsKKyAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBw
Y1s1XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFi
c3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVw
dGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRp
YWxpemF0aW9uKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0g
b3AudHlwZTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5kID0gb3Au
ZGVwdGg7CisgICAgICAgICAgICBpZiAob3AubGV4aWNhbEVudmlyb25tZW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEtlZXAgdGhlIGxpbmtlZCBtb2R1bGUgZW52aXJvbm1lbnQgc3Ryb25nbHkgcmVmZXJlbmNl
ZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ2x5UmVmZXJlbmNlZE1vZHVsZUVudmly
b25tZW50cy5hZGQoanNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihvcC5sZXhpY2FsRW52aXJv
bm1lbnQpKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RhbnQo
b3AubGV4aWNhbEVudmlyb25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudC0+
c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG9wLnR5cGUsIHRoaXMp
KQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KHZtLCB0
aGlzLCBjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKKyAgICAg
ICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOworCisgICAgICAgICAgICAvLyBn
ZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgR2V0UHV0SW5mbywgU3RydWN0dXJlLCBPcGVy
YW5kCisKKyAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1XS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUucG9pbnRlciA9IG51bGxwdHI7CisK
KyAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8ocGNbNF0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKSk7CisgICAgICAgICAgICBpZiAoZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgeworICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNF0gPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3Vy
ZVZhciwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFuZCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCBnZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24p
OworCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IEdldFB1dElu
Zm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50eXBlLCBnZXRQdXRJbmZvLmluaXRpYWxp
emF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7CisgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBNb2R1
bGVWYXIpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBH
ZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3VyZVZhciwgZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFuZCgpOworICAgICAgICAgICAgaWYgKG9wLnR5
cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAg
ICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LnN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9wLm9wZXJhbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICAgICAgLy8gcHV0X3RvX3Njb3BlIHNj
b3BlLCBpZCwgdmFsdWUsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFuZAorICAgICAgICAg
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhwY1s0XS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVW
YXIpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlmIHRoZSBwcm9wZXJ0
eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCisgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNbNV0udS5vcGVyYW5k
OworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1syXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gc3lt
Ym9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOworICAgICAgICAgICAg
ICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAgICAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNo
cG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlu
dCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdLnUucG9pbnRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBSZXNvbHZlT3Ag
b3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIFB1dCwgZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpLCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVz
b2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3Bl
cmFuZCgpOworICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNl
dCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICBlbHNlIGlmIChvcC50eXBlID09IENs
b3N1cmVWYXIgfHwgb3AudHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykg
eworICAgICAgICAgICAgICAgIGlmIChvcC53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAg
ICAgICBvcC53YXRjaHBvaW50U2V0LT5pbnZhbGlkYXRlKHZtLCBQdXRUb1Njb3BlRmlyZURldGFp
bCh0aGlzLCBpZGVudCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQodm0sIHRo
aXMsIG9wLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOworCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS50eXBlUHJvZmlsZXIoKSk7CisgICAgICAgICAg
ICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3Byb2ZpbGVfdHlwZSBy
ZWdUb1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/LCByZXNvbHZlVHlw
ZT8KKyAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAt
IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKKyAgICAgICAg
ICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRCA9IDA7CisgICAgICAgICAgICBS
ZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkQW5h
bHl6ZSA9IG1fdW5saW5rZWRDb2RlLT50eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVj
b2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvZmlsZVJlZ2lzdGVyKHBjWzFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBQcm9maWxlVHlwZUJ5dGVjb2RlRmxhZyBmbGFnID0gc3RhdGljX2Nhc3Q8
UHJvZmlsZVR5cGVCeXRlY29kZUZsYWc+KHBjWzNdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOworCisgICAgICAgICAgICBzd2l0Y2gg
KGZsYWcpIHsKKyAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUNsb3N1cmVWYXI6
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9jYWxTY29wZURlcHRoID0g
cGNbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBzdGF0
aWNfY2FzdDxSZXNvbHZlVHlwZT4ocGNbNV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAv
LyBFdmVuIHRob3VnaCB0eXBlIHByb2ZpbGluZyBtYXkgYmUgcHJvZmlsaW5nIGVpdGhlciBhIEdl
dCBvciBhIFB1dCwgd2UgY2FuIGFsd2F5cyBjbGFpbSBhIEdldCBiZWNhdXNlCisgICAgICAgICAg
ICAgICAgLy8gd2UncmUgYWJzdHJhY3RseSAicmVhZCJpbmcgZnJvbSBhIEpTU2NvcGUuCisgICAg
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBH
ZXQsIHR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOworCisgICAg
ICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhciB8fCBvcC50eXBlID09IE1vZHVs
ZVZhcikKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5sZXhpY2FsRW52aXJv
bm1lbnQtPnN5bWJvbFRhYmxlKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9
PSBHbG9iYWxWYXIpCisgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gbV9nbG9iYWxP
YmplY3QuZ2V0KCktPnN5bWJvbFRhYmxlKCk7CisKKyAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaW1wbCA9IChvcC50eXBlID09IE1vZHVsZVZhcikgPyBvcC5pbXBvcnRlZE5hbWUu
Z2V0KCkgOiBpZGVudC5pbXBsKCk7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRhYmxlKSB7
CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3Bl
IHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhh
dmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUo
bG9ja2VyLCBpbXBsLCB2bSk7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBz
eW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0pOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJs
ZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0czsKKworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2Rl
TG9jYWxseVJlc29sdmVkOiB7CisgICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXgg
PSBwY1syXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkp
OworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihw
Y1s0XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJl
bnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2ls
bCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgICAgICBn
bG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2Vy
LCBpZGVudC5pbXBsKCksIHZtKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3lt
Ym9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwg
dm0pOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEOiAKKyAgICAgICAg
ICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQ6IHsKKyAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0czsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
UHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50OiB7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQob3duZXJFeGVjdXRhYmxlLT5pc0Z1bmN0aW9uRXhlY3V0YWJs
ZSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPnJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKKyAg
ICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyUmV0dXJuU3RhdGVt
ZW50OworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQW5hbHl6ZSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBCZWNhdXNlIGEgcmV0dXJuIHN0YXRlbWVudCBjYW4gYmUgYWRkZWQgaW1wbGlj
aXRseSB0byByZXR1cm4gdW5kZWZpbmVkIGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIHRoZXNlIG5vZGVzIGRvbid0IGVtaXQgZXhwcmVzc2lvbiBy
YW5nZXMgYmVjYXVzZSB0aGV5IGFyZW4ndCBpbiB0aGUgYWN0dWFsIHNvdXJjZSB0ZXh0IG9mCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyJ3MgcHJvZ3JhbSwgZ2l2ZSB0aGUgdHlwZSBw
cm9maWxlciBzb21lIHJhbmdlIHRvIGlkZW50aWZ5IHRoZXNlIHJldHVybiBzdGF0ZW1lbnRzLgor
ICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoZSB0ZXh0IG9mZnNldCB0aGF0IGlz
IHVzZWQgYXMgaWRlbnRpZmljYXRpb24gaXMgImYiIGluIHRoZSBmdW5jdGlvbiBrZXl3b3JkCisg
ICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpcyBzdG9yZWQgb24gVHlwZUxvY2F0aW9uJ3MgbV9k
aXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgbWVtYmVyIHZhcmlhYmxlLgor
ICAgICAgICAgICAgICAgICAgICBkaXZvdFN0YXJ0ID0gZGl2b3RFbmQgPSBvd25lckV4ZWN1dGFi
bGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBzaG91
bGRBbmFseXplID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0ZDo6cGFp
cjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bS50eXBlUHJvZmlsZXIoKS0+
dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCisg
ICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsKKyAgICAgICAgICAgIFR5cGVMb2NhdGlvbiog
bG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CisgICAgICAgICAgICBib29sIGlzTmV3TG9j
YXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOworCisgICAgICAgICAgICBpZiAoZmxhZyA9PSBQ
cm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQpCisgICAgICAgICAgICAg
ICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID0g
b3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKworICAgICAgICAg
ICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlvbikKKyAgICAgICAgICAgICAgICB2
bS50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOworCisgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDJdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9kZWJ1ZzogeworICAgICAg
ICAgICAgaWYgKHBjWzFdLnUuaW5kZXggPT0gRGlkUmVhY2hCcmVha3BvaW50KQorICAgICAgICAg
ICAgICAgIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7CisgICAgICAgICAg
ICBpbnQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBpbnN0cnVjdGlvbnNbaSArIDNdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID49IDApOworICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9PSBudW1QYXJhbWV0ZXJzKCkgLSAxLCAi
V2UgYXNzdW1lIHRoYXQgdGhpcyBpcyB0cnVlIHdoZW4gcmVtYXRlcmlhbGl6aW5nIHRoZSByZXN0
IHBhcmFtZXRlciBkdXJpbmcgT1NSIGV4aXQgaW4gdGhlIEZUTCBKSVQuIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpICs9IG9wTGVuZ3RoOworICAgIH0KKworICAgIGlmICh2
bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCisgICAgICAgIGluc2VydEJhc2ljQmxvY2tCb3VuZGFy
aWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihpbnN0cnVjdGlvbnMpOworCisgICAgbV9pbnN0cnVj
dGlvbnMgPSBXVEZNb3ZlKGluc3RydWN0aW9ucyk7CisKKyAgICAvLyBTZXQgb3B0aW1pemF0aW9u
IHRocmVzaG9sZHMgb25seSBhZnRlciBtX2luc3RydWN0aW9ucyBpcyBpbml0aWFsaXplZCwgc2lu
Y2UgdGhlc2UKKyAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBp
biB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKKyAgICAvLyBpbnN0cnVjdGlv
biBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCisg
ICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgIGppdEFmdGVyV2FybVVwKCk7CisKKyAgICAv
LyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFz
aCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKKyAgICAvLyBzeW5jaHJvbm91c2x5LgorICAgIGlmIChP
cHRpb25zOjphbHdheXNDb21wdXRlSGFzaCgpKQorICAgICAgICBoYXNoKCk7CisKKyAgICBpZiAo
T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQorICAgICAgICBkdW1wQnl0ZWNvZGUo
KTsKKyAgICAKKyAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOworICAgIGhlYXAo
KS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6
ZW9mKEluc3RydWN0aW9uKSk7Cit9CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitDb2RlQmxv
Y2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdC0+dm0oKSwgdGhpcywgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9udW1DYWxsZWVMb2Nh
bHMoMCkKKyAgICAsIG1fbnVtVmFycygwKQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQo
ZmFsc2UpCisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZH
OjpDYW5ub3RDb21waWxlKQorI2VuZGlmCisgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihm
YWxzZSkKKyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGZhbHNlKQor
ICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpCisgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29k
ZSkKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisgICAgLCBtX3N0ZXBwaW5n
TW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKKyAg
ICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4
ZWN1dGFibGUpCisgICAgLCBtX3ZtKHZtKQorICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAg
ICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6Om5vdygpKQoreworICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7Cit9CisK
K3ZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSosIEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisKKyAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOworfQorI2VuZGlmCisKK0Nv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCit7CisgICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlcikKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVj
dGlvbih0aGlzKTsKKworICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgp
ID09IE1peGVkVHJpU3RhdGUpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPnNldERpZE9w
dGltaXplKEZhbHNlVHJpU3RhdGUpOworCisjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklM
RSkKKyAgICBkdW1wVmFsdWVQcm9maWxlcygpOworI2VuZGlmCisKKyAgICAvLyBXZSBtYXkgYmUg
ZGVzdHJveWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVyIHRvIHVzIGFyZSBkZXN0
cm95ZWQuCisgICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2NrcyBiZWNvbWUgdW5yZWFj
aGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKKyAgICAvLyBpcyBubyBndWFyYW50ZWUgYWJv
dXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBkZXN0cm95ZWQuCisgICAg
Ly8gU28sIGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywgYW5kIGdldCBkZXN0cm95
ZWQgYmVmb3JlIHRoZQorICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhhdmUgY2FsbHMgaW50byB1
cywgdGhlbiB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCisgICAgLy8gZGVzdHJ1Y3RvciB3aWxs
IHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlua2VkIGxp
c3QuCisgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworICAgIAorICAgIC8vIE5vdGUgdGhhdCBv
dXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycK
KyAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlv
biBvZiB0aGUgfkNhbGxMaW5rSW5mbworICAgIC8vIGRlc3RydWN0b3JzLgorCisjaWYgRU5BQkxF
KEpJVCkKKyAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YiA9ICppdGVyOworICAgICAgICBzdHViLT5hYm91dFRvRGllKCk7CisgICAg
ICAgIHN0dWItPmRlcmVmKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQoreworICAgIEFTU0VS
VChjb25zdGFudHMuc2l6ZSgpID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5z
aXplKCkpOworICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CisgICAgbV9jb25z
dGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgYm9vbCBoYXNUeXBlUHJvZmls
ZXIgPSAhIW1fdm0tPnR5cGVQcm9maWxlcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ldLmdl
dCgpOworCisgICAgICAgIGlmICghY29uc3RhbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBp
ZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxTeW1ib2xUYWJsZSo+
KGNvbnN0YW50KSkgeworICAgICAgICAgICAgICAgIGlmIChoYXNUeXBlUHJvZmlsZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUt
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlw
ZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IFN5bWJvbFRhYmxlKiBjbG9uZSA9IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3BlUGFydCgqbV92bSk7
CisgICAgICAgICAgICAgICAgaWYgKHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSkK
KyAgICAgICAgICAgICAgICAgICAgY2xvbmUtPnNldFJhcmVEYXRhQ29kZUJsb2NrKHRoaXMpOwor
CisgICAgICAgICAgICAgICAgY29uc3RhbnQgPSBjbG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCptX3ZtLCB0aGlzLCBj
b25zdGFudCk7CisgICAgfQorCisgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Cit9CisKK3ZvaWQgQ29kZUJs
b2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCit7Cisg
ICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVybmF0aXZlKTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKQoreworICAgIG1fbnVtUGFy
YW1ldGVycyA9IG5ld1ZhbHVlOworCisgICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgPSBSZWZD
b3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPihuZXdWYWx1ZSk7Cit9CisKK3ZvaWQgRXZhbENvZGVD
YWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRXZhbENh
Y2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOworICAgIGZvciAoRXZhbENh
Y2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7Cit9CisKK0NvZGVCbG9j
ayogQ29kZUJsb2NrOjpzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpCit7CisjaWYgRU5BQkxF
KEZUTF9KSVQpCisgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAg
IHJldHVybiAwOworICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZnKCk7
CisgICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2soKTsKKyNlbHNlIC8vIEVOQUJMRShG
VExfSklUKQorICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorfQorCit2
b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
Ym9vbCBzZXRCeU1lID0gIW1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7CisgICAgaWYgKCFzZXRCeU1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNv
bmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmluZworICAgIC8vIGFuZCBq
ZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qg
b25lIG9mIHRob3NlIHRoaW5ncworICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEu
IFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKKyAgICAv
LyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KKyAgICB2aXNpdG9y
LmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisK
KyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZiB3ZSBqZXR0aXNvbiBvdXJzZWx2ZXMgd2UnbGwgaW5zdGFsbCBv
dXIgYWx0ZXJuYXRpdmUsIHNvIG1ha2Ugc3VyZSB0aGF0IGl0CisgICAgLy8gc3Vydml2ZXMgR0Mg
ZXZlbiBpZiB3ZSBkb24ndC4KKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7Cisg
ICAgCisgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ugd2VhayByZWZlcmVu
Y2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IKKyAgICAvLyBqZXR0aXNvbmluZywg
YW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBsaXZlIGJhc2VkIG9u
IHNvbWUKKyAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNlIHRvIHJlZ2lzdGVy
IHRoZW0gcmVnYXJkbGVzcy4KKyAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIo
Jm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAv
LyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBl
eGVjdXRhYmxlIGlzIGxpdmUsCisgICAgLy8gYnV0IHdlJ3JlIG5vdCB5ZXQgbGl2ZSBmb3Igc3Vy
ZSBpbiBhbm90aGVyIHNlbnNlOiB3ZSBtYXkgeWV0IGRlY2lkZSB0aGF0IHRoaXMKKyAgICAvLyBj
b2RlIGJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGJhc2VkIG9uIGl0cyBvdXRnb2luZyB3ZWFr
IHJlZmVyZW5jZXMgYmVpbmcKKyAgICAvLyBzdGFsZS4gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0
aGF0IHdlJ3JlIHN0aWxsIGFzc3VtaW5nIHRoYXQgd2UncmUgZGVhZCwgYW5kCisgICAgLy8gcGVy
Zm9ybSBvbmUgcm91bmQgb2YgZGV0ZXJtaW5pbmcgaWYgd2UncmUgbGl2ZS4gVGhlIEdDIG1heSBk
ZXRlcm1pbmUsIGJhc2VkIG9uCisgICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcgYWRkaXRpb25hbCBv
YmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IKKyAgICAvLyBvdGhl
ciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdhaW47IGl0IHdpbGwg
bm90aWZ5IHVzIG9mIHRoaXMKKyAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5nIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpLgorCisgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFs
c2U7CisgICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisKKyAgICBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsKKyAgICBkZXRlcm1p
bmVMaXZlbmVzcyh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKworc2l6
ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgQ29kZUJs
b2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOworICAgIHNpemVfdCBl
eHRyYU1lbW9yeUFsbG9jYXRlZCA9IHRoaXNPYmplY3QtPm1faW5zdHJ1Y3Rpb25zLnNpemUoKSAq
IHNpemVvZihJbnN0cnVjdGlvbik7CisgICAgaWYgKHRoaXNPYmplY3QtPm1faml0Q29kZSkKKyAg
ICAgICAgZXh0cmFNZW1vcnlBbGxvY2F0ZWQgKz0gdGhpc09iamVjdC0+bV9qaXRDb2RlLT5zaXpl
KCk7CisgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBleHRyYU1lbW9yeUFs
bG9jYXRlZDsKK30KKwordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworfQor
Cit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBm
aW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKKyAgICAvLyBhbmQgamV0dGlzb25pbmcu
IFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9z
ZSB0aGluZ3MKKyAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQg
b25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CisgICAgLy8gZmlndXJlcyBv
dXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCisgICAgdmlzaXRvci5hZGRVbmNvbmRp
dGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworCisgICAgaWYgKENv
ZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIob3RoZXJCbG9jayk7
CisKKyAgICBpZiAobV9qaXRDb2RlKQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNpemUo
KSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVjdGlv
bnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50
KCkpOworCisgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAg
c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOworCisgICAgbV9hbGxUcmFuc2l0
aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7CisgICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlz
aXRvcik7Cit9CisKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkKK3sKKyAg
ICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJs
b2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAgIC8vIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwor
ICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBs
aXZlLgorICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQoreworICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHRoaXMpOworfQorCitzdGF0aWMgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRWFnZXJDb2RlQmxvY2tKZXR0aXNvblRpbWluZygp
KSkgeworICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMoMTApOworICAgICAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAgKyAyMCk7CisgICAgICAgIGNh
c2UgSklUQ29kZTo6REZHSklUOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoNDApOworICAgICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEyMCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGppdFR5cGUpIHsKKyAgICBjYXNlIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c2Vjb25kcyg1
KSk7CisgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgLy8gRWZmZWN0aXZl
bHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAg
Ly8gSW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KKyAgICAgICAgcmV0dXJuIHN0
ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDUgKyAxMCkpOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoMjApKTsKKyAgICBjYXNlIEpJVENvZGU6OkZU
TEpJVDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDYwKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAg
IH0KK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKQorewor
ICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAo
dGltZVNpbmNlQ3JlYXRpb24oKSA8IHRpbWVUb0xpdmUoaml0VHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKERGR19K
SVQpCitzdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6OldlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uJiB0cmFuc2l0aW9uKQoreworICAgIGlmICh0cmFuc2l0aW9uLm1fY29kZU9yaWdp
biAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4u
Z2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwordm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKworICAgIGlmIChtX2Fs
bFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
YWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOworICAgICAgICAKKyAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25zW2ldXTsKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGlu
c3RydWN0aW9uWzBdLnUub3Bjb2RlKSkgeworICAgICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGluc3RydWN0
aW9uWzRdLnUuc3RydWN0dXJlSUQ7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3Ry
dWN0dXJlSUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOworICAgICAgICAgICAgICAg
IGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9Cisg
ICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQor
ICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOworICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShvbGRTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsK
KyAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9z
dHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCisgICAgICAgICAgICBhbGxBcmVNYXJr
ZWRTb0ZhciAmPSAoKml0ZXIpLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgICAgICBm
b3IgKGF1dG8mIHdlYWtSZWZlcmVuY2UgOiBkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVu
Y2VzKQorICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gd2Vha1JlZmVyZW5jZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0pKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGluZ3MgYXJlIGxpdmUs
IHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGlz
IGFsc28gbGl2ZToKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0gVGhp
cyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ugb3RoZXJ3aXNl
CisgICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBvdXJzZWx2ZXMu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBjb2RlIG9yaWdp
biBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZyb20KKyAgICAgICAg
ICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUgbm90IHJlbGV2YW50
IGlmIHRoZSB1c2VyJ3MKKyAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0aGF0IGlzIHJlcXVp
cmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAg
Ly8gICBsaXZlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBUaGUg
c291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVja3MgaWYgc29tZQor
ICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUgc291cmNlLCBhbmQg
aWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIC8vICAgSGVuY2UgdGhl
IHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJlIGxpdmUuCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNob3J0LWNpcmN1aXQg
dGhlIGxpdmVuZXNzIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaGFybWxlc3MKKyAgICAgICAgICAgICAg
ICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2JqZWN0IGFuZCBwcm90b3R5cGUgYXJlIGJv
dGggYWxyZWFkeQorICAgICAgICAgICAgICAgIC8vIGxpdmUpLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25zW2ld
Lm1fdG8pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYWxsQXJlTWFya2Vk
U29GYXIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKyAgICAKKyAgICBpZiAoYWxsQXJlTWFya2VkU29GYXIpCisgICAgICAgIG1fYWxsVHJhbnNp
dGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRydWU7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkZXRlcm1p
bmVMaXZlbmVzcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gQ2hlY2sgaWYgd2UgaGF2
ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8uCisgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgIGlmIChkZmdDb21tb24tPmxpdmVuZXNz
SGFzQmVlblByb3ZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE5vdyBjaGVjayBh
bGwgb2Ygb3VyIHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJlIGxpdmUsIHRoZW4g
d2UKKyAgICAvLyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2NhbiBvdXIgc3Ryb25n
IHJlZmVyZW5jZXMuIElmIGF0IGVuZCBvZgorICAgIC8vIEdDIHdlIHN0aWxsIGhhdmUgbm90IHBy
b3ZlZCBsaXZlbmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3QuCisgICAgYm9vbCBh
bGxBcmVMaXZlU29GYXIgPSB0cnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdD
b21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKSkp
IHsKKyAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFsbEFyZUxpdmVTb0ZhcikgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJl
bmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ldLmdldCgpKSkgewor
ICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIElm
IHNvbWUgd2VhayByZWZlcmVuY2VzIGFyZSBkZWFkLCB0aGVuIHRoaXMgZml4cG9pbnQgaXRlcmF0
aW9uIHdhcworICAgIC8vIHVuc3VjY2Vzc2Z1bC4KKyAgICBpZiAoIWFsbEFyZUxpdmVTb0ZhcikK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEFsbCB3ZWFrIHJlZmVyZW5jZXMgYXJlIGxp
dmUuIFJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHNvIHdlIGRvbid0CisgICAgLy8gY29tZSBiYWNr
IGhlcmUgYWdhaW4sIGFuZCBzY2FuIHRoZSBzdHJvbmcgcmVmZXJlbmNlcy4KKyAgICBkZmdDb21t
b24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7CisgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
K30KKwordm9pZCBDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6OnZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCisgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVyKSk7CisKKyAgICBjb2RlQmxvY2stPnByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOworICAgIGNvZGVCbG9jay0+ZGV0ZXJtaW5lTGl2ZW5lc3ModmlzaXRvcik7
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hlKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKK3sKKyAgICBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9IExMSW50Ojpn
ZXRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKKyAgICBpbnN0cnVjdGlvbls0XS51LnBvaW50ZXIgPSBu
dWxscHRyOworICAgIGluc3RydWN0aW9uWzVdLnUucG9pbnRlciA9IG51bGxwdHI7CisgICAgaW5z
dHJ1Y3Rpb25bNl0udS5wb2ludGVyID0gbnVsbHB0cjsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICBpZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAg
ICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV92
bS0+aW50ZXJwcmV0ZXI7CisgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlv
bnMoKTsKKyAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMu
c2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBJbnN0cnVjdGlvbiogY3Vy
SW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNb
aV1dOworICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVj
dGlvblswXS51Lm9wY29kZSkpIHsKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3Vuc2V0OiB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGN1cklu
c3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CisgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChv
bGRTdHJ1Y3R1cmVJRCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgTExJbnQgcHJvcGVydHkgYWNjZXNzLlxuIik7CisgICAgICAgICAgICBjbGVhckxMSW50R2V0
QnlJZENhY2hlKGN1ckluc3RydWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBv
bGRTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzZdLnUuc3Ry
dWN0dXJlSUQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBjdXJJbnN0cnVj
dGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOworICAgICAgICAgICAgaWYgKCghb2xkU3Ry
dWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KG9sZFN0cnVjdHVyZUlEKSkpICYmCisgICAgICAgICAgICAgICAgKCFuZXdTdHJ1Y3R1cmVJ
RCB8fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpKSkgJiYKKyAgICAgICAgICAgICAgICAoIWNoYWluIHx8IEhlYXA6OmlzTWFy
a2VkKGNoYWluKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBM
TEludCBwdXQgdHJhbnNpdGlvbi5cbiIpOworICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNF0u
dS5zdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQgPSAwOworICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1Y3R1cmVJRCA9IDA7
CisgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmNsZWFyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9hcnJh
eV9sZW5ndGg6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF90b190aGlzOgor
ICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZSB8fCBIZWFwOjpp
c01hcmtlZChjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190aGlzIHdpdGggc3RydWN0
dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAg
IGN1ckluc3RydWN0aW9uWzNdLnUudG9UaGlzU3RhdHVzID0gbWVyZ2UoCisgICAgICAgICAgICAg
ICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMsIFRvVGhpc0NsZWFyZWRCeUdDKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CisgICAg
ICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IGN1ckluc3RydWN0aW9uWzRdLnUuanND
ZWxsOworICAgICAgICAgICAgaWYgKCFjYWNoZVdyaXRlQmFycmllciB8fCBjYWNoZVdyaXRlQmFy
cmllci51bnZhbGlkYXRlZEdldCgpID09IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0
cygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgSlNDZWxsKiBjYWNoZWRG
dW5jdGlvbiA9IGNhY2hlV3JpdGVCYXJyaWVyLmdldCgpOworICAgICAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKGNhY2hlZEZ1bmN0aW9uKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIkNsZWFyaW5nIExMSW50IGNyZWF0ZV90aGlzIHdpdGggY2FjaGVkIGNhbGxlZSAlcC5cbiIs
IGNhY2hlZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGNhY2hlV3JpdGVCYXJyaWVyLmNsZWFyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVf
c2NvcGU6IHsKKyAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGlzIGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeS4gQW55IHN5bWJvbCB0YWJsZXMgdGhhdCB0aGlzIHdpbGwgcmVmZXIgdG8KKyAgICAg
ICAgICAgIC8vIGFyZSBmb3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVmZXIgdG8gdGhvc2Ug
ZnVuY3Rpb25zIHN0cm9uZ2x5LCBhbmQgdGhleSByZWZlcgorICAgICAgICAgICAgLy8gdG8gdGhl
IHN5bWJvbCB0YWJsZSBzdHJvbmdseS4gQnV0IGl0J3MgbmljZSB0byBiZSBvbiB0aGUgc2FmZSBz
aWRlLgorICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJvbFRh
YmxlID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIGlmICgh
c3ltYm9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1ib2xUYWJsZSAlcC5c
biIsIHN5bWJvbFRhYmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmNsZWFyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOgorICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICAgICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgCisgICAgICAgICAgICAgICAgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09
IExvY2FsQ2xvc3VyZVZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4mIHN0cnVjdHVyZSA9IGN1ckluc3RydWN0
aW9uWzVdLnUuc3RydWN0dXJlOworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgSGVhcDo6
aXNNYXJrZWQoc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIkNsZWFyaW5nIHNjb3BlIGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIHN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVjdGlvblswXS51Lm9w
Y29kZSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChvcGNvZGVJRCwg
ZmFsc2UsICJVbmhhbmRsZWQgb3Bjb2RlIGluIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHksICVzKCVkKSBhdCBiYyAldSIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgb3Bjb2RlSUQs
IHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFdlIGNhbid0IGp1c3QgcmVtb3ZlIGFsbCB0aGUgc2V0cyB3aGVuIHdlIGNsZWFyIHRoZSBj
YWNoZXMgc2luY2Ugd2UgbWlnaHQgaGF2ZSBjcmVhdGVkIGEgd2F0Y2hwb2ludCBzZXQKKyAgICAv
LyB0aGVuIGNsZWFyZWQgdGhlIGNhY2hlIHdpdGhvdXQgR0NpbmcgaW4gYmV0d2Vlbi4KKyAgICBt
X2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAucmVtb3ZlSWYoW10oY29uc3QgU3RydWN0dXJlV2F0
Y2hwb2ludE1hcDo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7CisgICAgICAgIHJl
dHVybiAhSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpOworICAgIH0pOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbGxpbnRDYWxsTGlua0luZm9zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpICYmICFIZWFwOjppc01h
cmtlZChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5jYWxsZWUuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkNs
ZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcywgIlxuIik7CisgICAgICAgICAgICBtX2xs
aW50Q2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoISFt
X2xsaW50Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQo
bV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQorICAgICAgICAg
ICAgbV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCkK
K3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGZvciAoYXV0byBpdGVyID0gY2FsbExpbmtJbmZvc0Jl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT52aXNpdFdlYWsoKnZtKCkp
OworCisgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9z
dHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvID0gKippdGVyOworICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZl
cmVuY2VzKHRoaXMpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6VW5jb25k
aXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmNv
bmRpdGlvbmFsRmluYWxpemVyKSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY29k
ZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7CisgICAgICAgIGNv
ZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAg
IGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkgeworICAgICAgICBj
b2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKQorICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJbnRJ
bmxpbmVDYWNoZXMoKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCEhY29kZUJsb2NrLT5q
aXRDb2RlKCkpCisgICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcygpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCkKK3sKKyNpZiBFTkFC
TEUoSklUKQorICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQorICAgICAgICB0b0hh
c2hNYXAobV9zdHViSW5mb3MsIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbiwgcmVzdWx0
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordm9pZCBD
b2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQpCit7CisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBnZXRTdHViSW5mb01hcChsb2Nr
ZXIsIHJlc3VsdCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXAoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVzdWx0KQoreworI2lm
IEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpCisgICAgICAg
IHRvSGFzaE1hcChtX2NhbGxMaW5rSW5mb3MsIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4sIHJl
c3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlmCit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBnZXRDYWxs
TGlua0luZm9NYXAobG9ja2VyLCByZXN1bHQpOworfQorCit2b2lkIENvZGVCbG9jazo6Z2V0QnlW
YWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBCeVZhbEluZm9NYXAmIHJlc3Vs
dCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkp
KSB7CisgICAgICAgIGZvciAoYXV0byogYnlWYWxJbmZvIDogbV9ieVZhbEluZm9zKQorICAgICAg
ICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCksIGJ5
VmFsSW5mbyk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRp
ZgorfQorCit2b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVz
dWx0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZ2V0
QnlWYWxJbmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKK30KKworI2lmIEVOQUJMRShKSVQpCitTdHJ1
Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1
cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOworfQorCitKSVRBZGRJQyogQ29kZUJsb2Nr
OjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4g
bV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Cit9CisKK0pJVE11bElDKiBDb2RlQmxvY2s6OmFk
ZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiBtX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKK30KKworSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIG1fc3ViSUNz
LmFkZChhcml0aFByb2ZpbGUpOworfQorCitKSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJ
QyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gbV9uZWdJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7Cit9CisKK1N0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRT
dHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgZm9yIChTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykgeworICAgICAgICBpZiAoc3R1YkluZm8tPmNv
ZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKKyAgICAgICAgICAgIHJldHVybiBzdHViSW5mbzsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0J5VmFsSW5mbyogQ29kZUJsb2NrOjphZGRC
eVZhbEluZm8oKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgcmV0dXJuIG1fYnlWYWxJbmZvcy5hZGQoKTsKK30KKworQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmFkZENhbGxMaW5rSW5mbygpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFkZCgpOworfQorCitDYWxsTGlu
a0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJbmZvcy5iZWdpbigp
OyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+Y29kZU9yaWdpbigpID09
IENvZGVPcmlnaW4oaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuICppdGVyOworICAgIH0KKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBDb2RlQmxvY2s6OnJlc2V0SklURGF0YSgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpOworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgLy8gV2UgY2FuIGNs
ZWFyIHRoZXNlIGJlY2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgaGF2ZSByZWZlcmVuY2VzIHRv
IGFueSBzdHViIGluZm9zLCBjYWxsCisgICAgLy8gbGluayBpbmZvcywgb3IgYnkgdmFsIGluZm9z
IGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0dGVtcHRzIHRvIHF1ZXJ5IHRoZXNlIGRhdGEK
KyAgICAvLyBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50IEFQSSAoZ2V0U3R1YkluZm9N
YXAgYW5kIGZyaWVuZHMpIHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYgd2UKKyAgICAvLyBkb24ndCBo
YXZlIEpJVCBjb2RlLgorICAgIG1fc3R1YkluZm9zLmNsZWFyKCk7CisgICAgbV9jYWxsTGlua0lu
Zm9zLmNsZWFyKCk7CisgICAgbV9ieVZhbEluZm9zLmNsZWFyKCk7CisgICAgCisgICAgLy8gV2Ug
Y2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0byB0aGVzZSBkYXRhIHN0
cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgorICAgIC8vIHRoZXJlIGlzIEpJVCBjb2Rl
LgorICAgIG1fcmFyZUNhc2VQcm9maWxlcy5jbGVhcigpOworfQorI2VuZGlmCisKK3ZvaWQgQ29k
ZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0byBkZWFsIHdpdGgKKyAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIGFu
IGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCisgICAgLy8gZ3VhcmFudGVlaW5n
IHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGV0YWlscyBvZiB0aGUgQ29kZUJsb2NrIHdlIGNvbXBpbGVk
CisgICAgLy8gdGhlIE9TUiBleGl0IGFnYWluc3QuCisKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9h
bHRlcm5hdGl2ZSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgaWYgKGRmZ0NvbW1vbi0+
aW5saW5lQ2FsbEZyYW1lcykgeworICAgICAgICBmb3IgKGF1dG8qIGlubGluZUNhbGxGcmFtZSA6
ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxp
bmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgfQorICAg
IH0KKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xv
YmFsT2JqZWN0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOworICAg
IHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7CisgICAgaWYgKG1fcmFyZURhdGEpCisg
ICAgICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhtX2NvbnN0YW50UmVnaXN0ZXJzLmRhdGEoKSwg
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9m
dW5jdGlvbkV4cHJzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25E
ZWNscy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZnVuY3Rpb25EZWNs
c1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tp
XS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgZm9yIChC
eVZhbEluZm8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQorICAgICAg
ICB2aXNpdE9TUkV4aXRUYXJnZXRzKHZpc2l0b3IpOworI2VuZGlmCisKKyAgICB1cGRhdGVBbGxQ
cmVkaWN0aW9ucygpOworfQorCit2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoISFkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbikKKyAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9y
aWdpbik7IC8vIEFsbW9zdCBjZXJ0YWlubHkgbm90IG5lY2Vzc2FyeSwgc2luY2UgdGhlIGNvZGUg
b3JpZ2luIHNob3VsZCBhbHNvIGJlIGEgd2VhayByZWZlcmVuY2UuIEJldHRlciB0byBiZSBzYWZl
LCB0aG91Z2guCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25z
W2ldLm1fZnJvbSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRp
b25zW2ldLm1fdG8pOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5h
cHBlbmQoJmRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0pOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZl
cmVuY2VzW2ldKTsKKworICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1
ZTsKKyNlbmRpZiAgICAKK30KKworQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiByZXN1bHQgPSB0aGlz
OworICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgIHJlc3VsdCA9IHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlc3VsdC0+aml0VHlwZSgpKSB8
fCByZXN1bHQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorfQorCitDb2RlQmxvY2sqIENvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGNyZWF0aW5nIHRoZSBvcmlnaW5h
bCBDb2RlQmxvY2sgZm9yIGFuIGV4ZWN1dGFibGUuCisgICAgICAgIC8vIEFzc3VtZSB0aGF0IHdl
J3JlIHRoZSBiYXNlbGluZSBDb2RlQmxvY2suCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAg
IHJlc3VsdCA9IHJlc3VsdC0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIHJldHVybiB0aGlzOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoSklU
KQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5
cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJl
cGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKK2Jvb2wgQ29kZUJs
b2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIGhhc09wdGltaXpl
ZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7Cit9CisjZW5kaWYKKworSGFuZGxlckluZm8qIENvZGVC
bG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBS
ZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGJ5
dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaGFuZGxl
ckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhhbmRsZXIpOworfQorCitIYW5kbGVy
SW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVk
SGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKK30K
KworQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJ
bmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpCit7CisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUo
KSkpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3JpZ2luYWxDYWxsU2l0
ZSkpOworICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENhbGxTaXRlLmJpdHMo
KSkpOworICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3JpZ2luKG9yaWdpbmFs
Q2FsbFNpdGUpOworICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5hZGRVbmlxdWVD
YWxsU2l0ZUluZGV4KG9yaWdpbmFsT3JpZ2luKTsKKyNlbHNlCisgICAgLy8gV2UgbmV2ZXIgY3Jl
YXRlIG5ldyBvbi10aGUtZmx5IGV4Y2VwdGlvbiBoYW5kbGluZworICAgIC8vIGNhbGwgc2l0ZXMg
b3V0c2lkZSB0aGUgREZHL0ZUTCBpbmxpbmUgY2FjaGVzLgorICAgIFVOVVNFRF9QQVJBTShvcmln
aW5hbENhbGxTaXRlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBDYWxsU2l0ZUluZGV4KDB1KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6cmVt
b3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsKKyAgICBWZWN0b3I8SGFuZGxl
ckluZm8+JiBleGNlcHRpb25IYW5kbGVycyA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnM7CisgICAgdW5zaWduZWQgaW5kZXggPSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNbaV07CisgICAgICAg
IGlmIChoYW5kbGVyLnN0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIuZW5kID4gaW5kZXgpIHsKKyAg
ICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3Vuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlT2Zm
c2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVj
dXRhYmxlKCktPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVOdW1iZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Cit9CisKK3Vuc2lnbmVkIENvZGVCbG9jazo6Y29s
dW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgaW50IGRpdm90OworICAgIGludCBzdGFydE9mZnNldDsKKyAgICBpbnQgZW5kT2Zmc2V0Owor
ICAgIHVuc2lnbmVkIGxpbmU7CisgICAgdW5zaWduZWQgY29sdW1uOworICAgIGV4cHJlc3Npb25S
YW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKKyAgICByZXR1cm4gY29sdW1uOworfQorCit2b2lk
IENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0
LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKK3sKKyAgICBtX3VubGlu
a2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOworICAgIGRpdm90
ICs9IG1fc291cmNlT2Zmc2V0OworICAgIGNvbHVtbiArPSBsaW5lID8gMSA6IGZpcnN0TGluZUNv
bHVtbk9mZnNldCgpOworICAgIGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0
TGluZSgpOworfQorCitib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4o
dW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlciA9IHZtKCktPmludGVycHJldGVyOworICAgIGNvbnN0IEluc3RydWN0aW9uKiBiZWdp
biA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVuZCA9
IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24qIGl0ID0g
YmVnaW47IGl0ICE9IGVuZDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICAgICAgaWYgKG9wY29kZUlEID09
IG9wX2RlYnVnKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGl0IC0g
YmVnaW47CisgICAgICAgICAgICBpbnQgdW51c2VkOworICAgICAgICAgICAgdW5zaWduZWQgb3BE
ZWJ1Z0xpbmU7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOworICAgICAgICAg
ICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHVudXNl
ZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKKyAgICAgICAg
ICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2ludDo6dW5z
cGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGl0ICs9IG9wY29kZUxlbmd0aHNb
b3Bjb2RlSURdOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCit7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKworICAgIG1fcmFyZUNhc2VQcm9maWxlcy5zaHJpbmtU
b0ZpdCgpOworICAgIAorICAgIGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hyaW5rKSB7CisgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX3JhcmVEYXRhKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB9CisgICAgfSAvLyBlbHNl
IGRvbid0IHNocmluayB0aGVzZSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgcG9pbnRl
ZCBwb2ludGVycyBpbnRvIHRoZXNlIHRhYmxlcy4KK30KKworI2lmIEVOQUJMRShKSVQpCit2b2lk
IENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBDYWxs
TGlua0luZm8qIGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSk7CisgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOworfQorCit2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUs
IFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMucHVzaChpbmNv
bWluZyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwordm9pZCBDb2RlQmxvY2s6OnVubGlu
a0luY29taW5nQ2FsbHMoKQoreworICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdp
bigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nTExJ
bnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKKyNpZiBFTkFCTEUoSklUKQorICAgIHdoaWxlICht
X2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAgICAg
IG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOworICAgIHdoaWxlIChtX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51
bmxpbmsoKnZtKCkpOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9CisKK3ZvaWQgQ29kZUJsb2Nr
OjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJ
bmZvKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwor
ICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21pbmcpOworfQorCitDb2RlQmxvY2sq
IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBvd25lclNjcmlwdEV4
ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5k
KCkpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBsYWNl
bWVudCgpCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0lu
Zm8oKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkK
KyAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDog
Q29kZUZvckNhbGwpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFsQ29kZUJsb2NrOjppbmZv
KCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvZGVCbG9jaygpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9ncmFtQ29kZUJs
b2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8TW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZl
bCgpCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8o
KTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkgewor
ICAgICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIERGRzo6ZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAgICAgIHJldHVybiBE
Rkc6OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKyAgICB9CisKKyAgICBp
ZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERG
Rzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gUHJv
Z3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJp
bGl0eUxldmVsKHRoaXMpOworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2
ZWwodGhpcyk7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGNsYXNzSW5mbyA9
PSBXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpDYW5u
b3RDb21waWxlOworI2VuZGlmCisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCit2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJl
YXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFpbCkK
K3sKKyNpZiAhRU5BQkxFKERGR19KSVQpCisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVO
VVNFRF9QQVJBTShkZXRhaWwpOworI2VuZGlmCisgICAgCisgICAgQ09ERUJMT0NLX0xPR19FVkVO
VCh0aGlzLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24sICIsIGNvdW50aW5nID0gIiwg
bW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwgPSAiLCBwb2ludGVyRHVtcChk
ZXRhaWwpKSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWFzb24gIT0gUHJvZmlsZXI6Ok5vdEpl
dHRpc29uZWQpOworICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChERkc6OnNob3Vs
ZER1bXBEaXNhc3NlbWJseSgpKSB7CisgICAgICAgIGRhdGFMb2coIkpldHRpc29uaW5nICIsICp0
aGlzKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikKKyAgICAgICAg
ICAgIGRhdGFMb2coIiBhbmQgY291bnRpbmcgcmVvcHRpbWl6YXRpb24iKTsKKyAgICAgICAgZGF0
YUxvZygiIGR1ZSB0byAiLCByZWFzb24pOworICAgICAgICBpZiAoZGV0YWlsKQorICAgICAgICAg
ICAgZGF0YUxvZygiLCAiLCAqZGV0YWlsKTsKKyAgICAgICAgZGF0YUxvZygiLlxuIik7CisgICAg
fQorICAgIAorICAgIGlmIChyZWFzb24gPT0gUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFrUmVm
ZXJlbmNlKSB7CisgICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNlIG9m
IHRoZSBmb2xsb3dpbmcgZGVhZCByZWZlcmVuY2VzOlxuIik7CisgICAgICAgICAgICBERkc6OkNv
bW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRy
YW5zaXRpb24gPSBkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldOworICAgICAgICAgICAgICAgIEpT
Q2VsbCogb3JpZ2luID0gdHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgSlNDZWxsKiBmcm9tID0gdHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgSlNDZWxsKiB0byA9IHRyYW5zaXRpb24ubV90by5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKCFvcmlnaW4gfHwgSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgJiYgSGVhcDo6aXNNYXJr
ZWQoZnJvbSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBUcmFuc2l0aW9uIHVuZGVyICIsIFJhd1BvaW50ZXIob3JpZ2luKSwgIiwg
IiwgUmF3UG9pbnRlcihmcm9tKSwgIiAtPiAiLCBSYXdQb2ludGVyKHRvKSwgIi5cbiIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1v
bi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IHdlYWsgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOworICAgICAgICAgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFdlYWsgcmVmZXJlbmNlICIsIFJhd1Bv
aW50ZXIod2VhayksICIuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygq
aGVhcCgpKTsKKyAgICAKKyAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2ggdHdvIHRoaW5ncyBo
ZXJlOgorICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJsb2NrIGlzIG9uIHRo
ZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0CisgICAgLy8gICAgd2Ug
c2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b24gYWZ0ZXIgdGhlIHJldHVybi4KKyAgICAvLyAyKSBNYWtlIHN1cmUgdGhhdCBpZiB3ZSBjYWxs
IHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxsIHRoaXMgQ29kZUJs
b2NrLgorCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6
SmV0dGlzb25EdWVUb09sZEFnZSkgeworICAgICAgICBpZiAoUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgp
KQorICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29uKHJlYXNvbiwgZGV0
YWlsKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgxKSwgYW5kIGRv
ZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMgYWxyZWFkeSBoYXBw
ZW5lZC4KKyAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbnZhbGlkYXRlKCkp
IHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZC4KKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8fCAobV92bS0+aGVh
cC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9n
KCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOworICAgIAorICAgIC8vIENvdW50
IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCisgICAg
aWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTWF5
YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2ZSgpLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CisgICAgICAgIGJhc2VsaW5lQWx0
ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBpZiAoREZHOjpzaG91
bGREdW1wRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBEaWQgY291bnQg
cmVvcHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYg
KHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ug
d2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZvciBPU1IgZW50cnkg
Y29kZQorICAgICAgICAvLyBibG9ja3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVBZnRlcldh
cm1VcCgpOworCisgICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFn
ZSkKKyAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisgICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcgR0MuIFdlIGRvbid0
IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCisgICAgLy8gYmVjYXVz
ZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJlcmVkIHNldC4KKyAg
ICBpZiAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFya2Vk
KG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhp
cyBhY2NvbXBsaXNoZXMgKDIpLgorICAgIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0YWxs
Q29kZSgKKyAgICAgICAgbV9nbG9iYWxPYmplY3QtPnZtKCksIGFsdGVybmF0aXZlKCksIGNvZGVU
eXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
IGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCIgICAg
RGlkIGluc3RhbGwgYmFzZWxpbmUgdmVyc2lvbiBvZiAiLCAqdGhpcywgIlxuIik7CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCit9CisKK0pTR2xvYmFsT2JqZWN0KiBDb2RlQmxvY2s6Omdsb2Jh
bE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKCFjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOworICAgIHJl
dHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOworfQorCitjbGFzcyBSZWN1cnNpb25DaGVja0Z1bmN0b3IgeworcHVibGljOgor
ICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZyYW1lLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgZGVwdGhUb0NoZWNrKQorICAgICAgICA6IG1fc3Rh
cnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgICAgICAsIG1fZGVwdGhUb0NoZWNrKGRlcHRoVG9DaGVjaykKKyAgICAgICAgLCBt
X2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFsc2UpCisgICAgICAgICwgbV9kaWRSZWN1cnNlKGZhbHNl
KQorICAgIHsgfQorCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBDYWxsRnJhbWUqIGN1cnJlbnRD
YWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKKworICAgICAgICBpZiAoY3VycmVudENh
bGxGcmFtZSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKQorICAgICAgICAgICAgbV9mb3VuZFN0YXJ0Q2Fs
bEZyYW1lID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbEZyYW1lKCktPmNvZGVCbG9jaygpID09IG1fY29k
ZUJsb2NrKSB7CisgICAgICAgICAgICAgICAgbV9kaWRSZWN1cnNlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIW1fZGVwdGhUb0NoZWNrLS0pCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworICAgIH0KKworICAgIGJvb2wgZGlkUmVjdXJzZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlkUmVjdXJzZTsgfQorCitwcml2YXRlOgorICAgIENhbGxGcmFtZSogbV9zdGFydENh
bGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9kZXB0aFRvQ2hlY2s7CisgICAgbXV0YWJsZSBib29sIG1fZm91bmRTdGFydENhbGxGcmFt
ZTsKKyAgICBtdXRhYmxlIGJvb2wgbV9kaWRSZWN1cnNlOworfTsKKwordm9pZCBDb2RlQmxvY2s6
Om5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKQoreworICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgZGF0YUxvZygiTm90
aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgcG9pbnRlckR1bXAoY2FsbGVyQ29kZUJsb2NrKSwgIiB0
byAiLCAqdGhpcywgIlxuIik7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYgKCFt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgh
Y2FsbGVyQ29kZUJsb2NrKSB7CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlzIG5hdGl2ZS5cbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2Zp
bGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIURGRzo6bWlnaHRJbmxpbmVGdW5j
dGlvbih0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjYW5JbmxpbmUoY2FwYWJp
bGl0eUxldmVsU3RhdGUoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIURGRzo6
aXNTbWFsbEVub3VnaFRvSW5saW5lQ29kZUludG8oY2FsbGVyQ29kZUJsb2NrKSkgeworICAgICAg
ICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FC
SSBiZWNhdXNlIGNhbGxlciBpcyB0b28gbGFyZ2UuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSB7CisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgc3RpbGwgaW4gdGhl
IGludGVycHJldGVyLCB0aGVuIHdlIGNhbid0IGV4cGVjdCBpbmxpbmluZyB0bworICAgICAgICAv
LyBoYXBwZW4gYW55dGltZSBzb29uLiBBc3N1bWUgaXQncyBwcm9maXRhYmxlIHRvIG9wdGltaXpl
IGl0IHNlcGFyYXRlbHkuIFRoaXMKKyAgICAgICAgLy8gZW5zdXJlcyB0aGF0IGEgZnVuY3Rpb24g
aXMgU0FCSSBvbmx5IGlmIGl0IGlzIGNhbGxlZCBubyBtb3JlIGZyZXF1ZW50bHkgdGhhbgorICAg
ICAgICAvLyBhbnkgb2YgaXRzIGNhbGxlcnMuCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlzIGlu
IExMSW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNB
QkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuXG4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5jb2RlVHlwZSgpICE9
IEZ1bmN0aW9uQ29kZSkgeworICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIGVpdGhlciBldmFs
IG9yIGdsb2JhbCBjb2RlLCBhc3N1bWUgdGhhdCB0aGF0IHdvbid0IGJlCisgICAgICAgIC8vIG9w
dGltaXplZCBhbnl0aW1lIHNvb24uIEZvciBldmFsIGNvZGUgdGhpcyBpcyBwYXJ0aWN1bGFybHkg
dHJ1ZSBzaW5jZSB3ZQorICAgICAgICAvLyBkZWxheSBldmFsIG9wdGltaXphdGlvbiBieSBhICps
b3QqLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAg
Q2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBub3QgYSBmdW5jdGlvbi5cbiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVjdXJzaXZlIGNhbGxzIHdvbid0IGJlIGlu
bGluZWQuCisgICAgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2FsbGVyRnJhbWUsIHRo
aXMsIE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpOworICAgIHZtKCktPnRvcENhbGxG
cmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKworICAgIGlmIChmdW5jdG9yLmRpZFJlY3Vyc2UoKSkg
eworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIHJlY3Vyc2lvbiB3YXMgZGV0ZWN0ZWQu
XG4iKTsKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5jYXBhYmlsaXR5
TGV2ZWxTdGF0ZSgpID09IERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KSB7CisgICAgICAgIGRh
dGFMb2coIkluIGNhbGwgZnJvbSAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiICIsIGNhbGxlckZyYW1l
LT5jb2RlT3JpZ2luKCksICIgdG8gIiwgKnRoaXMsICI6IGNhbGxlcidzIERGRyBjYXBhYmlsaXR5
IGxldmVsIGlzIG5vdCBzZXQuXG4iKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGNhbkNvbXBpbGUoY2FsbGVyQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWxTdGF0ZSgp
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExp
bmsoKSkKKyAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSB0aGUgY2Fs
bGVyIGlzIG5vdCBhIERGRyBjYW5kaWRhdGUuXG4iKTsKKyAgICAKKyAgICBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCA9IGZhbHNlOworI2VuZGlmCit9CisKK3Vuc2lnbmVkIENvZGVCbG9jazo6cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAoreworI2lmIEVOQUJMRShKSVQpCisgICAg
QVNTRVJUKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gT3B0aW9uczo6cmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgoKSk7CisgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXI7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCit9
CisKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldENhbGxlZVNhdmVSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycykKK3sKKyAgICBtX2NhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PihjYWxsZWVT
YXZlUmVnaXN0ZXJzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnNldENhbGxlZVNhdmVSZWdpc3Rl
cnMoc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3RlckF0T2Zmc2V0
TGlzdCkKK3sKKyAgICBtX2NhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KTsKK30KKyAgICAKK3N0YXRpYyBzaXplX3Qgcm91bmRDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoc2l6ZV90IGNhbGxlZVNhdmVSZWdpc3RlcnMpCit7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNwdVJlZ2lzdGVyU2l6ZSA9IHNpemVvZih2b2lkKik7CisgICAg
cmV0dXJuIChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKFJlZ2lzdGVyKSwgY2FsbGVl
U2F2ZVJlZ2lzdGVycyAqIGNwdVJlZ2lzdGVyU2l6ZSkgLyBzaXplb2YoUmVnaXN0ZXIpKTsKKwor
fQorCitzaXplX3QgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkKK3sKKyAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMobnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
K30KKworc2l6ZV90IENvZGVCbG9jazo6Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCkKK3sKKyAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzLT5zaXplKCkpOworfQorCit2b2lkIENvZGVCbG9jazo6Y291
bnRSZW9wdGltaXphdGlvbigpCit7CisgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcisr
OworICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkKKyAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlciA9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCk7Cit9CisK
K3Vuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygpCit7CisgICAgQVNTRVJU
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOworICAgIGlmIChPcHRpb25zOjp0
ZXN0VGhlRlRMKCkpIHsKKyAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIDEwMDAwMDA7CisgICAgICAgIHJldHVybiAobV9oYXNCZWVuQ29tcGls
ZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAgICB9
CisgICAgcmV0dXJuIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQoKS0+aml0
VHlwZSgpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7Cit9CisKK2lu
dDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdAorewor
ICAgIGlmIChjb2RlVHlwZSgpID09IEV2YWxDb2RlKQorICAgICAgICByZXR1cm4gT3B0aW9uczo6
ZXZhbFRocmVzaG9sZE11bHRpcGxpZXIoKTsKKyAgICAKKyAgICByZXR1cm4gMTsKK30KKworZG91
YmxlIENvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpCit7Cisg
ICAgLy8gVGhpcyBleHByZXNzaW9uIGFyaXNlcyBmcm9tIGRvaW5nIGEgbGVhc3Qtc3F1YXJlcyBm
aXQgb2YKKyAgICAvLworICAgIC8vIEZbeF9dID06IGEgKiBTcXJ0W3ggKyBiXSArIEFic1tjICog
eF0gKyBkCisgICAgLy8KKyAgICAvLyBhZ2FpbnN0IHRoZSBkYXRhIHBvaW50czoKKyAgICAvLwor
ICAgIC8vICAgIHggICAgICAgRlt4X10KKyAgICAvLyAgICAxMCAgICAgICAwLjkgICAgICAgICAg
KHNtYWxsZXN0IHJlYXNvbmFibGUgY29kZSBibG9jaykKKyAgICAvLyAgIDIwMCAgICAgICAxLjAg
ICAgICAgICAgKHR5cGljYWwgc21hbGwtaXNoIGNvZGUgYmxvY2spCisgICAgLy8gICAzMjAgICAg
ICAgMS4yICAgICAgICAgIChzb21ldGhpbmcgSSBzYXcgaW4gM2QtY3ViZSB0aGF0IEkgd2FudGVk
IHRvIG9wdGltaXplKQorICAgIC8vICAxMjY4ICAgICAgIDUuMCAgICAgICAgICAoc29tZXRoaW5n
IEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIGRpZG4ndCB3YW50IHRvIG9wdGltaXplKQorICAgIC8v
ICA0MDAwICAgICAgIDUuNSAgICAgICAgICAocmFuZG9tIGxhcmdlIHNpemUsIHVzZWQgdG8gY2F1
c2UgdGhlIGZ1bmN0aW9uIHRvIGNvbnZlcmdlIHRvIGEgc2hhbGxvdyBjdXJ2ZSBvZiBzb21lIHNv
cnQpCisgICAgLy8gMTAwMDAgICAgICAgNi4wICAgICAgICAgIChzaW1pbGFyIHRvIGFib3ZlKQor
ICAgIC8vCisgICAgLy8gSSBhY2hpZXZlIHRoZSBtaW5pbWl6YXRpb24gdXNpbmcgdGhlIGZvbGxv
d2luZyBNYXRoZW1hdGljYSBjb2RlOgorICAgIC8vCisgICAgLy8gTXlGdW5jdGlvblRlbXBsYXRl
W3hfLCBhXywgYl8sIGNfLCBkX10gOj0gYSpTcXJ0W3ggKyBiXSArIEFic1tjKnhdICsgZAorICAg
IC8vCisgICAgLy8gc2FtcGxlcyA9IHt7MTAsIDAuOX0sIHsyMDAsIDF9LCB7MzIwLCAxLjJ9LCB7
MTI2OCwgNX0sIHs0MDAwLCA1LjV9LCB7MTAwMDAsIDZ9fQorICAgIC8vCisgICAgLy8gc29sdXRp
b24gPSAKKyAgICAvLyAgICAgTWluaW1pemVbUGx1cyBAQCAoKE15RnVuY3Rpb25UZW1wbGF0ZVsj
W1sxXV0sIGEsIGIsIGMsIGRdIC0gI1tbMl1dKV4yICYgL0Agc2FtcGxlcyksCisgICAgLy8gICAg
ICAgICB7YSwgYiwgYywgZH1dW1syXV0KKyAgICAvLworICAgIC8vIEFuZCB0aGUgY29kZSBiZWxv
dyAodG8gaW5pdGlhbGl6ZSBhLCBiLCBjLCBkKSBpcyBnZW5lcmF0ZWQgYnk6CisgICAgLy8KKyAg
ICAvLyBQcmludFsiY29uc3QgZG91YmxlICIgPD4gVG9TdHJpbmdbI1tbMV1dXSA8PiAiID0gIiA8
PgorICAgIC8vICAgICBJZlsjW1syXV0gPCAwLjAwMDAxLCAiMC4wIiwgVG9TdHJpbmdbI1tbMl1d
XV0gPD4gIjsiXSAmIC9AIHNvbHV0aW9uCisgICAgLy8KKyAgICAvLyBXZSd2ZSBsb25nIGtub3du
IHRoZSBmb2xsb3dpbmcgdG8gYmUgdHJ1ZToKKyAgICAvLyAtIFNtYWxsIGNvZGUgYmxvY2tzIGFy
ZSBjaGVhcCB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIGRvIGl0IHNvb25lciByYXRoZXIK
KyAgICAvLyAgIHRoYW4gbGF0ZXIuCisgICAgLy8gLSBMYXJnZSBjb2RlIGJsb2NrcyBhcmUgZXhw
ZW5zaXZlIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgcG9zdHBvbmUgZG9pbmcgc28sCisg
ICAgLy8gICBhbmQgc29tZXRpbWVzIGhhdmUgYSBsYXJnZSBlbm91Z2ggdGhyZXNob2xkIHRoYXQg
d2UgbmV2ZXIgb3B0aW1pemUgdGhlbS4KKyAgICAvLyAtIFRoZSBkaWZmZXJlbmNlIGluIGNvc3Qg
aXMgbm90IHRvdGFsbHkgbGluZWFyIGJlY2F1c2UgKGEpIGp1c3QgaW52b2tpbmcgdGhlCisgICAg
Ly8gICBERkcgaW5jdXJzIHNvbWUgYmFzZSBjb3N0IGFuZCAoYikgZm9yIGxhcmdlIGNvZGUgYmxv
Y2tzIHRoZXJlIGlzIGVub3VnaCBzbG9wCisgICAgLy8gICBpbiB0aGUgY29ycmVsYXRpb24gYmV0
d2VlbiBpbnN0cnVjdGlvbiBjb3VudCBhbmQgdGhlIGFjdHVhbCBjb21waWxhdGlvbiBjb3N0Cisg
ICAgLy8gICB0aGF0IGZvciB0aG9zZSBsYXJnZSBibG9ja3MsIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCBzaG91bGQgbm90IGhhdmUgYSBzdHJvbmcKKyAgICAvLyAgIGluZmx1ZW5jZSBvbiBvdXIgdGhy
ZXNob2xkLgorICAgIC8vCisgICAgLy8gSSBrbmV3IHRoZSBnb2FscyBidXQgSSBkaWRuJ3Qga25v
dyBob3cgdG8gYWNoaWV2ZSB0aGVtOyBzbyBJIHBpY2tlZCBhbiBpbnRlcmVzdGluZworICAgIC8v
IGV4YW1wbGUgd2hlcmUgdGhlIGhldXJpc3RpY3Mgd2VyZSByaWdodCAoY29kZSBibG9jayBpbiAz
ZC1jdWJlIHdpdGggaW5zdHJ1Y3Rpb24KKyAgICAvLyBjb3VudCAzMjAsIHdoaWNoIGdvdCBjb21w
aWxlZCBlYXJseSBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuKSBhbmQgb25lIHdoZXJlIHRoZXkgd2Vy
ZQorICAgIC8vIHRvdGFsbHkgd3JvbmcgKGNvZGUgYmxvY2sgaW4gM2QtY3ViZSB3aXRoIGluc3Ry
dWN0aW9uIGNvdW50IDEyNjgsIHdoaWNoIHdhcyBleHBlbnNpdmUKKyAgICAvLyB0byBjb21waWxl
IGFuZCBkaWRuJ3QgcnVuIG9mdGVuIGVub3VnaCB0byB3YXJyYW50IGNvbXBpbGF0aW9uIGluIG15
IG9waW5pb24pLCBhbmQKKyAgICAvLyB0aGVuIHRocmV3IGluIGFkZGl0aW9uYWwgZGF0YSBwb2lu
dHMgdGhhdCByZXByZXNlbnRlZCBteSBvd24gZ3Vlc3Mgb2Ygd2hhdCBvdXIKKyAgICAvLyBoZXVy
aXN0aWNzIHNob3VsZCBkbyBmb3Igc29tZSByb3VuZC1udW1iZXJlZCBleGFtcGxlcy4KKyAgICAv
LworICAgIC8vIFRoZSBleHByZXNzaW9uIHRvIHdoaWNoIEkgZGVjaWRlZCB0byBmaXQgdGhlIGRh
dGEgYXJvc2UgYmVjYXVzZSBJIHN0YXJ0ZWQgd2l0aCBhbgorICAgIC8vIGFmZmluZSBmdW5jdGlv
biwgYW5kIHRoZW4gZGlkIHR3byB0aGluZ3M6IHB1dCB0aGUgbGluZWFyIHBhcnQgaW4gYW4gQWJz
IHRvIGVuc3VyZQorICAgIC8vIHRoYXQgdGhlIGZpdCBkaWRuJ3QgZW5kIHVwIGNob29zaW5nIGEg
bmVnYXRpdmUgdmFsdWUgb2YgYyAod2hpY2ggd291bGQgcmVzdWx0IGluCisgICAgLy8gdGhlIGZ1
bmN0aW9uIHR1cm5pbmcgb3ZlciBhbmQgZ29pbmcgbmVnYXRpdmUgZm9yIGxhcmdlIHgpIGFuZCBJ
IHRocmV3IGluIGEgU3FydAorICAgIC8vIHRlcm0gYmVjYXVzZSBTcXJ0IHJlcHJlc2VudHMgbXkg
aW50dXRpb24gdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIG1vcmUgc2Vuc2l0aXZlCisgICAg
Ly8gdG8gc21hbGwgY2hhbmdlcyBpbiBzbWFsbCB2YWx1ZXMgb2YgeCwgYnV0IGxlc3Mgc2Vuc2l0
aXZlIHdoZW4geCBnZXRzIGxhcmdlLgorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgY3VycmVu
dCBmaXQgZXNzZW50aWFsbHkgZWxpbWluYXRlcyB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlCisg
ICAgLy8gZXhwcmVzc2lvbiAoYyA9PSAwLjApLgorICAgIGNvbnN0IGRvdWJsZSBhID0gMC4wNjE1
MDQ7CisgICAgY29uc3QgZG91YmxlIGIgPSAxLjAyNDA2OworICAgIGNvbnN0IGRvdWJsZSBjID0g
MC4wOworICAgIGNvbnN0IGRvdWJsZSBkID0gMC44MjU5MTQ7CisgICAgCisgICAgZG91YmxlIGlu
c3RydWN0aW9uQ291bnQgPSB0aGlzLT5pbnN0cnVjdGlvbkNvdW50KCk7CisgICAgCisgICAgQVNT
RVJUKGluc3RydWN0aW9uQ291bnQpOyAvLyBNYWtlIHN1cmUgdGhpcyBpcyBjYWxsZWQgb25seSBh
ZnRlciB3ZSBoYXZlIGFuIGluc3RydWN0aW9uIHN0cmVhbTsgb3RoZXJ3aXNlIGl0J2xsIGp1c3Qg
cmV0dXJuIHRoZSB2YWx1ZSBvZiBkLCB3aGljaCBtYWtlcyBubyBzZW5zZS4KKyAgICAKKyAgICBk
b3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0KGluc3RydWN0aW9uQ291bnQgKyBiKSArIGMgKiBp
bnN0cnVjdGlvbkNvdW50OworICAgIAorICAgIHJlc3VsdCAqPSBjb2RlVHlwZVRocmVzaG9sZE11
bHRpcGxpZXIoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAqdGhpcywgIjogaW5zdHJ1Y3Rpb24gY291bnQgaXMg
IiwgaW5zdHJ1Y3Rpb25Db3VudCwKKyAgICAgICAgICAgICIsIHNjYWxpbmcgZXhlY3V0aW9uIGNv
dW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwgY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCks
CisgICAgICAgICAgICAiXG4iKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGludDMyX3QgY2xpcFRocmVzaG9sZChkb3VibGUgdGhyZXNob2xkKQoreworICAgIGlmICh0
aHJlc2hvbGQgPCAxLjApCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIGlmICh0aHJlc2hv
bGQgPiBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
OworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aHJlc2hvbGQpOworfQor
CitpbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUoaW50MzJfdCBkZXNpcmVk
VGhyZXNob2xkKQoreworICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAorICAgICAgICBzdGF0aWNf
Y2FzdDxkb3VibGU+KGRlc2lyZWRUaHJlc2hvbGQpICoKKyAgICAgICAgb3B0aW1pemF0aW9uVGhy
ZXNob2xkU2NhbGluZ0ZhY3RvcigpICoKKyAgICAgICAgKDEgPDwgcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKSkpOworfQorCitib29sIENvZGVCbG9jazo6Y2hlY2tJZk9wdGltaXphdGlvblRo
cmVzaG9sZFJlYWNoZWQoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChERkc6Oldv
cmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdHbG9iYWxERkdXb3JrbGlzdE9yTnVsbCgp
KSB7CisgICAgICAgIGlmICh3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShERkc6OkNvbXBpbGF0
aW9uS2V5KHRoaXMsIERGRzo6REZHTW9kZSkpCisgICAgICAgICAgICA9PSBERkc6OldvcmtsaXN0
OjpDb21waWxlZCkgeworICAgICAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICAKKyAg
ICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dCh0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6Om9wdGltaXplTmV4dEludm9jYXRpb24oKQor
eworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMs
ICI6IE9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7CisgICAgbV9qaXRFeGVjdXRlQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkb250
T3B0aW1pemVBbnl0aW1lU29vbigpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
KyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogTm90IG9wdGltaXppbmcgYW55dGltZSBzb29uLlxu
Iik7CisgICAgbV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworfQorCit2
b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCgpCit7CisgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1pemluZyBhZnRl
ciB3YXJtLXVwLlxuIik7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9qaXRFeGVjdXRlQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworI2VuZGlmCit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCit7CisgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0aW1p
emluZyBhZnRlciBsb25nIHdhcm0tdXAuXG4iKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBt
X2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYWRqdXN0ZWRDb3Vu
dGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSks
IHRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQorewor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6
IE9wdGltaXppbmcgc29vbi5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1faml0RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSksIHRoaXMpOworI2VuZGlmCit9
CisKK3ZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCp0
aGlzLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkuXG4iKTsKKyAgICBtX2ppdEV4
ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKworI2lmIEVOQUJM
RShERkdfSklUKQordm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2Vk
T25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgSklU
Q29kZTo6SklUVHlwZSB0eXBlID0gaml0VHlwZSgpOworICAgIGlmICh0eXBlICE9IEpJVENvZGU6
OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IGV4cGVjdGVkIHRvIGhh
dmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlLCAiXG4iKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiB0aGVS
ZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50KCk7CisgICAgaWYgKChyZXN1bHQgPT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKSAhPSAodGhlUmVwbGFjZW1lbnQgIT0gdGhpcykpIHsKKyAgICAgICAgZGF0
YUxvZygqdGhpcywgIjogd2UgaGF2ZSByZXN1bHQgPSAiLCByZXN1bHQsICIgYnV0ICIpOworICAg
ICAgICBpZiAodGhlUmVwbGFjZW1lbnQgPT0gdGhpcykKKyAgICAgICAgICAgIGRhdGFMb2coIndl
IGFyZSBvdXIgb3duIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGRhdGFMb2coIm91ciByZXBsYWNlbWVudCBpcyAiLCBwb2ludGVyRHVtcCh0aGVSZXBsYWNlbWVu
dCksICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNz
ZnVsOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVw
bGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAg
IGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1p
emVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQorICAgICAgICAvLyBmb3JjZU9w
dGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3
b24ndAorICAgICAgICAvLyBuZWNlc3NhcmlseSBndWFyYW50ZWUgYW55dGhpbmcuIFNvLCB3ZSBt
YWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoYXQKKyAgICAgICAgLy8gZnVuY3Rpb24gZW5kcyB1cCBi
ZWluZyBhIG5vLW9wLCB3ZSBzdGlsbCBldmVudHVhbGx5IHJldHJ5IGFuZCByZWFsaXplCisgICAg
ICAgIC8vIHRoYXQgd2UgaGF2ZSBvcHRpbWl6ZWQgY29kZSByZWFkeS4KKyAgICAgICAgb3B0aW1p
emVBZnRlcldhcm1VcCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbklu
dmFsaWRhdGVkOgorICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuCisg
ICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1V
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGRhdGFMb2coIlVucmVjb2du
aXplZCByZXN1bHQ6ICIsIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSwgIlxuIik7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworI2VuZGlmCisgICAgCit1aW50MzJfdCBD
b2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJl
c2hvbGQpCit7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KTsKKyAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRvbid0IHNhdHVyYXRl
LiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKKyAgICAvLyBlbm91Z2ggdGhhdCB0aGlzIGxv
b3Agd29uJ3QgaHVydCB1cy4KKyAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNpcmVkVGhyZXNob2xk
OworICAgIGZvciAodW5zaWduZWQgbiA9IGJhc2VsaW5lVmVyc2lvbigpLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpOyBuLS07KSB7CisgICAgICAgIHVuc2lnbmVkIG5ld1Jlc3VsdCA9IHJl
c3VsdCA8PCAxOworICAgICAgICBpZiAobmV3UmVzdWx0IDwgcmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgcmVz
dWx0ID0gbmV3UmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1aW50MzJf
dCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkKK3sKKyAg
ICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50
Rm9yUmVvcHRpbWl6YXRpb24oKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlwbGllcigpKTsKK30K
KwordWludDMyX3QgQ29kZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlv
bkZyb21Mb29wKCkKK3sKKyAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0
aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpICogY29kZVR5cGVU
aHJlc2hvbGRNdWx0aXBsaWVyKCkpOworfQorCitib29sIENvZGVCbG9jazo6c2hvdWxkUmVvcHRp
bWl6ZU5vdygpCit7CisgICAgcmV0dXJuIG9zckV4aXRDb3VudGVyKCkgPj0gZXhpdENvdW50VGhy
ZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNob3VsZFJl
b3B0aW1pemVGcm9tTG9vcE5vdygpCit7CisgICAgcmV0dXJuIG9zckV4aXRDb3VudGVyKCkgPj0g
ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpOworfQorI2VuZGlm
CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fYXJyYXlQcm9maWxlc1tpXS5ieXRlY29kZU9mZnNldCgpID09IGJ5dGVjb2RlT2Zmc2V0
KQorICAgICAgICAgICAgcmV0dXJuICZtX2FycmF5UHJvZmlsZXNbaV07CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCitBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgcmV0dXJuIGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zm
c2V0KTsKK30KKworQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmFkZEFycmF5UHJvZmlsZShjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAg
bV9hcnJheVByb2ZpbGVzLmFwcGVuZChBcnJheVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKKyAg
ICByZXR1cm4gJm1fYXJyYXlQcm9maWxlcy5sYXN0KCk7Cit9CisKK0FycmF5UHJvZmlsZSogQ29k
ZUJsb2NrOjphZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gYWRkQXJyYXlQ
cm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOworfQorCitBcnJheVByb2ZpbGUqIENvZGVC
bG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBBcnJheVByb2ZpbGUqIHJlc3Vs
dCA9IGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAocmVz
dWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBhZGRBcnJheVByb2ZpbGUo
bG9ja2VyLCBieXRlY29kZU9mZnNldCk7Cit9CisKK0FycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpn
ZXRPckFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXRPckFkZEFycmF5
UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKK30KKworI2lmIEVOQUJMRShERkdfSklU
KQorVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgQ29kZUJsb2Nr
Ojpjb2RlT3JpZ2lucygpCit7CisgICAgcmV0dXJuIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmNv
ZGVPcmlnaW5zOworfQorCitzaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRGR0lkZW50aWZpZXJz
KCkgY29uc3QKK3sKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOworfQorCitjb25zdCBJZGVudGlmaWVyJiBDb2Rl
QmxvY2s6OmlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdAoreworICAgIHNpemVfdCB1bmxpbmtl
ZElkZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKTsKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2VkSWRlbnRpZmllcnMp
CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihpbmRleCk7CisgICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKKyAgICByZXR1cm4g
bV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXggLSB1bmxpbmtlZElk
ZW50aWZpZXJzXTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcykKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIAorICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CisgICAg
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkg
dGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOworICAgICAgICB1bnNp
Z25lZCBudW1TYW1wbGVzID0gcHJvZmlsZS0+dG90YWxOdW1iZXJPZlNhbXBsZXMoKTsKKyAgICAg
ICAgaWYgKG51bVNhbXBsZXMgPiBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cykKKyAgICAg
ICAgICAgIG51bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgLy8gV2Ug
ZG9uJ3Qgd2FudCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90IHRvIGJlIGdpdmVuIG1v
cmUgd2VpZ2h0LgorICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzICs9IG51bVNhbXBs
ZXM7CisgICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgeworICAgICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvZmlsZS0+bnVtYmVyT2ZT
YW1wbGVzKCkgfHwgcHJvZmlsZS0+bV9wcmVkaWN0aW9uICE9IFNwZWNOb25lKQorICAgICAgICAg
ICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7CisgICAgICAgIHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgIH0KKyAgICAKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlcy5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb25zKGxvY2tlcik7CisjZW5kaWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnVw
ZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCkKK3sKKyAgICB1bnNpZ25lZCBpZ25vcmVk
VmFsdWUxLCBpZ25vcmVkVmFsdWUyOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRM
aXZlbmVzcyhpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKK30KKwordm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKQoreworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheVBy
b2ZpbGVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9hcnJheVByb2ZpbGVzW2ldLmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIHRoaXMpOworICAgIAorICAgIC8vIERvbid0IGNvdW50
IHRoZXNlIGVpdGhlciwgZm9yIHNpbWlsYXIgcmVhc29ucy4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlc1tpXS51cGRhdGVJbmRleGluZ1R5cGUoKTsKK30KKwordm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisgICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
KQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9ucygpOworICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsKK30KKworYm9vbCBD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRpbWl6aW5nICIsICp0aGlz
LCAiLi4uXG4iKTsKKworICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRp
b25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOworICAgIAorICAgIHVuc2lnbmVk
IG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRM
aXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJlck9mU2Ft
cGxlc0luUHJvZmlsZXMpOworCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICBkYXRhTG9nRigKKyAgICAgICAgICAgICJQcm9maWxlIGhvdG5lc3M6ICVsZiAoJXUgLyAl
dSksICVsZiAoJXUgLyAldSlcbiIsCisgICAgICAgICAgICAoZG91YmxlKW51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAorICAgICAg
ICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSwKKyAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCksCisgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKKyAgICB9CisKKyAg
ICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpID49IE9wdGlv
bnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCisgICAgICAgICYmICghdG90YWxOdW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMg
LyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUoKSkKKyAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKSArIDEg
Pj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKKyAgICBtX29wdGltaXphdGlvbkRlbGF5
Q291bnRlcisrOworICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50
RXhpdFNpdGVzKCkKK3sKKyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpOworICAgIEFTU0VSVChhbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVy
bmF0aXZlKCk7CisgICAgCisgICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKKyAgICBjYXNlIEpJVENv
ZGU6OkRGR0pJVDogeworICAgICAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUt
PmRmZygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaml0Q29kZS0+b3NyRXhp
dC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgREZHOjpPU1JFeGl0JiBleGl0ID0gaml0Q29k
ZS0+b3NyRXhpdFtpXTsKKyAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKKyAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhpcyBj
b2RlIHNpbmNlIHRoZSBGVEw6OkpJVENvZGU6Om9zckV4aXQKKyAgICAgICAgLy8gdmVjdG9yIGNv
bnRhaW5zIGEgdG90YWxseSBkaWZmZXJlbnQgdHlwZSwgdGhhdCBqdXN0IHNvIGhhcHBlbnMgdG8g
YmVoYXZlIGxpa2UKKyAgICAgICAgLy8gREZHOjpKSVRDb2RlOjpvc3JFeGl0LgorICAgICAgICBG
VEw6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmZ0bCgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgRlRMOjpPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAgICAg
ICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2lmIEVOQUJM
RShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCit2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmls
ZXMoKQoreworICAgIGRhdGFMb2coIlZhbHVlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMo
KTsgKytpKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1
ZVByb2ZpbGVzKGkpOworICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDAp
IHsKKyAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsK
KyAgICAgICAgICAgIGRhdGFMb2dGKCIgICBhcmcgPSAldTogIiwgaSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPm1fYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpICYmIHBy
b2ZpbGUtPm1fcHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgeworICAgICAgICAgICAgZGF0YUxvZ0Yo
IjxlbXB0eT5cbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
cHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nRigiXG4iKTsK
KyAgICB9CisgICAgZGF0YUxvZygiUmFyZUNhc2VQcm9maWxlIGZvciAiLCAqdGhpcywgIjpcbiIp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMo
KTsgKytpKSB7CisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJv
ZmlsZShpKTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5t
X2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIH0KK30KKyNlbmRpZiAv
LyBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorCit1bnNpZ25lZCBDb2RlQmxvY2s6OmZy
YW1lUmVnaXN0ZXJDb3VudCgpCit7CisgICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKKyAgICBjYXNl
IEpJVENvZGU6OkludGVycHJldGVyVGh1bms6CisgICAgICAgIHJldHVybiBMTEludDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKHRoaXMpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBjYXNlIEpJVENv
ZGU6OkJhc2VsaW5lSklUOgorICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRG
b3IodGhpcyk7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgorICAg
ICAgICByZXR1cm4gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+ZnJhbWVSZWdpc3RlckNvdW50Owor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK2ludCBDb2RlQmxvY2s6OnN0YWNrUG9pbnRlck9mZnNldCgpCit7CisgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudCgpIC0gMSkub2Zmc2V0
KCk7Cit9CisKK3NpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpCit7
CisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6Q29kZUJsb2NrIGJl
Zm9yZSBlaXRoZXIgbV92bSBvciB0aGUKKyAgICAvLyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGlu
aXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hhdCB3aWxsIHJlYWxseQor
ICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlzIHZhbHVlIHdoZW4gdGhl
IHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCisgICAgaWYgKCFtX3ZtKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBpZiAoISptX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3Jk
Rm9yQmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFzIGdvb2Qgb2YgYSBw
cmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KKyAgICAKKyAgICAvLyBCZSBjb25zZXJ2YXRpdmU6IHJl
dHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0JSBvZiB0aGUgdGlt
ZS4KKyAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRl
Y29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKKyAgICAgICAgbV92bS0+bWFjaGluZUNv
ZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFyZERldmlhdGlvbigp
OworICAgIAorICAgIC8vIEJlIHBhcmFub2lkOiBzaWxlbnRseSByZWplY3QgYm9ndXMgbXVsdGlw
aWVycy4gU2lsZW50bHkgZG9pbmcgdGhlICJ3cm9uZyIgdGhpbmcKKyAgICAvLyBoZXJlIGlzIE9L
LCBzaW5jZSB0aGlzIHdob2xlIG1ldGhvZCBpcyBqdXN0IGEgaGV1cmlzdGljLgorICAgIGlmICht
dWx0aXBsaWVyIDwgMCB8fCBtdWx0aXBsaWVyID4gMTAwMCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgZG91YmxlIGRvdWJsZVJlc3VsdCA9IG11bHRpcGxpZXIgKiBtX2luc3RydWN0aW9u
cy5zaXplKCk7CisgICAgCisgICAgLy8gQmUgZXZlbiBtb3JlIHBhcmFub2lkOiBzaWxlbnRseSBy
ZWplY3QgdmFsdWVzIHRoYXQgd29uJ3QgZml0IGludG8gYSBzaXplX3QuIElmCisgICAgLy8gdGhl
IGZ1bmN0aW9uIGlzIHNvIGh1Z2UgdGhhdCB3ZSBjYW4ndCBldmVuIGZpdCBpdCBpbnRvIHZpcnR1
YWwgbWVtb3J5IHRoZW4gd2UKKyAgICAvLyBzaG91bGQgcHJvYmFibHkgaGF2ZSBzb21lIG90aGVy
IGd1YXJkcyBpbiBwbGFjZSB0byBwcmV2ZW50IHVzIGZyb20gZXZlbiBnZXR0aW5nCisgICAgLy8g
dG8gdGhpcyBwb2ludC4KKyAgICBpZiAoZG91YmxlUmVzdWx0ID4gc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4oZG91YmxlUmVzdWx0KTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnVz
ZXNPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNv
dW50ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7ICkgewor
ICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdp
bltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSB7CisjZGVmaW5lIERFRklORV9PUChjdXJPcGNv
ZGUsIGxlbmd0aCkgICAgICAgIFwKKyAgICAgICAgY2FzZSBjdXJPcGNvZGU6ICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgaWYgKGN1ck9wY29kZSA9PSBvcGNvZGVJRCkgICAgICBc
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoREVGSU5FX09QKQorI3VuZGVmIERFRklO
RV9PUAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0R5bmFtaWNDYXN0
PFN5bWJvbFRhYmxlKj4obV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkpIHsKKyAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAg
ICAgICAgICAgYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gcHRyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7IHB0ciAhPSBlbmQ7
ICsrcHRyKSB7CisgICAgICAgICAgICAgICAgaWYgKHB0ci0+dmFsdWUudmFyT2Zmc2V0KCkgPT0g
VmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgd29uJ3Qgd29yayBmcm9tIHRoZSBjb21waWxhdGlvbiB0aHJlYWQuCisgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTUzMDAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB0ci0+a2V5LmdldCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmly
dHVhbFJlZ2lzdGVyID09IHRoaXNSZWdpc3RlcigpKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJ0aGlzIik7CisgICAgaWYgKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiYXJndW1lbnRzWyUzZF0iLCB2aXJ0dWFsUmVnaXN0
ZXIudG9Bcmd1bWVudCgpKTsKKworICAgIHJldHVybiAiIjsKK30KKworVmFsdWVQcm9maWxlKiBD
b2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNl
dCkKK3sKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNv
ZGVJRChpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IG9wY29kZUxlbmd0aChvcGNvZGVJRCk7CisgICAgcmV0dXJuIGluc3RydWN0
aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgbGVuZ3RoIC0gMV0udS5wcm9maWxlOworfQorCit2b2lk
IENvZGVCbG9jazo6dmFsaWRhdGUoKQoreworICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBs
aXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9l
c24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KKyAgICAKKyAgICBGYXN0Qml0VmVjdG9y
IGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KDAp
OworICAgIAorICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAhPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgeworICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWls
KCk7CisgICAgICAgIGRhdGFMb2coIiAgICBXcm9uZyBudW1iZXIgb2YgYml0cyBpbiByZXN1bHQh
XG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIiAgICBCaXQgY291bnQ6ICIsIGxpdmVBdEhlYWQubnVtQml0cygp
LCAiXG4iKTsKKyAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICB9CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DYWxsZWVMb2NhbHM7IGktLTspIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGxpdmVBdEhlYWRbaV0pIHsKKyAgICAgICAgICAgIGJlZ2luVmFsaWRh
dGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBWYXJpYWJsZSAiLCByZWcs
ICIgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhZC5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7CisgICAgICAgICAgICBlbmRWYWxpZGF0aW9u
RGlkRmFpbCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvZGVCbG9jazo6YmVnaW5W
YWxpZGF0aW9uRGlkRmFpbCgpCit7CisgICAgZGF0YUxvZygiVmFsaWRhdGlvbiBmYWlsdXJlIGlu
ICIsICp0aGlzLCAiOlxuIik7CisgICAgZGF0YUxvZygiXG4iKTsKK30KKwordm9pZCBDb2RlQmxv
Y2s6OmVuZFZhbGlkYXRpb25EaWRGYWlsKCkKK3sKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGR1
bXBCeXRlY29kZSgpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0YUxvZygiVmFsaWRhdGlv
biBmYWlsdXJlLlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCit7
CisgICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKKyAgICBBU1NFUlQobV9u
dW1CcmVha3BvaW50cyk7CisgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQorICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb0RlYnVnZ2VyQnJl
YWtwb2ludCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2Nr
OjpTdGVwcGluZ01vZGUgbW9kZSkKK3sKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CisgICAg
aWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjppc09wdGltaXppbmdK
SVQoaml0VHlwZSgpKSkKKyAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9E
ZWJ1Z2dlclN0ZXBwaW5nKTsKK30KKworUmFyZUNhc2VQcm9maWxlKiBDb2RlQmxvY2s6OmFkZFJh
cmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgbV9yYXJlQ2FzZVByb2Zp
bGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICByZXR1cm4g
Jm1fcmFyZUNhc2VQcm9maWxlcy5sYXN0KCk7Cit9CisKK1JhcmVDYXNlUHJvZmlsZSogQ29kZUJs
b2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQp
Cit7CisgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludD4oCisg
ICAgICAgIG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0
ZWNvZGVPZmZzZXQsCisgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsK
K30KKwordW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2Rl
T2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBSYXJlQ2FzZVByb2ZpbGUqIHByb2Zp
bGUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Cisg
ICAgaWYgKHByb2ZpbGUpCisgICAgICAgIHJldHVybiBwcm9maWxlLT5tX2NvdW50ZXI7CisgICAg
cmV0dXJuIDA7Cit9CisKK0FyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgcmV0dXJuIGFyaXRoUHJv
ZmlsZUZvclBDKGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldCk7Cit9CisK
K0FyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlvbiog
cGMpCit7CisgICAgYXV0byBvcGNvZGVJRCA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChwY1swXS51Lm9wY29kZSk7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgIGNhc2Ugb3Bf
bmVnYXRlOgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmlsZSo+KCZwY1sz
XS51Lm9wZXJhbmQpOworICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9iaXRhbmQ6Cisg
ICAgY2FzZSBvcF9iaXR4b3I6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6Cisg
ICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9kaXY6CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzRdLnUub3BlcmFuZCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQ29k
ZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorewor
ICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBpZiAoIXByb2ZpbGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcHJvZmlsZS0+dG9va1NwZWNpYWxGYXN0UGF0aCgpOworfQorCisj
aWYgRU5BQkxFKEpJVCkKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsKCkKK3sKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBjb21wdXRlQ2Fw
YWJpbGl0eUxldmVsKCk7CisgICAgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9IHJlc3VsdDsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3ZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNp
Y0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoUmVmQ291bnRlZEFycmF5PElu
c3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKQoreworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2so
KS0+aGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBieXRlY29kZU9mZnNldHMgPSB1bmxpbmtl
ZENvZGVCbG9jaygpLT5vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBvZmZzZXRzTGVuZ3RoID0gYnl0ZWNvZGVPZmZzZXRzLnNpemUo
KTsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykgeworICAgICAgICAvLyBCZWNhdXNlIG9wX3Byb2Zp
bGVfY29udHJvbF9mbG93IGlzIGVtaXR0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBiYXNp
YyBibG9jaywgZmluZGluZyAKKyAgICAgICAgLy8gdGhlIG5leHQgb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cgd2lsbCBnaXZlIHVzIHRoZSB0ZXh0IHJhbmdlIG9mIGEgc2luZ2xlIGJhc2ljIGJsb2Nr
LgorICAgICAgICBzaXplX3Qgc3RhcnRJZHggPSBieXRlY29kZU9mZnNldHNbaV07CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlv
bnNbc3RhcnRJZHhdLnUub3Bjb2RlKSA9PSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk7CisgICAg
ICAgIGludCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnNbc3RhcnRJZHggKyAx
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBiYXNpY0Jsb2NrRW5kT2Zmc2V0OworICAgICAgICBp
ZiAoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKSB7CisgICAgICAgICAgICBzaXplX3QgZW5kSWR4ID0g
Ynl0ZWNvZGVPZmZzZXRzW2kgKyAxXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkt
PmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNbZW5kSWR4XS51Lm9wY29kZSkg
PT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOworICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9m
ZnNldCA9IGluc3RydWN0aW9uc1tlbmRJZHggKyAxXS51Lm9wZXJhbmQgLSAxOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IG1fc291cmNlT2Zmc2V0
ICsgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLmxlbmd0aCgpIC0gMTsgLy8gT2Zm
c2V0IGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZS4KKyAgICAgICAgICAgIGJhc2ljQmxvY2tTdGFy
dE9mZnNldCA9IHN0ZDo6bWluKGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFzaWNCbG9ja0VuZE9m
ZnNldCk7IC8vIFNvbWUgc3RhcnQgb2Zmc2V0cyBtYXkgYmUgYXQgdGhlIGNsb3NpbmcgYnJhY2Us
IGVuc3VyZSBpdCBpcyB0aGUgb2Zmc2V0IGJlZm9yZS4KKyAgICAgICAgfQorCisgICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgY2hlY2sgYWxsb3dzIGZvciB0aGUgc2FtZSB0ZXh0dWFsIEphdmFTY3Jp
cHQgYmFzaWMgYmxvY2sgdG8gaGF2ZSBpdHMgYnl0ZWNvZGUgZW1pdHRlZCBtb3JlCisgICAgICAg
IC8vIHRoYW4gb25jZSBhbmQgc3RpbGwgcGxheSBuaWNlIHdpdGggdGhlIGNvbnRyb2wgZmxvdyBw
cm9maWxlci4gV2hlbiBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgaXMgbGFyZ2VyIHRoYW4gCisgICAg
ICAgIC8vIGJhc2ljQmxvY2tFbmRPZmZzZXQsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBieXRlY29k
ZSBnZW5lcmF0b3IgaGFzIGVtaXR0ZWQgY29kZSBmb3IgdGhlIHNhbWUgQVNUIG5vZGUgCisgICAg
ICAgIC8vIG1vcmUgdGhhbiBvbmNlIChmb3IgZXhhbXBsZTogRm9ySW5Ob2RlLCBGaW5hbGx5IGJs
b2NrcyBpbiBUcnlOb2RlLCBldGMpLiBUaG91Z2ggdGhlc2UgYXJlIGRpZmZlcmVudCAKKyAgICAg
ICAgLy8gYmFzaWMgYmxvY2tzIGF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhleSBhcmUgZ2VuZXJh
dGVkIGZyb20gdGhlIHNhbWUgdGV4dHVhbCBiYXNpYyBibG9jayBpbiB0aGUgSmF2YVNjcmlwdCAK
KyAgICAgICAgLy8gcHJvZ3JhbS4gVGhlIGNvbmRpdGlvbjogCisgICAgICAgIC8vIChiYXNpY0Js
b2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0KSAKKyAgICAgICAgLy8gaXMgZW5j
b3VudGVyZWQgd2hlbiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyBsaWVzIGFjcm9zcyB0aGUgYm91
bmRhcnkgb2YgdGhlc2UgZHVwbGljYXRlZCBieXRlY29kZSBiYXNpYyAKKyAgICAgICAgLy8gYmxv
Y2tzIGFuZCB0aGUgdGV4dHVhbCBvZmZzZXQgZ29lcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGR1cGxp
Y2F0ZWQgYmxvY2sgYmFjayB0byB0aGUgYmVnaW5uaW5nLiBUaGVzZSAKKyAgICAgICAgLy8gcmFu
Z2VzIGFyZSBkdW1teSByYW5nZXMgYW5kIGFyZSBpZ25vcmVkLiBUaGUgZHVwbGljYXRlZCBieXRl
Y29kZSBiYXNpYyBibG9ja3MgcG9pbnQgdG8gdGhlIHNhbWUgCisgICAgICAgIC8vIGludGVybmFs
IGRhdGEgc3RydWN0dXJlLCBzbyBpZiBhbnkgb2YgdGhlbSBleGVjdXRlLCBpdCB3aWxsIHJlY29y
ZCB0aGUgc2FtZSB0ZXh0dWFsIGJhc2ljIGJsb2NrIGluIHRoZSAKKyAgICAgICAgLy8gSmF2YVNj
cmlwdCBwcm9ncmFtIGFzIGV4ZWN1dGluZy4KKyAgICAgICAgLy8gQXQgdGhlIGJ5dGVjb2RlIGxl
dmVsLCB0aGlzIHNpdHVhdGlvbiBsb29rcyBsaWtlOgorICAgICAgICAvLyBqOiBvcF9wcm9maWxl
X2NvbnRyb2xfZmxvdyAoZnJvbSBqLT5rLCB3ZSBoYXZlIGJhc2ljQmxvY2tFbmRPZmZzZXQgPCBi
YXNpY0Jsb2NrU3RhcnRPZmZzZXQpCisgICAgICAgIC8vIC4uLgorICAgICAgICAvLyBrOiBvcF9w
cm9maWxlX2NvbnRyb2xfZmxvdyAod2Ugd2FudCB0byBza2lwIG92ZXIgdGhlIGotPmsgYmxvY2sg
YW5kIHN0YXJ0IGZyZXNoIGF0IG9mZnNldCBrIGFzIHRoZSBzdGFydCBvZiBhIG5ldyBiYXNpYyBi
bG9jayBrLT5tKS4KKyAgICAgICAgLy8gLi4uCisgICAgICAgIC8vIG06IG9wX3Byb2ZpbGVfY29u
dHJvbF9mbG93CisgICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0
YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsgMSA8IG9mZnNldHNM
ZW5ndGgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJsb2NrcyBhdCB0aGUg
ZW5kIG9mIGEgQ29kZUJsb2NrLgorICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW3N0YXJ0SWR4ICsg
MV0udS5iYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmR1
bW15QmFzaWNCbG9jaygpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRy
b2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVyU2NyaXB0RXhlY3V0
YWJsZSgpLT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRP
ZmZzZXQpOworCisgICAgICAgIC8vIEZpbmQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBlbmNsb3Nl
ZCB3aXRoaW4gdGhlIHJhbmdlOiBbYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5k
T2Zmc2V0XQorICAgICAgICAvLyBhbmQgaW5zZXJ0IHRoZXNlIGZ1bmN0aW9ucycgc3RhcnQvZW5k
IG9mZnNldHMgYXMgZ2FwcyBpbiB0aGUgY3VycmVudCBCYXNpY0Jsb2NrTG9jYXRpb24uCisgICAg
ICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0
ZXh0IG9mIGEgSmF2YVNjcmlwdCBwcm9ncmFtLCAKKyAgICAgICAgLy8gZnVuY3Rpb24gbGl0ZXJh
bHMgZm9ybSBuZXcgYmFzaWMgYmxvY2tzIGJvdW5kYXJpZXMsIGJ1dCB0aGV5IGFyZW4ndCByZXBy
ZXNlbnRlZCAKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBDb2RlQmxvY2sncyBpbnN0cnVjdGlvbiBz
dHJlYW0uCisgICAgICAgIGF1dG8gaW5zZXJ0RnVuY3Rpb25HYXBzID0gW2Jhc2ljQmxvY2tMb2Nh
dGlvbiwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0XSAoY29uc3Qg
V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGZ1bmN0aW9uRXhlY3V0YWJsZSkgewor
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOworICAgICAgICAgICAg
aW50IGZ1bmN0aW9uU3RhcnQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KTsKKyAgICAgICAgICAgIGludCBmdW5jdGlvbkVuZCA9IGV4ZWN1dGFibGUtPnR5cGVQcm9maWxp
bmdFbmRPZmZzZXQoKTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvblN0YXJ0ID49IGJhc2ljQmxv
Y2tTdGFydE9mZnNldCAmJiBmdW5jdGlvbkVuZCA8PSBiYXNpY0Jsb2NrRW5kT2Zmc2V0KQorICAg
ICAgICAgICAgICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+aW5zZXJ0R2FwKGZ1bmN0aW9uU3RhcnQs
IGZ1bmN0aW9uRW5kKTsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKGNvbnN0IFdyaXRlQmFy
cmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVjdXRhYmxlIDogbV9mdW5jdGlvbkRlY2xzKQor
ICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBzKGV4ZWN1dGFibGUpOworICAgICAgICBmb3Ig
KGNvbnN0IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVjdXRhYmxlIDogbV9m
dW5jdGlvbkV4cHJzKQorICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBzKGV4ZWN1dGFibGUp
OworCisgICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFzaWNCbG9ja0xvY2F0
aW9uID0gYmFzaWNCbG9ja0xvY2F0aW9uOworICAgIH0KK30KKworI2lmIEVOQUJMRShKSVQpCit2
b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9D
b2RlT3JpZ2luTWFwPiYmIG1hcCkgCit7IAorICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1hcCk7Cit9CisKK09wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZv
aWQqIHBjKQoreworICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7CisgICAgICAgIGlmIChP
cHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKworICAgIGZv
ciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJl
Z2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
ID0gKml0ZXI7CisgICAgICAgIGlmIChzdHViLT5jb250YWluc1BDKHBjKSkKKyAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2luKTsKKyAgICB9CisK
KyAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1faml0Q29kZS0+Zmlu
ZFBDKHRoaXMsIHBjKSkKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisKKyAgICByZXR1cm4g
TnVsbG9wdDsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCitPcHRpb25hbDx1bnNpZ25lZD4g
Q29kZUJsb2NrOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKK3sKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNvZGVPZmZzZXQ7
CisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlwZSgpOworICAgIGlm
IChqaXRUeXBlID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0VHlwZSA9PSBKSVRD
b2RlOjpCYXNlbGluZUpJVCkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGJ5dGVjb2Rl
T2Zmc2V0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CisjZWxzZQorICAgICAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihjYWxsU2l0ZUluZGV4
LmJpdHMoKSk7CisgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVj
dGlvbnMoKS5iZWdpbigpOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChqaXRUeXBlID09IEpJVENv
ZGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVENvZGU6OkZUTEpJVCkgeworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3JpZ2luKGNhbGxTaXRl
SW5kZXgpKTsKKyAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBjb2RlT3JpZ2luKGNhbGxTaXRl
SW5kZXgpOworICAgICAgICBieXRlY29kZU9mZnNldCA9IG9yaWdpbi5ieXRlY29kZUluZGV4Owor
I2Vsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAg
IH0KKworICAgIHJldHVybiBieXRlY29kZU9mZnNldDsKK30KKworaW50MzJfdCBDb2RlQmxvY2s6
OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKHVubGlu
a2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIE1peGVkVHJpU3RhdGU6
CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CisgICAgY2FzZSBGYWxzZVRyaVN0YXRlOgorICAg
ICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRydWVUcmlTdGF0ZToKKyAgICAg
ICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldh
cm1VcCgpCit7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJl
c2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMp
OworfQorCit2b2lkIENvZGVCbG9jazo6aml0U29vbigpCit7CisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3Rh
dHMoKQoreworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGRvdWJsZSBudW1BZGRzID0g
MC4wOworICAgIGRvdWJsZSB0b3RhbEFkZFNpemUgPSAwLjA7CisgICAgZG91YmxlIG51bU11bHMg
PSAwLjA7CisgICAgZG91YmxlIHRvdGFsTXVsU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtTmVn
cyA9IDAuMDsKKyAgICBkb3VibGUgdG90YWxOZWdTaXplID0gMC4wOworICAgIGRvdWJsZSBudW1T
dWJzID0gMC4wOworICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CisKKyAgICBhdXRvIGNv
dW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICBmb3IgKEpJVEFk
ZElDKiBhZGRJQyA6IGNvZGVCbG9jay0+bV9hZGRJQ3MpIHsKKyAgICAgICAgICAgIG51bUFkZHMr
KzsKKyAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogY29kZUJsb2NrLT5tX211bElD
cykgeworICAgICAgICAgICAgbnVtTXVscysrOworICAgICAgICAgICAgdG90YWxNdWxTaXplICs9
IG11bElDLT5jb2RlU2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChKSVROZWdJQyog
bmVnSUMgOiBjb2RlQmxvY2stPm1fbmVnSUNzKSB7CisgICAgICAgICAgICBudW1OZWdzKys7Cisg
ICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVCbG9jay0+bV9zdWJJQ3MpIHsK
KyAgICAgICAgICAgIG51bVN1YnMrKzsKKyAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJ
Qy0+Y29kZVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7CisKKyAgICBkYXRhTG9n
KCJOdW0gQWRkczogIiwgbnVtQWRkcywgIlxuIik7CisgICAgZGF0YUxvZygiVG90YWwgQWRkIHNp
emUgaW4gYnl0ZXM6ICIsIHRvdGFsQWRkU2l6ZSwgIlxuIik7CisgICAgZGF0YUxvZygiQXZlcmFn
ZSBBZGQgc2l6ZTogIiwgdG90YWxBZGRTaXplIC8gbnVtQWRkcywgIlxuIik7CisgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICBkYXRhTG9nKCJOdW0gTXVsczogIiwgbnVtTXVscywgIlxuIik7CisgICAg
ZGF0YUxvZygiVG90YWwgTXVsIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsTXVsU2l6ZSwgIlxuIik7
CisgICAgZGF0YUxvZygiQXZlcmFnZSBNdWwgc2l6ZTogIiwgdG90YWxNdWxTaXplIC8gbnVtTXVs
cywgIlxuIik7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCJOdW0gTmVnczogIiwg
bnVtTmVncywgIlxuIik7CisgICAgZGF0YUxvZygiVG90YWwgTmVnIHNpemUgaW4gYnl0ZXM6ICIs
IHRvdGFsTmVnU2l6ZSwgIlxuIik7CisgICAgZGF0YUxvZygiQXZlcmFnZSBOZWcgc2l6ZTogIiwg
dG90YWxOZWdTaXplIC8gbnVtTmVncywgIlxuIik7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBk
YXRhTG9nKCJOdW0gU3ViczogIiwgbnVtU3VicywgIlxuIik7CisgICAgZGF0YUxvZygiVG90YWwg
U3ViIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsU3ViU2l6ZSwgIlxuIik7CisgICAgZGF0YUxvZygi
QXZlcmFnZSBTdWIgc2l6ZTogIiwgdG90YWxTdWJTaXplIC8gbnVtU3VicywgIlxuIik7CisKKyAg
ICBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisjZW5kaWYKK30KKworQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KCkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBhbmFseXNp
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPih0aGlzKTsKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IGlmICghbV9saXZlbmVzc0FuYWx5c2lzKQorICAgICAgICAgICAgbV9saXZlbmVzc0FuYWx5c2lz
ID0gV1RGTW92ZShhbmFseXNpcyk7CisgICAgICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lz
OworICAgIH0KK30KKworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNDYzOCArMjgsMjAgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0KLSNp
bmNsdWRlICJBcml0aFByb2ZpbGUuaCIKLSNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIK
LSNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCi0jaW5jbHVkZSAiQ2Fs
bExpbmtTdGF0dXMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKLSNpbmNsdWRlICJERkdD
YXBhYmlsaXRpZXMuaCIKLSNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJERkdEcml2
ZXIuaCIKLSNpbmNsdWRlICJERkdKSVRDb2RlLmgiCi0jaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
LSNpbmNsdWRlICJEZWJ1Z2dlci5oIgotI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCIKLSNpbmNsdWRlICJHZXRQdXRJbmZvLmgiCi0jaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgi
Ci0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJK
SVRNYXRoSUMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgotI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAiSlNNb2R1
bGVFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkxMSW50RGF0YS5oIgotI2luY2x1ZGUgIkxMSW50
RW50cnlwb2ludC5oIgotI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKLSNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJSZWR1Y2VXaGl0ZXNwYWNlLmgiCi0jaW5jbHVkZSAiUmVwYXRjaC5oIgotI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2Fj
aGUuaCIKLSNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKLSNpbmNsdWRlICJVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmgiCi0jaW5jbHVkZSAiVk1JbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL0JhZ1RvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KLQotI2lmIEVO
QUJMRShKSVQpCi0jaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoRlRMX0pJVCkKLSNpbmNsdWRlICJGVExKSVRDb2RlLmgiCi0jZW5kaWYKKyNp
bmNsdWRlICJXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29u
c3QgQ2xhc3NJbmZvIENvZGVCbG9jazo6c19pbmZvID0gewotICAgICJDb2RlQmxvY2siLCAwLCAw
LAotICAgIENSRUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xhc3NJ
bmZvIEZ1bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7Ci0gICAgIkZ1bmN0aW9uQ29kZUJsb2Nr
IiwgJkJhc2U6OnNfaW5mbywgMCwKLSAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29k
ZUJsb2NrKQotfTsKLQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIGNvbnN0IENsYXNzSW5mbyBX
ZWJBc3NlbWJseUNvZGVCbG9jazo6c19pbmZvID0gewogICAgICJXZWJBc3NlbWJseUNvZGVCbG9j
ayIsICZCYXNlOjpzX2luZm8sIDAsCiAgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJs
eUNvZGVCbG9jaykKIH07Ci0jZW5kaWYKLQotY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9j
azo6c19pbmZvID0gewotICAgICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAot
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoR2xvYmFsQ29kZUJsb2NrKQotfTsKLQotY29uc3QgQ2xh
c3NJbmZvIFByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiUHJvZ3JhbUNvZGVCbG9j
ayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29k
ZUJsb2NrKQotfTsKIAotY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNf
aW5mbyA9IHsKLSAgICAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAs
Ci0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQotfTsKLQot
Y29uc3QgQ2xhc3NJbmZvIEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKLSAgICAiRXZhbENvZGVC
bG9jayIsICZCYXNlOjpzX2luZm8sIDAsCi0gICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29k
ZUJsb2NrKQotfTsKLQotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCi17Ci0gICAganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNv
ZGVCbG9jaygpOwotfQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogdm9pZCBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAganNDYXN0PFdlYkFzc2Vt
Ymx5Q29kZUJsb2NrKj4oY2VsbCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOwogfQogI2VuZGlm
CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAg
anNDYXN0PFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKLX0K
LQotdm9pZCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jaygpOwotfQotCi12b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQotewotICAgIGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2Nr
KCk7Ci19Ci0KLUNTdHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAotewotICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICAgICAgcmV0
dXJuICI8Z2xvYmFsPiI7Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgcmV0dXJuICI8ZXZh
bD4iOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgp
OwotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlPiI7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDAp
OwotICAgIH0KLX0KLQotYm9vbCBDb2RlQmxvY2s6Omhhc0hhc2goKSBjb25zdAotewotICAgIHJl
dHVybiAhIW1faGFzaDsKLX0KLQotYm9vbCBDb2RlQmxvY2s6OmlzU2FmZVRvQ29tcHV0ZUhhc2go
KSBjb25zdAotewotICAgIHJldHVybiAhaXNDb21waWxhdGlvblRocmVhZCgpOwotfQotCi1Db2Rl
QmxvY2tIYXNoIENvZGVCbG9jazo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhc2gpIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNTYWZlVG9Db21wdXRlSGFzaCgpKTsKLSAgICAgICAg
bV9oYXNoID0gQ29kZUJsb2NrSGFzaChvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCks
IHNwZWNpYWxpemF0aW9uS2luZCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1faGFzaDsKLX0KLQot
Q1N0cmluZyBDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0Ci17Ci0gICAgaWYg
KGNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlKQotICAgICAgICByZXR1cm4gb3duZXJTY3JpcHRF
eGVjdXRhYmxlKCktPnNvdXJjZSgpLnRvVVRGOCgpOwotICAgIAotICAgIFNvdXJjZVByb3ZpZGVy
KiBwcm92aWRlciA9IHNvdXJjZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSk7Ci0gICAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkID0gZXhlY3V0YWJsZS0+dW5saW5r
ZWRFeGVjdXRhYmxlKCk7Ci0gICAgdW5zaWduZWQgdW5saW5rZWRTdGFydE9mZnNldCA9IHVubGlu
a2VkLT5zdGFydE9mZnNldCgpOwotICAgIHVuc2lnbmVkIGxpbmtlZFN0YXJ0T2Zmc2V0ID0gZXhl
Y3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKLSAgICBpbnQgZGVsdGEgPSBsaW5rZWRT
dGFydE9mZnNldCAtIHVubGlua2VkU3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgcmFuZ2VTdGFy
dCA9IGRlbHRhICsgdW5saW5rZWQtPnVubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoKTsKLSAgICB1
bnNpZ25lZCByYW5nZUVuZCA9IGRlbHRhICsgdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCkgKyB1bmxp
bmtlZC0+c291cmNlTGVuZ3RoKCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZygKLSAgICAgICAgImZ1
bmN0aW9uICIsCi0gICAgICAgIHByb3ZpZGVyLT5zb3VyY2UoKS5zdWJzdHJpbmcocmFuZ2VTdGFy
dCwgcmFuZ2VFbmQgLSByYW5nZVN0YXJ0KS51dGY4KCkpOwotfQotCi1DU3RyaW5nIENvZGVCbG9j
azo6c291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlZHVjZVdoaXRl
c3BhY2Uoc291cmNlQ29kZUZvclRvb2xzKCkpOwotfQotCi1DU3RyaW5nIENvZGVCbG9jazo6aGFz
aEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGhhc0hhc2goKSB8fCBpc1Nh
ZmVUb0NvbXB1dGVIYXNoKCkpCi0gICAgICAgIHJldHVybiB0b0NTdHJpbmcoaGFzaCgpKTsKLSAg
ICByZXR1cm4gIjxuby1oYXNoPiI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdK
SVRUeXBlKFByaW50U3RyZWFtJiBvdXQsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaEFzU3RyaW5nSWZQb3Nz
aWJsZSgpKTsKLSAgICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+Iik7Ci0g
ICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKLSAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoYWx0
ZXJuYXRpdmUoKSksICItPiIpOwotICAgIG91dC5wcmludChSYXdQb2ludGVyKG93bmVyRXhlY3V0
YWJsZSgpKSwgIiwgIiwgaml0VHlwZSwgY29kZVR5cGUoKSk7Ci0KLSAgICBpZiAoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpCi0gICAgICAgIG91dC5wcmludChzcGVjaWFsaXphdGlvbktpbmQo
KSk7Ci0gICAgb3V0LnByaW50KCIsICIsIGluc3RydWN0aW9uQ291bnQoKSk7Ci0gICAgaWYgKHRo
aXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCkKLSAgICAgICAgb3V0LnByaW50KCIgKFNob3VsZEFsd2F5c0JlSW5saW5lZCkiKTsK
LSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCi0gICAgICAg
IG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKLSAgICBpZiAob3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPm5ldmVyT3B0aW1pemUoKSkKLSAgICAgICAgb3V0LnByaW50KCIgKE5ldmVyT3B0aW1p
emUpIik7Ci0gICAgZWxzZSBpZiAob3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPm5ldmVyRlRMT3B0
aW1pemUoKSkKLSAgICAgICAgb3V0LnByaW50KCIgKE5ldmVyRlRMT3B0aW1pemUpIik7Ci0gICAg
aWYgKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5kaWRUcnlUb0VudGVySW5Mb29wKCkpCi0gICAg
ICAgIG91dC5wcmludCgiIChEaWRUcnlUb0VudGVySW5Mb29wKSIpOwotICAgIGlmIChvd25lclNj
cmlwdEV4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIG91dC5wcmludCgiIChT
dHJpY3RNb2RlKSIpOwotICAgIGlmIChtX2RpZEZhaWxKSVRDb21waWxhdGlvbikKLSAgICAgICAg
b3V0LnByaW50KCIgKEpJVEZhaWwpIik7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpCYXNlbGluZUpJVCAmJiBtX2RpZEZhaWxGVExDb21waWxhdGlvbikKLSAgICAgICAgb3V0
LnByaW50KCIgKEZUTEZhaWwpIik7Ci0gICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCAmJiBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwpCi0gICAgICAgIG91dC5w
cmludCgiIChIYWRGVExSZXBsYWNlbWVudCkiKTsKLSAgICBvdXQucHJpbnQoIl0iKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBkdW1w
QXNzdW1pbmdKSVRUeXBlKG91dCwgaml0VHlwZSgpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgaWRO
YW1lKGludCBpZDAsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAgIHJldHVybiB0b0NT
dHJpbmcoaWRlbnQuaW1wbCgpLCAiKEBpZCIsIGlkMCwgIikiKTsKLX0KLQotQ1N0cmluZyBDb2Rl
QmxvY2s6OnJlZ2lzdGVyTmFtZShpbnQgcikgY29uc3QKLXsKLSAgICBpZiAoaXNDb25zdGFudFJl
Z2lzdGVySW5kZXgocikpCi0gICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7Ci0KLSAgICBy
ZXR1cm4gdG9DU3RyaW5nKFZpcnR1YWxSZWdpc3RlcihyKSk7Ci19Ci0KLUNTdHJpbmcgQ29kZUJs
b2NrOjpjb25zdGFudE5hbWUoaW50IGluZGV4KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXRDb25zdGFudChpbmRleCk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCBW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgpLCAiKSIpOwotfQotCi1zdGF0aWMgQ1N0cmluZyByZWdleHBU
b1NvdXJjZVN0cmluZyhSZWdFeHAqIHJlZ0V4cCkKLXsKLSAgICBjaGFyIHBvc3RmaXhbNV0gPSB7
ICcvJywgMCwgMCwgMCwgMCB9OwotICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHJlZ0V4cC0+
Z2xvYmFsKCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnZyc7Ci0gICAgaWYgKHJlZ0V4
cC0+aWdub3JlQ2FzZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwotICAgIGlm
IChyZWdFeHAtPm11bHRpbGluZSgpKQotICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKLSAg
ICBpZiAocmVnRXhwLT5zdGlja3koKSkKLSAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICd5JzsK
LSAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpCi0gICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAn
dSc7Ci0KLSAgICByZXR1cm4gdG9DU3RyaW5nKCIvIiwgcmVnRXhwLT5wYXR0ZXJuKCkuaW1wbCgp
LCBwb3N0Zml4KTsKLX0KLQotc3RhdGljIENTdHJpbmcgcmVnZXhwTmFtZShpbnQgcmUsIFJlZ0V4
cCogcmVnZXhwKQotewotICAgIHJldHVybiB0b0NTdHJpbmcocmVnZXhwVG9Tb3VyY2VTdHJpbmco
cmVnZXhwKSwgIihAcmUiLCByZSwgIikiKTsKLX0KLQotTkVWRVJfSU5MSU5FIHN0YXRpYyBjb25z
dCBjaGFyKiBkZWJ1Z0hvb2tOYW1lKGludCBkZWJ1Z0hvb2tUeXBlKQotewotICAgIHN3aXRjaCAo
c3RhdGljX2Nhc3Q8RGVidWdIb29rVHlwZT4oZGVidWdIb29rVHlwZSkpIHsKLSAgICAgICAgY2Fz
ZSBEaWRFbnRlckNhbGxGcmFtZToKLSAgICAgICAgICAgIHJldHVybiAiZGlkRW50ZXJDYWxsRnJh
bWUiOwotICAgICAgICBjYXNlIFdpbGxMZWF2ZUNhbGxGcmFtZToKLSAgICAgICAgICAgIHJldHVy
biAid2lsbExlYXZlQ2FsbEZyYW1lIjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVN0YXRlbWVu
dDoKLSAgICAgICAgICAgIHJldHVybiAid2lsbEV4ZWN1dGVTdGF0ZW1lbnQiOwotICAgICAgICBj
YXNlIFdpbGxFeGVjdXRlRXhwcmVzc2lvbjoKLSAgICAgICAgICAgIHJldHVybiAid2lsbEV4ZWN1
dGVFeHByZXNzaW9uIjsKLSAgICAgICAgY2FzZSBXaWxsRXhlY3V0ZVByb2dyYW06Ci0gICAgICAg
ICAgICByZXR1cm4gIndpbGxFeGVjdXRlUHJvZ3JhbSI7Ci0gICAgICAgIGNhc2UgRGlkRXhlY3V0
ZVByb2dyYW06Ci0gICAgICAgICAgICByZXR1cm4gImRpZEV4ZWN1dGVQcm9ncmFtIjsKLSAgICAg
ICAgY2FzZSBEaWRSZWFjaEJyZWFrcG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gImRpZFJlYWNo
QnJlYWtwb2ludCI7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gIiI7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludFVuYXJ5T3AoUHJpbnRT
dHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0
aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotCi0gICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCBvcCk7Ci0gICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mIG91dCwgRXhl
Y1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0
IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCBy
MSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgb3ApOwotICAg
IG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OnByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBpbnQg
bG9jYXRpb24sIGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIl
cywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiAr
IG9mZnNldCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmludEdldEJ5SWRPcChQcmludFN0cmVh
bSYgb3V0LCBFeGVjU3RhdGUqIGV4ZWMsIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiBpdCkKLXsKLSAgICBjb25zdCBjaGFyKiBvcDsKLSAgICBzd2l0Y2ggKGV4ZWMtPmludGVycHJl
dGVyKCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKLSAgICBjYXNlIG9wX2dldF9ieV9p
ZDoKLSAgICAgICAgb3AgPSAiZ2V0X2J5X2lkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9nZXRfYnlfaWRfcHJvdG9fbG9hZDoKLSAgICAgICAgb3AgPSAiZ2V0X2J5X2lkX3Byb3RvX2xv
YWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2dldF9ieV9pZF91bnNldDoKLSAgICAg
ICAgb3AgPSAiZ2V0X2J5X2lkX3Vuc2V0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9n
ZXRfYXJyYXlfbGVuZ3RoOgotICAgICAgICBvcCA9ICJhcnJheV9sZW5ndGgiOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQotICAgICAg
ICBvcCA9IDA7Ci0jZW5kaWYKLSAgICB9Ci0gICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IGlkMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgb3ApOwotICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQw
KSkuZGF0YSgpKTsKLSAgICBpdCArPSA0OyAvLyBJbmNyZW1lbnQgdXAgdG8gdGhlIHZhbHVlIHBy
b2ZpbGVyLgotfQotCi1zdGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IGNoYXIqIG5hbWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKLXsKLSAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG91dC5wcmludGYoIiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOwotICAgIAotICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KGlkZW50Lmlt
cGwoKSk7Ci0gICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQotICAgICAgICBvdXQucHJp
bnRmKCIgKG9mZnNldCA9ICVkKSIsIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBDaGFp
bihQcmludFN0cmVhbSYgb3V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KQotewotICAgIG91dC5wcmludGYoImNoYWluID0gJXA6IFsiLCBjaGFpbik7Ci0g
ICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiog
Y3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5oZWFkKCk7Ci0gICAgICAgICAqY3VycmVudFN0cnVj
dHVyZTsKLSAgICAgICAgICsrY3VycmVudFN0cnVjdHVyZSkgewotICAgICAgICBpZiAoZmlyc3Qp
Ci0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
dXQucHJpbnRmKCIsICIpOwotICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIGN1
cnJlbnRTdHJ1Y3R1cmUtPmdldCgpLCBpZGVudCk7Ci0gICAgfQotICAgIG91dC5wcmludGYoIl0i
KTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3Ry
ZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01h
cCYgbWFwKQotewotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyBsb2NhdGlvbjsKLQotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRl
bnRpZmllcihpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgIAotICAgIFVOVVNFRF9QQVJB
TShpZGVudCk7IC8vIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHNodXQgdXAgaW4gY2VydGFpbiBwbGF0
Zm9ybSBjb25maWd1cmF0aW9ucy4KLSAgICAKLSAgICBpZiAoZXhlYy0+aW50ZXJwcmV0ZXIoKS0+
Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUpID09IG9wX2dldF9hcnJheV9sZW5n
dGgpCi0gICAgICAgIG91dC5wcmludGYoIiBsbGludChhcnJheV9sZW5ndGgpIik7Ci0gICAgZWxz
ZSBpZiAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVy
ZUlEKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKLSAgICAgICAgb3V0LnByaW50ZigiIGxsaW50
KCIpOwotICAgICAgICBkdW1wU3RydWN0dXJlKG91dCwgInN0cnVjdCIsIHN0cnVjdHVyZSwgaWRl
bnQpOwotICAgICAgICBvdXQucHJpbnRmKCIpIik7Ci0gICAgICAgIGlmIChleGVjLT5pbnRlcnBy
ZXRlcigpLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvblswXS51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5
X2lkX3Byb3RvX2xvYWQpCi0gICAgICAgICAgICBvdXQucHJpbnRmKCIgcHJvdG8oJXApIiwgaW5z
dHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgIGlm
IChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YlB0ciA9IG1hcC5nZXQoQ29kZU9yaWdpbihsb2NhdGlv
bikpKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdHViUHRyOwot
ICAgICAgICBpZiAoc3R1YkluZm8ucmVzZXRCeUdDKQotICAgICAgICAgICAgb3V0LnByaW50KCIg
KFJlc2V0IEJ5IEdDKSIpOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50ZigiIGppdCgiKTsK
LSAgICAgICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBudWxscHRy
OwotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YiA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKLSAgICAgICAgY2FzZSBD
YWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOwot
ICAgICAgICAgICAgYmFzZVN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENhY2hl
VHlwZTo6U3R1YjoKLSAgICAgICAgICAgIG91dC5wcmludGYoInN0dWIiKTsKLSAgICAgICAgICAg
IHN0dWIgPSBzdHViSW5mby51LnN0dWI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDYWNoZVR5cGU6OlVuc2V0OgotICAgICAgICAgICAgb3V0LnByaW50ZigidW5zZXQiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENhY2hlVHlwZTo6QXJyYXlMZW5ndGg6Ci0g
ICAgICAgICAgICBvdXQucHJpbnRmKCJBcnJheUxlbmd0aCIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoYmFzZVN0cnVjdHVyZSkgewotICAgICAgICAgICAgb3V0LnByaW50ZigiLCAiKTsKLSAg
ICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0IiwgYmFzZVN0cnVjdHVyZSwgaWRl
bnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0dWIpCi0gICAgICAgICAgICBvdXQucHJp
bnQoIiwgIiwgKnN0dWIpOwotCi0gICAgICAgIG91dC5wcmludGYoIikiKTsKLSAgICB9Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpw
cmludFB1dEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYgb3V0LCBpbnQgbG9jYXRpb24sIGNv
bnN0IFN0dWJJbmZvTWFwJiBtYXApCi17Ci0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGxvY2F0aW9uOwotCi0gICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBpZGVudGlmaWVyKGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgCi0g
ICAgVU5VU0VEX1BBUkFNKGlkZW50KTsgLy8gdGVsbCB0aGUgY29tcGlsZXIgdG8gc2h1dCB1cCBp
biBjZXJ0YWluIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zLgotCi0gICAgb3V0LnByaW50KCIsICIs
IGluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzKTsKLSAgICAKLSAgICBpZiAoU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZUlEKSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KHN0cnVjdHVyZUlEKTsKLSAgICAgICAgb3V0LnByaW50KCIgbGxpbnQoIik7Ci0gICAgICAgIGlm
IChTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uWzZdLnUuc3RydWN0dXJl
SUQpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV92bS0+aGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKLSAgICAgICAgICAgIGR1bXBT
dHJ1Y3R1cmUob3V0LCAicHJldiIsIHN0cnVjdHVyZSwgaWRlbnQpOwotICAgICAgICAgICAgb3V0
LnByaW50KCIsICIpOwotICAgICAgICAgICAgZHVtcFN0cnVjdHVyZShvdXQsICJuZXh0IiwgbmV3
U3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlQ2hhaW4qIGNoYWlu
ID0gaW5zdHJ1Y3Rpb25bN10udS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKSkgewotICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiLCAiKTsKLSAgICAgICAgICAgICAgICBkdW1wQ2hhaW4ob3V0LCBjaGFp
biwgaWRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGR1
bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3RydWN0dXJlLCBpZGVudCk7Ci0gICAgICAgIG91
dC5wcmludCgiKSIpOwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViUHRyID0gbWFwLmdldChDb2RlT3JpZ2luKGxvY2F0aW9uKSkpIHsKLSAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0dWJQdHI7Ci0gICAgICAgIGlm
IChzdHViSW5mby5yZXNldEJ5R0MpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAoUmVzZXQgQnkg
R0MpIik7Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnRmKCIgaml0KCIpOwotICAgICAgICAK
LSAgICAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKLSAgICAgICAgY2FzZSBDYWNo
ZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgotICAgICAgICAgICAgb3V0LnByaW50KCJyZXBsYWNlLCAi
KTsKLSAgICAgICAgICAgIGR1bXBTdHJ1Y3R1cmUob3V0LCAic3RydWN0Iiwgc3R1YkluZm8udS5i
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBpZGVudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgICAgIG91dC5w
cmludCgic3R1YiwgIiwgKnN0dWJJbmZvLnUuc3R1Yik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCJ1bnNldCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50ZigiKSIpOwotICAgIH0KLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50
Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNo
ZUR1bXBNb2RlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nLCBjb25zdCBDYWxsTGlua0luZm9N
YXAmIG1hcCkKLXsKLSAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgaW50IGZ1
bmMgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgYXJnQ291bnQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQu
cHJpbnQocmVnaXN0ZXJOYW1lKGRzdCksICIsICIsIHJlZ2lzdGVyTmFtZShmdW5jKSwgIiwgIiwg
YXJnQ291bnQsICIsICIsIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICBvdXQucHJpbnQoIiAodGhpcyBh
dCAiLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCAtcmVnaXN0ZXJPZmZzZXQpLCAiKSIp
OwotICAgIGlmIChjYWNoZUR1bXBNb2RlID09IER1bXBDYWNoZXMpIHsKLSAgICAgICAgTExJbnRD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGl0WzFdLnUuY2FsbExpbmtJbmZvOwotICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSkgewotICAgICAgICAgICAgb3V0LnBy
aW50ZigKLSAgICAgICAgICAgICAgICAiIGxsaW50KCVwLCBleGVjICVwKSIsCi0gICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLT5leGVjdXRhYmxlKCkpOwotICAgICAgICB9
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgaWYgKENhbGxMaW5rSW5mbyogaW5mbyA9IG1hcC5n
ZXQoQ29kZU9yaWdpbihsb2NhdGlvbikpKSB7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXQgPSBpbmZvLT5sYXN0U2VlbkNhbGxlZSgpOwotICAgICAgICAgICAgaWYgKHRhcmdldCkKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFy
Z2V0LT5leGVjdXRhYmxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaml0
VHlwZSgpICE9IEpJVENvZGU6OkZUTEpJVCkKLSAgICAgICAgICAgIG91dC5wcmludCgiIHN0YXR1
cygiLCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcih0aGlzLCBsb2NhdGlvbiwgbWFwKSwgIiki
KTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShtYXApOwotI2VuZGlmCi0gICAgfQotICAg
ICsraXQ7Ci0gICAgKytpdDsKLSAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJp
bnRlZFByb2ZpbGluZyk7Ci0gICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwotfQotCi12b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3AoUHJpbnRT
dHJlYW0mIG91dCwgRXhlY1N0YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0
aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wKQotewotICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpLCByZWdpc3Rlck5h
bWUocjEpLmRhdGEoKSk7Ci0gICAgaXQgKz0gNTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBT
b3VyY2UoKQotewotICAgIGR1bXBTb3VyY2UoV1RGOjpkYXRhRmlsZSgpKTsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OmR1bXBTb3VyY2UoUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICBTY3JpcHRFeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gb3duZXJTY3JpcHRFeGVjdXRhYmxlKCk7Ci0gICAgaWYgKGV4
ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkpIHsKLSAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKS0+Z2V0UmFuZ2UoCi0gICAgICAgICAg
ICBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlcnNTdGFydE9mZnNldCgpLAotICAgICAgICAg
ICAgZnVuY3Rpb25FeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgKyAxKTsgLy8g
VHlwZSBwcm9maWxpbmcgZW5kIG9mZnNldCBpcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgJ30n
LgotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiAiLCBpbmZlcnJlZE5hbWUo
KSwgc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQucHJpbnQoZXhlY3V0
YWJsZS0+c291cmNlKCkudmlldygpKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZSgpCi17Ci0gICAgZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSk7Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0mIG91dCkKLXsKLSAgICAvLyBXZSBvbmx5
IHVzZSB0aGUgRXhlY1N0YXRlKiBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgbGVhZCB0
byBKUyBleGVjdXRpb24sCi0gICAgLy8gbGlrZSBjb252ZXJ0aW5nIGEgSlNTdHJpbmcgdG8gYSBT
dHJpbmcuIEhlbmNlIHRoZSBnbG9iYWxFeGVjIGlzIGFwcHJvcHJpYXRlLgotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgCi0gICAgc2l6ZV90
IGluc3RydWN0aW9uQ291bnQgPSAwOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7IGkgKz0gb3Bjb2RlTGVuZ3Roc1tleGVjLT5pbnRlcnByZXRlcigp
LT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtpXS51Lm9wY29kZSldKQotICAgICAgICArK2lu
c3RydWN0aW9uQ291bnQ7Ci0KLSAgICBvdXQucHJpbnQoKnRoaXMpOwotICAgIG91dC5wcmludGYo
Ci0gICAgICAgICI6ICVsdSBtX2luc3RydWN0aW9uczsgJWx1IGJ5dGVzOyAlZCBwYXJhbWV0ZXIo
cyk7ICVkIGNhbGxlZSByZWdpc3RlcihzKTsgJWQgdmFyaWFibGUocykiLAotICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpbnN0cnVjdGlvbnMoKS5zaXplKCkgKiBzaXplb2Yo
SW5zdHJ1Y3Rpb24pKSwKLSAgICAgICAgbV9udW1QYXJhbWV0ZXJzLCBtX251bUNhbGxlZUxvY2Fs
cywgbV9udW1WYXJzKTsKLSAgICBvdXQucHJpbnQoIjsgc2NvcGUgYXQgIiwgc2NvcGVSZWdpc3Rl
cigpKTsKLSAgICBvdXQucHJpbnRmKCJcbiIpOwotICAgIAotICAgIFN0dWJJbmZvTWFwIHN0dWJJ
bmZvczsKLSAgICBDYWxsTGlua0luZm9NYXAgY2FsbExpbmtJbmZvczsKLSAgICBnZXRTdHViSW5m
b01hcChzdHViSW5mb3MpOwotICAgIGdldENhbGxMaW5rSW5mb01hcChjYWxsTGlua0luZm9zKTsK
LSAgICAKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwotICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5lbmQoKTsK
LSAgICBmb3IgKGNvbnN0IEluc3RydWN0aW9uKiBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGR1bXBCeXRlY29kZShvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgc3R1YkluZm9zLCBj
YWxsTGlua0luZm9zKTsKLSAgICAKLSAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0g
ICAgICAgIG91dC5wcmludGYoIlxuSWRlbnRpZmllcnM6XG4iKTsKLSAgICAgICAgc2l6ZV90IGkg
PSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgIGlkJXUgPSAlc1xu
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpLCBpZGVudGlmaWVyKGkpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdoaWxlIChpICE9IG51bWJl
ck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NvbnN0YW50UmVnaXN0ZXJz
LmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJcbkNvbnN0YW50czpcbiIpOwotICAg
ICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIHN3aXRjaCAobV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKLSAg
ICAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6Ci0gICAgICAg
ICAgICAgICAgc291cmNlQ29kZVJlcHJlc2VudGF0aW9uRGVzY3JpcHRpb24gPSAiOiBpbiBzb3Vy
Y2UgYXMgZG91YmxlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgotICAgICAgICAgICAgICAgIHNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uID0gIjogaW4gc291cmNlIGFzIGludGVnZXIi
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyOgotICAgICAgICAgICAgICAgIHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbkRlc2NyaXB0aW9uID0gIiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIgICBrJXUgPSAlcyVzXG4iLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaSksIHRvQ1N0cmluZyhtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmdldCgpKS5k
YXRhKCksIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbkRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAg
ICsraTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9m
UmVnRXhwcygpKSB7Ci0gICAgICAgIG91dC5wcmludGYoIlxubV9yZWdleHBzOlxuIik7Ci0gICAg
ICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb3V0LnByaW50Zigi
ICByZSV1ID0gJXNcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSwgcmVnZXhwVG9Tb3VyY2VT
dHJpbmcobV91bmxpbmtlZENvZGUtPnJlZ2V4cChpKSkuZGF0YSgpKTsKLSAgICAgICAgICAgICsr
aTsKLSAgICAgICAgfSB3aGlsZSAoaSA8IGNvdW50KTsKLSAgICB9Ci0KLSAgICBkdW1wRXhjZXB0
aW9uSGFuZGxlcnMob3V0KTsKLSAgICAKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0
YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJT
d2l0Y2ggSnVtcCBUYWJsZXM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7Ci0gICAgICAg
ICAgICBpbnQgZW50cnkgPSAwOwotICAgICAgICAgICAgVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0uYnJhbmNoT2Zm
c2V0cy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPGludDMyX3Q+Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldLmJyYW5jaE9mZnNl
dHMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytlbnRyeSkgewotICAgICAgICAgICAg
ICAgIGlmICghKml0ZXIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIG91dC5wcmludGYoIlx0XHQlNGQgPT4gJTA0ZFxuIiwgZW50cnkgKyBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXNbaV0ubWluLCAqaXRlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsKLSAgICAgICAgICAgICsraTsKLSAgICAg
ICAgfSB3aGlsZSAoaSA8IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAobV9yYXJlRGF0YSAmJiAhbV9yYXJlRGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnRmKCJcblN0cmlu
ZyBTd2l0Y2ggSnVtcCBUYWJsZXM6XG4iKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiAgJTFkID0ge1xuIiwgaSk7Ci0gICAg
ICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbaV0ub2Zmc2V0VGFi
bGUuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbaV0ub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIGl0ZXItPmtl
eS0+dXRmOCgpLmRhdGEoKSwgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiAgICAgIH1cbiIpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9IHdo
aWxlIChpIDwgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSk7Ci0g
ICAgfQotCi0gICAgb3V0LnByaW50ZigiXG4iKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBF
eGNlcHRpb25IYW5kbGVycyhQcmludFN0cmVhbSYgb3V0KQotewotICAgIGlmIChtX3JhcmVEYXRh
ICYmICFtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKSkgewotICAgICAg
ICBvdXQucHJpbnRmKCJcbkV4Y2VwdGlvbiBIYW5kbGVyczpcbiIpOwotICAgICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiXHQgJWQ6IHsgc3RhcnQ6IFslNGRdIGVuZDogWyU0ZF0gdGFyZ2V0OiBbJTRkXSB9ICVz
XG4iLAotICAgICAgICAgICAgICAgIGkgKyAxLCBoYW5kbGVyLnN0YXJ0LCBoYW5kbGVyLmVuZCwg
aGFuZGxlci50YXJnZXQsIGhhbmRsZXIudHlwZU5hbWUoKSk7Ci0gICAgICAgICAgICArK2k7Ci0g
ICAgICAgIH0gd2hpbGUgKGkgPCBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNpemUo
KSk7Ci0gICAgfQotfQotCi12b2lkIENvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmlsaW5nKFByaW50
U3RyZWFtJiBvdXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCi17Ci0gICAgaWYgKGhhc1By
aW50ZWRQcm9maWxpbmcpIHsKLSAgICAgICAgb3V0LnByaW50KCI7ICIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIG91dC5wcmludCgiICAgICIpOwotICAgIGhhc1ByaW50ZWRQ
cm9maWxpbmcgPSB0cnVlOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5n
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAKLSAgICArK2l0OwotICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5wcm9maWxl
LT5icmllZkRlc2NyaXB0aW9uKGxvY2tlcik7Ci0gICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJlZ2luRHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50
ZWRQcm9maWxpbmcpOwotICAgIG91dC5wcmludChkZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpkdW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1
Y3Rpb24qJiBpdCwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKLXsKLSAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgICsraXQ7Ci0gICAgaWYgKCFpdC0+
dS5hcnJheVByb2ZpbGUpCi0gICAgICAgIHJldHVybjsKLSAgICBDU3RyaW5nIGRlc2NyaXB0aW9u
ID0gaXQtPnUuYXJyYXlQcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKGxvY2tlciwgdGhpcyk7Ci0g
ICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJlZ2lu
RHVtcFByb2ZpbGluZyhvdXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgIG91dC5wcmludChk
ZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wUmFyZUNhc2VQcm9maWxlKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSogcHJvZmls
ZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKLXsKLSAgICBpZiAoIXByb2ZpbGUgfHwgIXBy
b2ZpbGUtPm1fY291bnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmVnaW5EdW1wUHJvZmls
aW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgb3V0LnByaW50KG5hbWUsIHByb2Zp
bGUtPm1fY291bnRlcik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpkdW1wQXJpdGhQcm9maWxlKFBy
aW50U3RyZWFtJiBvdXQsIEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZykKLXsKLSAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICBvdXQu
cHJpbnQoInJlc3VsdHM6ICIsICpwcm9maWxlKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50
TG9jYXRpb25BbmRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKQotewotICAgIG91dC5wcmludGYo
IlslNGRdICUtMTdzICIsIGxvY2F0aW9uLCBvcCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpwcmlu
dExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRl
KiBleGVjLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIq
IG9wLCBpbnQgb3BlcmFuZCkKLXsKLSAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsIG9wKTsKLSAgICBvdXQucHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShvcGVy
YW5kKS5kYXRhKCkpOwotfQotCi12b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAotICAgIFBy
aW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2lu
LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LAotICAgIGNvbnN0IFN0dWJJbmZvTWFwJiBzdHViSW5m
b3MsIGNvbnN0IENhbGxMaW5rSW5mb01hcCYgY2FsbExpbmtJbmZvcykKLXsKLSAgICBpbnQgbG9j
YXRpb24gPSBpdCAtIGJlZ2luOwotICAgIGJvb2wgaGFzUHJpbnRlZFByb2ZpbGluZyA9IGZhbHNl
OwotICAgIE9wY29kZUlEIG9wY29kZSA9IGV4ZWMtPmludGVycHJldGVyKCktPmdldE9wY29kZUlE
KGl0LT51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgY2FzZSBvcF9l
bnRlcjogewotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiZW50ZXIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfZ2V0X3Njb3BlOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9zY29wZSIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6IHsK
LSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX2RpcmVjdF9h
cmd1bWVudHMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNy
ZWF0ZV9zY29wZWRfYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfY2xvbmVk
X2FyZ3VtZW50czogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJj
cmVhdGVfY2xvbmVkX2FyZ3VtZW50cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCBy
ZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVy
T3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFyZ3VtZW50X2NvdW50IiwgcjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVz
dDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3Vt
ZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfcmVzdCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1l
bnRzT2Zmc2V0OiAldSIsIGFyZ3VtZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9yZXN0X2xlbmd0aCIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50T2Zmc2V0ID0gKCsraXQpLT51LnVuc2lnbmVkVmFsdWU7Ci0g
ICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV1IiwgYXJndW1lbnRPZmZz
ZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVh
dGVfdGhpczogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGNhY2hlZEZ1bmN0aW9uID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjcmVhdGVfdGhp
cyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAldSwgJXUiLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGluZmVycmVkSW5saW5lQ2Fw
YWNpdHksIGNhY2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQo
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b190aGlzIiwgcjApOwotICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSAoKytpdCktPnUuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgY2FjaGUoc3Ry
dWN0ID0gIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUpLCAiKSIpOwotICAgICAgICAgICAgb3V0LnBy
aW50KCIsICIsICgrK2l0KS0+dS50b1RoaXNTdGF0dXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jaGVja190ZHo6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVn
aXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfY2hlY2tfdGR6IiwgcjAp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfb2Jq
ZWN0OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im5ld19vYmplY3QiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAldSIsIHJlZ2lzdGVy
TmFtZShyMCkuZGF0YSgpLCBpbmZlcnJlZElubGluZUNhcGFjaXR5KTsKLSAgICAgICAgICAgICsr
aXQ7IC8vIFNraXAgb2JqZWN0IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5OiB7Ci0gICAgICAgICAgICBp
bnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJndiA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGFyZ2MgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im5ld19hcnJheSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3YpLmRhdGEoKSwgYXJnYyk7Ci0g
ICAgICAgICAgICArK2l0OyAvLyBTa2lwIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZTogewotICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IGxlbmd0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2FycmF5X3dpdGhfc2l6
ZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUobGVuZ3RoKS5kYXRhKCkpOwotICAgICAgICAgICAgKytpdDsg
Ly8gU2tpcCBhcnJheSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6IHsKLSAgICAgICAgICAg
IGludCBkc3QgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBhcmd2ID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJnYyA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAibmV3X2FycmF5X2J1ZmZlciIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkLCAl
ZCIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgYXJndiwgYXJnYyk7Ci0gICAgICAgICAgICAr
K2l0OyAvLyBTa2lwIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZS4KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcmUwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJuZXdfcmVnZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKHIwID49MCAmJiBy
MCA8IChpbnQpbV91bmxpbmtlZENvZGUtPm51bWJlck9mUmVnRXhwcygpKQotICAgICAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzIiwgcmVnZXhwTmFtZShyZTAsIHJlZ2V4cChyZTApKS5kYXRhKCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludGYoImJhZF9yZWdl
eHAoJWQpIiwgcmUwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfbW92OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibW92Iik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wcm9maWxlX3R5cGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAg
ICArK2l0OwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX3Byb2ZpbGVfdHlwZSIpOwotICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
OiB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9
ICgrK2l0KS0+dS5iYXNpY0Jsb2NrTG9jYXRpb247Ci0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwcm9maWxlX2NvbnRyb2xfZmxvdyIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiWyVkLCAlZF0iLCBiYXNpY0Jsb2NrTG9jYXRpb24tPnN0
YXJ0T2Zmc2V0KCksIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAg
IHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5vdCIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcTogewotICAgICAgICAgICAg
cHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKLSAgICAgICAg
ICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVxX251bGwiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxOiB7Ci0gICAg
ICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVxIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7
Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXFf
bnVsbCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9z
dHJpY3RlcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInN0cmljdGVxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX25zdHJpY3RlcTogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm5zdHJpY3RlcSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9sZXNzOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibGVzcyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAgIHByaW50Qmlu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsZXNzZXEiKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ3JlYXRlcjogewotICAgICAgICAgICAg
cHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdyZWF0ZXIiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOiB7Ci0g
ICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ3JlYXRl
cmVxIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lu
YzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJpbmMiLCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2RlYzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJkZWMiLCByMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3RvX251bWJlcjogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fbnVtYmVyIik7Ci0gICAgICAgICAgICBkdW1wVmFs
dWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvX3N0cmluZzogewotICAgICAgICAg
ICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG9fc3RyaW5nIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lZ2F0ZTogewot
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmVnYXRl
Iik7Ci0gICAgICAgICAgICArK2l0OyAvLyBvcF9uZWdhdGUgaGFzIGFuIGV4dHJhIG9wZXJhbmQg
Zm9yIHRoZSBBcml0aFByb2ZpbGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2FkZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImFkZCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAgICBwcmlu
dEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibXVsIik7Ci0gICAgICAgICAgICAr
K2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kaXY6
IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJk
aXYiKTsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgIm1vZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9wb3c6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwb3ciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAic3ViIik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKLSAgICAgICAg
ICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsc2hpZnQiKTsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
cnNoaWZ0OiB7Ci0gICAgICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAicnNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3Vyc2hpZnQ6IHsKLSAgICAgICAgICAgIHByaW50QmluYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJ1cnNoaWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2JpdGFuZDogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImJpdGFuZCIpOwotICAgICAgICAgICAgKytpdDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Ci0gICAg
ICAgICAgICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiYml0eG9yIik7
Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgcHJpbnRCaW5hcnlPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImJpdG9yIik7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJvdmVycmlkZXNfaGFzX2luc3RhbmNlIik7Ci0gICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlu
c3RhbmNlb2YiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfaW5zdGFuY2VvZl9jdXN0b206IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMyA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiaW5zdGFuY2VvZl9jdXN0b20iKTsKLSAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIz
KS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF91bnNpZ25lZDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAidW5zaWduZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfdHlwZW9mOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJ0eXBlb2YiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfaXNfZW1wdHk6IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2VtcHR5Iik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDogewotICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfdW5kZWZpbmVkIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2lzX2Jvb2xlYW46
IHsKLSAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlz
X2Jvb2xlYW4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfaXNfbnVtYmVyOiB7Ci0gICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJpc19udW1iZXIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfaXNfY2VsbF93aXRoX3R5cGU6IHsKLSAgICAgICAgICAgIGludCByMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgdHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfY2VsbF93
aXRoX3R5cGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHR5cGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKLSAg
ICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX29iamVj
dCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9pc19v
YmplY3Rfb3JfbnVsbDogewotICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiaXNfb2JqZWN0X29yX251bGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKLSAgICAgICAgICAgIHByaW50
VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2Z1bmN0aW9uIik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2luOiB7Ci0gICAgICAgICAg
ICBwcmludEJpbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaW4iKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDogewot
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgInRyeV9nZXRfYnlfaWQiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCks
IGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGR1bXBW
YWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZF9wcm90b19sb2FkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF91
bnNldDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBw
cmludEdldEJ5SWRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCk7Ci0gICAgICAgICAgICBwcmlu
dEdldEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGV4ZWMsIGxvY2F0aW9uLCBzdHViSW5mb3MpOwotICAg
ICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfd2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJnZXRfYnlfaWRfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZp
ZXIoaWQwKSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0
LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6IHsKLSAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZ2V0X2J5X3ZhbF93aXRoX3RoaXMiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIzKS5kYXRhKCkpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmls
aW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIHByaW50
UHV0QnlJZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X2lkIik7Ci0gICAgICAg
ICAgICBwcmludFB1dEJ5SWRDYWNoZVN0YXR1cyhvdXQsIGxvY2F0aW9uLCBzdHViSW5mb3MpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
d2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlk
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXRfYnlfaWRfd2l0aF90aGlzIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEp
LmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBy
MyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X2J5X3ZhbF93aXRoX3RoaXMiKTsKLSAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIzKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX2J5X2lkOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX2J5X2lkIik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBp
ZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgbjAsIHJlZ2lzdGVyTmFtZShyMSku
ZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
cHV0X3NldHRlcl9ieV9pZDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgbjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAicHV0X3NldHRlcl9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwg
aWRlbnRpZmllcihpZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVk
LCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmll
cihpZDApKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIyKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX2J5X3ZhbDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBuMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXRfZ2V0dGVyX2J5X3ZhbCIpOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCksIG4wLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXJfYnlfdmFs
OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG4wID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
dF9zZXR0ZXJfYnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgbjAs
IHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfZGVmaW5lX2RhdGFfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVmaW5lX2RhdGFfcHJvcGVydHki
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIzKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHk6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IHI0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIyKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMykuZGF0YSgpLCByZWdpc3Rlck5hbWUocjQpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9ieV9p
ZDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImRlbF9ieV9pZCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEo
KSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7Ci0gICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJn
ZXRfYnlfdmFsIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBp
dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV92YWwiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5
X3ZhbF9kaXJlY3Q6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cjIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV92YWxfZGlyZWN0Iik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjIpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBkdW1wQXJyYXlQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsK
LSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjIgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImRlbF9ieV92YWwiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShyMikuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG4wID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1dF9ieV9pbmRl
eCIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICV1LCAlcyIsIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpLCBuMCwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXA6IHsKLSAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImptcCIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJWQoLT4lZCkiLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfanRydWU6IHsKLSAgICAgICAgICAgIHBy
aW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImp0cnVl
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pmYWxz
ZTogewotICAgICAgICAgICAgcHJpbnRDb25kaXRpb25hbEp1bXAob3V0LCBleGVjLCBiZWdpbiwg
aXQsIGxvY2F0aW9uLCAiamZhbHNlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7Ci0gICAgICAgICAgICBwcmludENvbmRpdGlvbmFs
SnVtcChvdXQsIGV4ZWMsIGJlZ2luLCBpdCwgbG9jYXRpb24sICJqZXFfbnVsbCIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKLSAg
ICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKG91dCwgZXhlYywgYmVnaW4sIGl0LCBsb2Nh
dGlvbiwgImpuZXFfbnVsbCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9qbmVxX3B0cjogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIgPSAoKytpdCktPnUu
c3BlY2lhbFBvaW50ZXI7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJqbmVxX3B0ciIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkICglcCksICVk
KC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHBvaW50ZXIsIG1fZ2xvYmFsT2JqZWN0
LT5hY3R1YWxQb2ludGVyRm9yKHBvaW50ZXIpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsK
LSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2psZXNzOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamxlc3MiKTsKLSAgICAgICAgICAgIG91
dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOiB7Ci0gICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiamxlc3NlcSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgt
PiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwg
b2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamdyZWF0ZXIiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBv
ZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9q
Z3JlYXRlcmVxOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG9m
ZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiamdyZWF0ZXJlcSIpOwotICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdp
c3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2pubGVzczogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImpubGVzcyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCgtPiVk
KSIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgb2Zm
c2V0LCBsb2NhdGlvbiArIG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2pubGVzc2VxOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCkt
PnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiam5sZXNzZXEiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZz
ZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqbmdyZWF0ZXIiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHIxKS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImpuZ3JlYXRlcmVxIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVk
KC0+JWQpIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgp
LCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJsb29wX2hpbnQiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfd2F0Y2hkb2c6IHsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIndhdGNo
ZG9nIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJsb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25B
bmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImxvZ19zaGFkb3dfY2hpY2tlbl90YWlsIik7
Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0gICAgICAgICAgICBpbnQgdGFibGVJ
bmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzY3J1dGluZWVSZWdpc3RlciA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAic3dpdGNoX2ltbSIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJWQsICVkKC0+JWQpLCAlcyIsIHRhYmxlSW5kZXgsIGRlZmF1bHRUYXJnZXQsIGxvY2F0aW9u
ICsgZGVmYXVsdFRhcmdldCwgcmVnaXN0ZXJOYW1lKHNjcnV0aW5lZVJlZ2lzdGVyKS5kYXRhKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hf
Y2hhcjogewotICAgICAgICAgICAgaW50IHRhYmxlSW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBkZWZhdWx0VGFyZ2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBpbnQgc2NydXRpbmVlUmVnaXN0ZXIgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInN3aXRj
aF9jaGFyIik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCksICVzIiwgdGFi
bGVJbmRleCwgZGVmYXVsdFRhcmdldCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rl
ck5hbWUoc2NydXRpbmVlUmVnaXN0ZXIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGlu
dCB0YWJsZUluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZGVmYXVs
dFRhcmdldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNjcnV0aW5lZVJl
Z2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJzd2l0Y2hfc3RyaW5nIik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlZCwgJWQoLT4lZCksICVzIiwgdGFibGVJbmRleCwgZGVmYXVsdFRhcmdl
dCwgbG9jYXRpb24gKyBkZWZhdWx0VGFyZ2V0LCByZWdpc3Rlck5hbWUoc2NydXRpbmVlUmVnaXN0
ZXIpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX25ld19mdW5jOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCBmJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHIxKS5kYXRhKCksIGYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZ2VuZXJhdG9yX2Z1
bmMiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jOiB7Ci0gICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJuZXdfYXN5bmNfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCBm
JWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGYw
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1
bmNfZXhwOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGYwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJuZXdfZnVuY19leHAiKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShy
MSkuZGF0YSgpLCBmMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX25ld19nZW5lcmF0b3JfZnVuY19leHA6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19nZW5lcmF0b3Jf
ZnVuY19leHAiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgZiVkIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpLCBmMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19hc3luY19mdW5jX2V4
cDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBmMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAibmV3X2FzeW5jX2Z1bmNfZXhwIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgZjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9zZXRfZnVuY3Rpb25fbmFtZTogewotICAgICAgICAgICAgaW50IGZ1bmNSZWcgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBuYW1lUmVnID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJzZXRfZnVuY3Rpb25fbmFtZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzIiwgcmVnaXN0ZXJOYW1lKGZ1bmNSZWcpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKG5hbWVSZWcp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2NhbGw6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiY2FsbCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNhbGxMaW5rSW5mb3Mp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90YWlsX2Nh
bGw6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
dGFpbF9jYWxsIiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJbmZv
cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhbGxf
ZXZhbDogewotICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJjYWxsX2V2YWwiLCBEb250RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExp
bmtJbmZvcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF92
YXJhcmdzOgotICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogewotICAgICAgICAgICAgaW50IHJlc3Vs
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNhbGxlZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgdmFyQXJnT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAr
K2l0OwotICAgICAgICAgICAgY29uc3QgY2hhciogb3BOYW1lOwotICAgICAgICAgICAgaWYgKG9w
Y29kZSA9PSBvcF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gImNhbGxf
dmFyYXJncyI7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcGNvZGUgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MpCi0gICAgICAgICAgICAgICAgb3BOYW1lID0gImNvbnN0cnVjdF92YXJhcmdzIjsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKLSAgICAg
ICAgICAgICAgICBvcE5hbWUgPSAidGFpbF9jYWxsX3ZhcmFyZ3MiOwotICAgICAgICAgICAgZWxz
ZSBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAg
ICAgICAgICBvcE5hbWUgPSAidGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzIjsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
IG9wTmFtZSk7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcywgJWQsICVk
IiwgcmVnaXN0ZXJOYW1lKHJlc3VsdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoY2FsbGVlKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZSh0aGlzVmFsdWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGFyZ3VtZW50
cykuZGF0YSgpLCBmaXJzdEZyZWVSZWdpc3RlciwgdmFyQXJnT2Zmc2V0KTsKLSAgICAgICAgICAg
IGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9yZXQ6IHsKLSAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmV0Iiwg
cjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAiY29uc3RydWN0IiwgRHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZywgY2FsbExpbmtJ
bmZvcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N0
cmNhdDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBjb3VudCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAic3RyY2F0Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgJXMsICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0
YSgpLCBjb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX3RvX3ByaW1pdGl2ZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvX3ByaW1pdGl2
ZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7Ci0gICAgICAg
ICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGJhc2UgPSBp
dFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGJhc2UpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aCkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50
IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJheVBy
b2ZpbGU7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIpOwotICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgYXJyYXlQ
cm9maWxlKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGludCBlbnVtZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHkpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5H
VEgob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogewotICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzRdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBlbnVtZXJhdG9yID0gaXRbNV0udS5vcGVyYW5kOwotICAgICAgICAgICAgVmFsdWVQcm9m
aWxlKiBwcm9maWxlID0gaXRbNl0udS5wcm9maWxlOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2RpcmVjdF9wbmFtZSIpOwot
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHByb3BlcnR5TmFtZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcHJvZmlsZSk7Ci0gICAgICAgICAgICBpdCArPSBP
UENPREVfTEVOR1RIKG9wX2dldF9kaXJlY3RfcG5hbWUpIC0gMTsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjog
ewotICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlu
dCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IiKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpdCArPSBPUENPREVf
TEVOR1RIKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKSAtIDE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1l
OiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXgg
PSBpdFszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5k
YXRhKCkpOwotICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZSkgLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsKLSAgICAgICAgICAgIGludCBk
c3QgPSBpdFsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9w
X2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0
b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOwotICAgICAgICAgICAgaXQg
Kz0gT1BDT0RFX0xFTkdUSChvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpIC0gMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5n
OiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IGluZGV4ID0gaXRbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5H
VEgob3BfdG9faW5kZXhfc3RyaW5nKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZTogewotICAgICAgICAgICAgaW50IGRz
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IG5ld1Njb3BlID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFNjb3BlID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJwdXNoX3dpdGhfc2NvcGUiKTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShuZXdTY29wZSku
ZGF0YSgpLCByZWdpc3Rlck5hbWUoY3VycmVudFNjb3BlKS5kYXRhKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOiB7Ci0g
ICAgICAgICAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
cGFyZW50U2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImdldF9wYXJlbnRfc2NvcGUiKTsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKHBhcmVudFNjb3BlKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewot
ICAgICAgICAgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50
IHNjb3BlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc3ltYm9sVGFibGUg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbml0aWFsVmFsdWUgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50Iik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIAotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShzeW1ib2xUYWJsZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5pdGlhbFZhbHVlKS5kYXRhKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYXRjaDog
ewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhdGNoIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5k
YXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF90
aHJvdzogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJ0aHJvdyIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7Ci0gICAgICAgICAgICBpbnQgazAgPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIEVycm9yVHlwZSBrMSA9IHN0YXRpY19jYXN0
PEVycm9yVHlwZT4oKCsraXQpLT51LnVuc2lnbmVkVmFsdWUpOwotICAgICAgICAgICAgcHJpbnRM
b2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidGhyb3dfc3RhdGljX2Vycm9y
Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgY29uc3RhbnROYW1lKGswKS5kYXRh
KCkpOwotICAgICAgICAgICAgb3V0LnByaW50KGsxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGludCBkZWJ1Z0hv
b2tUeXBlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaGFzQnJlYWtwb2lu
dEZsYWcgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJWQiLCBkZWJ1Z0hvb2tOYW1lKGRlYnVnSG9va1R5cGUpLCBoYXNCcmVha3BvaW50
RmxhZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Fz
c2VydDogewotICAgICAgICAgICAgaW50IGNvbmRpdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IGxpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImFzc2VydCIpOwotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICVkIiwgcmVnaXN0ZXJOYW1lKGNvbmRpdGlvbikuZGF0
YSgpLCBsaW5lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZW5kOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0
aW9uLCBpdCwgImVuZCIsIHIwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2NvcGUgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KCgrK2l0KS0+
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGludCBkZXB0aCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgdm9pZCogcG9pbnRlciA9ICgrK2l0KS0+dS5wb2ludGVyOwotICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9z
Y29wZSIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgPCVzPiwgJWQsICVw
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBp
ZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZVR5cGVOYW1lKHJlc29s
dmVUeXBlKSwgZGVwdGgsIHBvaW50ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewotICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oKCsraXQpLT51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgKytpdDsgLy8gU3RydWN0dXJlCi0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9
ICgrK2l0KS0+dS5vcGVyYW5kOyAvLyBPcGVyYW5kCi0gICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9zY29wZSIpOwotICAgICAg
ICAgICAgb3V0LnByaW50KHJlZ2lzdGVyTmFtZShyMCksICIsICIsIHJlZ2lzdGVyTmFtZShyMSkp
OwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZDApID09IFVJTlRfTUFY
KQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBhbm9ueW1vdXMiKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgaWROYW1lKGlkMCwgaWRlbnRp
ZmllcihpZDApKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiwgIiwgZ2V0UHV0SW5mby5vcGVy
YW5kKCksICI8IiwgcmVzb2x2ZU1vZGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSksICJ8
IiwgcmVzb2x2ZVR5cGVOYW1lKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSksICJ8IiwgaW5pdGlh
bGl6YXRpb25Nb2RlTmFtZShnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSwgIj4sICIs
IG9wZXJhbmQpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1By
aW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKCgrK2l0KS0+dS5vcGVyYW5kKTsKLSAgICAgICAgICAg
ICsraXQ7IC8vIFN0cnVjdHVyZQotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSAoKytpdCktPnUu
b3BlcmFuZDsgLy8gT3BlcmFuZAotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAicHV0X3RvX3Njb3BlIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnQocmVnaXN0ZXJOYW1lKHIwKSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGlkMCkgPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIGFub255
bW91cyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCAi
LCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgi
LCAiLCByZWdpc3Rlck5hbWUocjEpLCAiLCAiLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSwgIjwiLCBy
ZXNvbHZlTW9kZU5hbWUoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpKSwgInwiLCByZXNvbHZlVHlw
ZU5hbWUoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpKSwgInwiLCBpbml0aWFsaXphdGlvbk1vZGVO
YW1lKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpLCAiPiwgPHN0cnVjdHVyZT4sICIs
IG9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9nZXRfZnJvbV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfZnJvbV9hcmd1bWVudHMi
KTsKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQiLCByZWdpc3Rlck5hbWUocjAp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIG9mZnNldCk7Ci0gICAgICAgICAgICBk
dW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6
IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAg
aW50IG9mZnNldCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJwdXRfdG9fYXJndW1lbnRzIik7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJWQsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIG9mZnNldCwgcmVnaXN0
ZXJOYW1lKHIxKS5kYXRhKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotCi0gICAgZHVtcFJhcmVDYXNlUHJvZmlsZShvdXQsICJyYXJlIGNhc2U6ICIsIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGxvY2F0aW9uKSwgaGFzUHJpbnRlZFByb2ZpbGlu
Zyk7Ci0gICAgewotICAgICAgICBkdW1wQXJpdGhQcm9maWxlKG91dCwgYXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobG9jYXRpb24pLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB9Ci0g
ICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgVmVjdG9yPERGRzo6RnJlcXVlbnRFeGl0U2l0
ZT4gZXhpdFNpdGVzID0gZXhpdFByb2ZpbGUoKS5leGl0U2l0ZXNGb3IobG9jYXRpb24pOwotICAg
IGlmICghZXhpdFNpdGVzLmlzRW1wdHkoKSkgewotICAgICAgICBvdXQucHJpbnQoIiAhISBmcmVx
dWVudCBleGl0czogIik7Ci0gICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXRTaXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgZXhpdFNpdGVzW2ldLmtpbmQoKSwgIiAiLCBleGl0U2l0ZXNbaV0u
aml0VHlwZSgpKTsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICBVTlVTRURf
UEFSQU0obG9jYXRpb24pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgIG91dC5wcmlu
dCgiXG4iKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKLSAgICBQcmludFN0
cmVhbSYgb3V0LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwKLSAgICBjb25zdCBTdHViSW5mb01h
cCYgc3R1YkluZm9zLCBjb25zdCBDYWxsTGlua0luZm9NYXAmIGNhbGxMaW5rSW5mb3MpCi17Ci0g
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBj
b25zdCBJbnN0cnVjdGlvbiogaXQgPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVP
ZmZzZXQ7Ci0gICAgZHVtcEJ5dGVjb2RlKG91dCwgZXhlYywgaW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSwgaXQsIHN0dWJJbmZvcywgY2FsbExpbmtJbmZvcyk7Ci19Ci0KLSNkZWZpbmUgRk9SX0VBQ0hf
TUVNQkVSX1ZFQ1RPUihtYWNybykgXAotICAgIG1hY3JvKGluc3RydWN0aW9ucykgXAotICAgIG1h
Y3JvKGNhbGxMaW5rSW5mb3MpIFwKLSAgICBtYWNybyhsaW5rZWRDYWxsZXJMaXN0KSBcCi0gICAg
bWFjcm8oaWRlbnRpZmllcnMpIFwKLSAgICBtYWNybyhmdW5jdGlvbkV4cHJlc3Npb25zKSBcCi0g
ICAgbWFjcm8oY29uc3RhbnRSZWdpc3RlcnMpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZF
Q1RPUl9SQVJFX0RBVEEobWFjcm8pIFwKLSAgICBtYWNybyhyZWdleHBzKSBcCi0gICAgbWFjcm8o
ZnVuY3Rpb25zKSBcCi0gICAgbWFjcm8oZXhjZXB0aW9uSGFuZGxlcnMpIFwKLSAgICBtYWNybyhz
d2l0Y2hKdW1wVGFibGVzKSBcCi0gICAgbWFjcm8oc3RyaW5nU3dpdGNoSnVtcFRhYmxlcykgXAot
ICAgIG1hY3JvKGV2YWxDb2RlQ2FjaGUpIFwKLSAgICBtYWNybyhleHByZXNzaW9uSW5mbykgXAot
ICAgIG1hY3JvKGxpbmVJbmZvKSBcCi0gICAgbWFjcm8oY2FsbFJldHVybkluZGV4VmVjdG9yKQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBW
ZWN0b3I8VD4mIHZlY3RvcikKLXsKLSAgICByZXR1cm4gdmVjdG9yLmNhcGFjaXR5KCkgKiBzaXpl
b2YoVCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFB1dFRvU2NvcGVGaXJlRGV0YWlsIDog
cHVibGljIEZpcmVEZXRhaWwgewotcHVibGljOgotICAgIFB1dFRvU2NvcGVGaXJlRGV0YWlsKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLSAgICAgICAgOiBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgICAgICwgbV9pZGVudChpZGVudCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCJMaW5raW5nIHB1dF90b19zY29wZSBpbiAiLCBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKSwgIiBmb3IgIiwgbV9pZGVudCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIGNvbnN0IElkZW50
aWZpZXImIG1faWRlbnQ7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotQ29kZUJs
b2NrOjpDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJs
b2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJlKQot
ICAgICwgbV9nbG9iYWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCi0gICAgLCBtX251bUNh
bGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKLSAgICAsIG1fbnVtVmFycyhvdGhl
ci5tX251bVZhcnMpCi0gICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotI2lmIEVO
QUJMRShKSVQpCi0gICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxl
dmVsTm90U2V0KQotI2VuZGlmCi0gICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkK
LSAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQotICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25z
dHJ1Y3RvcikKLSAgICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQotICAg
ICwgbV9jb2RlVHlwZShvdGhlci5tX2NvZGVUeXBlKQotICAgICwgbV91bmxpbmtlZENvZGUoKm90
aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQotICAgICwgbV9oYXNE
ZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKLSAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9k
ZURpc2FibGVkKQotICAgICwgbV9udW1CcmVha3BvaW50cygwKQotICAgICwgbV9vd25lckV4ZWN1
dGFibGUoKm90aGVyLm1fdm0sIHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQot
ICAgICwgbV92bShvdGhlci5tX3ZtKQotICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0
cnVjdGlvbnMpCi0gICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKLSAg
ICAsIG1fc2NvcGVSZWdpc3RlcihvdGhlci5tX3Njb3BlUmVnaXN0ZXIpCi0gICAgLCBtX2hhc2go
b3RoZXIubV9oYXNoKQotICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCi0gICAgLCBtX3Nv
dXJjZU9mZnNldChvdGhlci5tX3NvdXJjZU9mZnNldCkKLSAgICAsIG1fZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KG90aGVyLm1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICwgbV9jb25zdGFudFJl
Z2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQotICAgICwgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ob3RoZXIubV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24pCi0gICAgLCBtX2Z1bmN0aW9uRGVjbHMob3RoZXIubV9mdW5jdGlvbkRlY2xzKQotICAg
ICwgbV9mdW5jdGlvbkV4cHJzKG90aGVyLm1fZnVuY3Rpb25FeHBycykKLSAgICAsIG1fb3NyRXhp
dENvdW50ZXIoMCkKLSAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCi0gICAgLCBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCi0gICAgLCBtX2NyZWF0aW9uVGltZShzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSkKLXsKLSAgICBtX3Zpc2l0V2Vha2x5SGFzQmVl
bkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0KLSAgICBB
U1NFUlQoaGVhcCgpLT5pc0RlZmVycmVkKCkpOwotICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIu
aXNMb2NhbCgpKTsKLQotICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygp
KTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKLQotICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgp
OwotCi0gICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICAKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25I
YW5kbGVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0gICAgICAg
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnM7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IG90
aGVyLm1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgbV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzOwotICAgIH0KLSAgICAKLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRk
KHRoaXMpOwotfQotCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5z
aWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIDogSlNDZWxsKCp2bSwgc3RydWN0dXJl
KQotICAgICwgbV9nbG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlz
LCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpCi0gICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtl
ZENvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMpCi0gICAgLCBtX251bVZhcnModW5saW5rZWRD
b2RlQmxvY2stPm1fbnVtVmFycykKLSAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUp
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBh
YmlsaXR5TGV2ZWxOb3RTZXQpCi0jZW5kaWYKLSAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9u
KGZhbHNlKQotICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCi0gICAgLCBtX2hh
c0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKLSAgICAsIG1faXNTdHJpY3RNb2RlKHVubGlu
a2VkQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKLSAgICAsIG1fY29kZVR5cGUodW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkpCi0gICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVj
dC0+dm0oKSwgdGhpcywgdW5saW5rZWRDb2RlQmxvY2spCi0gICAgLCBtX2hhc0RlYnVnZ2VyU3Rh
dGVtZW50KGZhbHNlKQotICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQp
Ci0gICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2ds
b2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQotICAgICwgbV92bSh1bmxp
bmtlZENvZGVCbG9jay0+dm0oKSkKLSAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2VkQ29kZUJs
b2NrLT50aGlzUmVnaXN0ZXIoKSkKLSAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtlZENvZGVC
bG9jay0+c2NvcGVSZWdpc3RlcigpKQotICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCi0g
ICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCi0gICAgLCBtX2ZpcnN0TGluZUNvbHVt
bk9mZnNldChmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgLCBtX29zckV4aXRDb3VudGVyKDAp
Ci0gICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQotICAgICwgbV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcigwKQotICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0
ZWFkeV9jbG9jazo6bm93KCkpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3Rv
cmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotCi0gICAgQVNTRVJUKGhlYXAo
KS0+aXNEZWZlcnJlZCgpKTsKLSAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7
Ci0KLSAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRD
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgIEpTU2NvcGUqIHNjb3BlKQotewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgIGlmICh2bS50eXBlUHJvZmlsZXIo
KSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3Vy
Y2VJRCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCBvd25l
ckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0KLSAgICBzZXRDb25zdGFu
dFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMoKSwgdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpKTsKLSAgICBp
ZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25z
dGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50
b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1RpbWVDb25zdGFudENvdW50OyBp
KyspIHsKLSAgICAgICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0gc3RhdGljX2Nhc3Q8TGlua1Rp
bWVDb25zdGFudD4oaSk7Ci0gICAgICAgIGlmICh1bnNpZ25lZCByZWdpc3RlckluZGV4ID0gdW5s
aW5rZWRDb2RlQmxvY2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKQot
ICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0s
IHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKTsK
LSAgICB9Ci0KLSAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNsb25lZCBzeW1ib2wgdGFibGUg
Zm9yIHRoZSBtb2R1bGUgZW52aXJvbm1lbnQgc2luY2Ugd2UgbmVlZCB0byBpbnN0YW50aWF0ZQot
ICAgIC8vIHRoZSBtb2R1bGUgZW52aXJvbm1lbnRzIGJlZm9yZSBsaW5raW5nIHRoZSBjb2RlIGJs
b2NrLiBXZSByZXBsYWNlIHRoZSBzdG9yZWQgc3ltYm9sIHRhYmxlIHdpdGggdGhlIGFscmVhZHkg
Y2xvbmVkIG9uZS4KLSAgICBpZiAoVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKSkgewotICAgICAgICBTeW1ib2xU
YWJsZSogY2xvbmVkU3ltYm9sVGFibGUgPSBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUpLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCk7Ci0gICAg
ICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICBj
bG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKLSAgICAg
ICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQodW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rlck9mZnNldCgp
LCBjbG9uZWRTeW1ib2xUYWJsZSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRVcGRhdGVGdW5j
dGlvbkhhc0V4ZWN1dGVkQ2FjaGUgPSB2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxv
d1Byb2ZpbGVyKCk7Ci0gICAgbV9mdW5jdGlvbkRlY2xzID0gUmVmQ291bnRlZEFycmF5PFdyaXRl
QmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+Pih1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkpOwotICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVu
bGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7Ci0gICAgICAgIGlmIChzaG91bGRVcGRh
dGVGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUpCi0gICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291
cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwg
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBt
X2Z1bmN0aW9uRGVjbHNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxp
bmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKLSAgICB9Ci0KLSAgICBtX2Z1
bmN0aW9uRXhwcnMgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0
YWJsZT4+KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7Ci0gICAg
Zm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4
cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0
aW9uRXhwcihpKTsKLSAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSkKLSAgICAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRV
bmV4ZWN1dGVkUmFuZ2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQo
Km1fdm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRh
YmxlLT5zb3VyY2UoKSkpOwotICAgIH0KLQotICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFz
UmFyZURhdGEoKSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRCdWZmZXJD
b3VudCgpKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycy5ncm93
KGNvdW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpDb25zdGFudEJ1ZmZl
ciYgYnVmZmVyID0gdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKGkpOwotICAgICAg
ICAgICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2ldID0gYnVmZmVyOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IHVubGlua2Vk
Q29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAgICAgICAgIEhhbmRsZXJJ
bmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSNpZiBF
TkFCTEUoSklUKQotICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJv
bUV4ZWN1dGFibGVBZGRyZXNzKExMSW50OjpnZXRDb2RlUHRyKG9wX2NhdGNoKSkpKTsKLSNlbHNl
Ci0gICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlcik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaXplX3QgY291
bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5ncm93
KGNvdW50KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
ewotICAgICAgICAgICAgICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRU
YWJsZTo6aXRlcmF0b3IgcHRyID0gdW5saW5rZWRDb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpKS5vZmZzZXRUYWJsZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdW5saW5rZWRD
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShpKS5vZmZzZXRUYWJsZS5lbmQoKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKDsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgT2Zmc2V0TG9jYXRpb24gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQu
YnJhbmNoT2Zmc2V0ID0gcHRyLT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tpXS5vZmZzZXRUYWJsZS5h
ZGQocHRyLT5rZXksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLmdyb3coY291bnQpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHNvdXJjZVRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZShpKTsKLSAgICAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGRlc3RUYWJsZSA9IG1fcmFy
ZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1tpXTsKLSAgICAgICAgICAgICAgICBkZXN0VGFibGUu
YnJhbmNoT2Zmc2V0cyA9IHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHM7Ci0gICAgICAgICAgICAg
ICAgZGVzdFRhYmxlLm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIG1ldGFkYXRhIGJ1ZmZlcnMgZm9yIHRoZSBi
eXRlY29kZQotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZkxMaW50Q2FsbExpbmtJbmZvcygpKQotICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvcyA9IFJl
ZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4oc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBz
aXplID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mQXJyYXlQcm9maWxlcygpKQotICAgICAg
ICBtX2FycmF5UHJvZmlsZXMuZ3JvdyhzaXplKTsKLSAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlcygpKQotICAgICAg
ICBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PEFycmF5QWxsb2Nh
dGlvblByb2ZpbGU+KHNpemUpOwotICAgIGlmIChzaXplX3Qgc2l6ZSA9IHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlZhbHVlUHJvZmlsZXMoKSkKLSAgICAgICAgbV92YWx1ZVByb2ZpbGVzID0g
UmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmlsZT4oc2l6ZSk7Ci0gICAgaWYgKHNpemVfdCBzaXpl
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzKCkp
Ci0gICAgICAgIG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzID0gUmVmQ291bnRlZEFycmF5PE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlPihzaXplKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgc2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7Ci0jZW5kaWYKLQotICAgIC8vIENvcHkgYW5kIHRyYW5zbGF0ZSB0aGUgVW5s
aW5rZWRJbnN0cnVjdGlvbnMKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmNvdW50KCk7Ci0gICAgVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbTo6UmVhZGVyIGluc3RydWN0aW9uUmVhZGVyKHVubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSk7Ci0KLSAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNl
ZCBtb2R1bGUgZW52aXJvbm1lbnRzLgotICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+
IHN0cm9uZ2x5UmVmZXJlbmNlZE1vZHVsZUVudmlyb25tZW50czsKLQotICAgIFJlZkNvdW50ZWRB
cnJheTxJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uQ291bnQpOwotCi0gICAg
dW5zaWduZWQgdmFsdWVQcm9maWxlQ291bnQgPSAwOwotICAgIGF1dG8gbGlua1ZhbHVlUHJvZmls
ZSA9IFsmXSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQgb3BMZW5ndGgpIHsKLSAg
ICAgICAgdW5zaWduZWQgdmFsdWVQcm9maWxlSW5kZXggPSB2YWx1ZVByb2ZpbGVDb3VudCsrOwot
ICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3ZhbHVlUHJv
ZmlsZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0g
LTEpOwotICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7
Ci0gICAgICAgIGluc3RydWN0aW9uc1tieXRlY29kZU9mZnNldCArIG9wTGVuZ3RoIC0gMV0gPSBw
cm9maWxlOwotICAgIH07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhaW5zdHJ1Y3Rpb25S
ZWFkZXIuYXRFbmQoKTsgKSB7Ci0gICAgICAgIGNvbnN0IFVubGlua2VkSW5zdHJ1Y3Rpb24qIHBj
ID0gaW5zdHJ1Y3Rpb25SZWFkZXIubmV4dCgpOwotCi0gICAgICAgIHVuc2lnbmVkIG9wTGVuZ3Ro
ID0gb3Bjb2RlTGVuZ3RoKHBjWzBdLnUub3Bjb2RlKTsKLQotICAgICAgICBpbnN0cnVjdGlvbnNb
aV0gPSB2bS5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKHBjWzBdLnUub3Bjb2RlKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDE7IGogPCBvcExlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICBpZiAo
c2l6ZW9mKGludDMyX3QpICE9IHNpemVvZihpbnRwdHJfdCkpCi0gICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyBqXS51LnBvaW50ZXIgPSAwOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyBqXS51Lm9wZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7Ci0gICAgICAgIH0KLSAgICAgICAg
c3dpdGNoIChwY1swXS51Lm9wY29kZSkgewotICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3By
b3BlcnR5OiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0
aCAtIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2Zp
bGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0KLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3M6Ci0gICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOgotICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOgotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAgIGludCBh
cnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMl0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XSA9IEFycmF5UHJvZmlsZShpKTsK
LQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJdID0gJm1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0gICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6Ci0gICAg
ICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dp
dGhfdGhpczoKLSAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6Ci0gICAgICAgIGNh
c2Ugb3BfdG9fbnVtYmVyOiB7Ci0gICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVu
Z3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbDogewotICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5n
dGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9m
aWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWxf
ZGlyZWN0OiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0
aCAtIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2Zp
bGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6
Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKLSAgICAgICAgY2FzZSBvcF9uZXdf
YXJyYXlfd2l0aF9zaXplOiB7Ci0gICAgICAgICAgICBpbnQgYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlc1thcnJh
eUFsbG9jYXRpb25Qcm9maWxlSW5kZXhdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7Ci0gICAgICAgICAgICBpbnQgb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlID0g
Jm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzW29iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5kZXhd
OwotICAgICAgICAgICAgaW50IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tvcExlbmd0aCAt
IDJdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAt
IDFdID0gb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgICAgICAgICBvYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSh2bSwKLSAgICAgICAgICAgICAgICB0aGlzLCBtX2dsb2Jh
bE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAg
ICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgotICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogewotICAg
ICAgICAgICAgbGlua1ZhbHVlUHJvZmlsZShpLCBvcExlbmd0aCk7Ci0gICAgICAgICAgICBpbnQg
YXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7
Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVBy
b2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbNV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjWzVdLnUu
b3BlcmFuZF07Ci0gICAgICAgICAgICBsaW5rVmFsdWVQcm9maWxlKGksIG9wTGVuZ3RoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xl
bmd0aDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOiB7Ci0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIo
cGNbM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxSZXNvbHZlVHlwZT4ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgIT0gTG9jYWxDbG9zdXJlVmFyKTsKLSAgICAgICAgICAgIGludCBsb2NhbFNj
b3BlRGVwdGggPSBwY1s1XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9
IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBs
b2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlLCBJbml0aWFsaXphdGlvbk1v
ZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0u
dS5vcGVyYW5kID0gb3AudHlwZTsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5v
cGVyYW5kID0gb3AuZGVwdGg7Ci0gICAgICAgICAgICBpZiAob3AubGV4aWNhbEVudmlyb25tZW50
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGxpbmtlZCBtb2R1bGUgZW52aXJvbm1lbnQgc3Ryb25n
bHkgcmVmZXJlbmNlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ2x5UmVmZXJlbmNl
ZE1vZHVsZUVudmlyb25tZW50cy5hZGQoanNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihvcC5s
ZXhpY2FsRW52aXJvbm1lbnQpKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkQ29uc3RhbnQob3AubGV4aWNhbEVudmlyb25tZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA2XS51LmpzQ2VsbC5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZp
cm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG9w
LnR5cGUsIHRoaXMpKQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0Nl
bGwuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6IHsKLSAgICAgICAgICAgIGxpbmtWYWx1ZVByb2ZpbGUoaSwgb3BMZW5ndGgpOwotCi0gICAg
ICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgR2V0UHV0SW5mbywgU3Ry
dWN0dXJlLCBPcGVyYW5kCi0KLSAgICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUucG9pbnRlciA9
IG51bGxwdHI7Ci0KLSAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dElu
Zm8ocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXNJbml0aWFsaXphdGlv
bihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSk7Ci0gICAgICAgICAgICBpZiAoZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewotICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1v
ZGUoKSwgQ2xvc3VyZVZhciwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFu
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwg
R2V0LCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5p
dGlhbGl6YXRpb24pOwotCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFu
ZCA9IEdldFB1dEluZm8oZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50eXBlLCBnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3Au
dHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51
Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3VyZVZh
ciwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkub3BlcmFuZCgpOwotICAgICAgICAg
ICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgb3AudHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRT
ZXQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewotICAgICAgICAgICAgLy8gcHV0
X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUsIEdldFB1dEluZm8sIFN0cnVjdHVyZSwgT3BlcmFu
ZAotICAgICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhwY1s0XS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBM
b2NhbENsb3N1cmVWYXIpIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5nIGlm
IHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCi0gICAgICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihwY1syXS51Lm9wZXJhbmQpICE9IFVJ
TlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gcGNb
NV0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChzeW1ib2xUYWJsZUluZGV4KSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmll
cihwY1syXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCBpZGVudC5pbXBsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwot
ICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOwotICAgICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGludCBsb2NhbFNjb3BlRGVwdGggPSBwY1s1XS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUucG9pbnRlciA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIFB1dCwgZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpLCBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKLQot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBHZXRQdXRJbmZvKGdl
dFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkub3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFy
IHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUu
d2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChv
cC50eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgIGlmIChvcC53YXRjaHBvaW50U2V0KQotICAg
ICAgICAgICAgICAgICAgICBvcC53YXRjaHBvaW50U2V0LT5pbnZhbGlkYXRlKHZtLCBQdXRUb1Nj
b3BlRmlyZURldGFpbCh0aGlzLCBpZGVudCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5z
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVy
ZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwot
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfcHJvZmls
ZV90eXBlOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS50eXBlUHJvZmlsZXIoKSk7
Ci0gICAgICAgICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IG9wX3By
b2ZpbGVfdHlwZSByZWdUb1Byb2ZpbGUsIFR5cGVMb2NhdGlvbiosIGZsYWcsIGlkZW50aWZpZXI/
LCByZXNvbHZlVHlwZT8KLSAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkg
KyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVu
ZDsKLSAgICAgICAgICAgIEdsb2JhbFZhcmlhYmxlSUQgZ2xvYmFsVmFyaWFibGVJRCA9IDA7Ci0g
ICAgICAgICAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKLSAgICAgICAgICAgIGJv
b2wgc2hvdWxkQW5hbHl6ZSA9IG1fdW5saW5rZWRDb2RlLT50eXBlUHJvZmlsZXJFeHByZXNzaW9u
SW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCk7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvZmlsZVJlZ2lzdGVyKHBjWzFd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBQcm9maWxlVHlwZUJ5dGVjb2RlRmxhZyBmbGFnID0g
c3RhdGljX2Nhc3Q8UHJvZmlsZVR5cGVCeXRlY29kZUZsYWc+KHBjWzNdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKGZsYWcpIHsKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29k
ZUNsb3N1cmVWYXI6IHsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9jYWxT
Y29wZURlcHRoID0gcGNbMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgICAgIFJlc29sdmVUeXBl
IHR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4ocGNbNV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB0eXBlIHByb2ZpbGluZyBtYXkgYmUgcHJvZmlsaW5n
IGVpdGhlciBhIEdldCBvciBhIFB1dCwgd2UgY2FuIGFsd2F5cyBjbGFpbSBhIEdldCBiZWNhdXNl
Ci0gICAgICAgICAgICAgICAgLy8gd2UncmUgYWJzdHJhY3RseSAicmVhZCJpbmcgZnJvbSBhIEpT
U2NvcGUuCi0gICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RS
ZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxvY2FsU2NvcGVEZXB0aCwgc2Nv
cGUsIGlkZW50LCBHZXQsIHR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRp
b24pOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhciB8fCBvcC50
eXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5s
ZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAob3AudHlwZSA9PSBHbG9iYWxWYXIpCi0gICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxl
ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCktPnN5bWJvbFRhYmxlKCk7Ci0KLSAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCA9IChvcC50eXBlID09IE1vZHVsZVZhcikgPyBvcC5p
bXBvcnRlZE5hbWUuZ2V0KCkgOiBpZGVudC5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5
bWJvbFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIg
cGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0
IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCi0gICAgICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlE
Rm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2Jh
bFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwg
aW1wbCwgdm0pOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBn
bG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0czsKLQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBQcm9maWxl
VHlwZUJ5dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJv
bFRhYmxlSW5kZXggPSBwY1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9s
VGFibGVJbmRleCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihwY1s0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIC8v
IElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNh
YmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KLSAgICAg
ICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFy
aWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxU
eXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlk
ZW50LmltcGwoKSwgdm0pOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
OiAKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQ6
IHsKLSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9i
YWxJREV4aXN0czsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50OiB7
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3duZXJFeGVjdXRhYmxlLT5pc0Z1bmN0
aW9uRXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSktPnJldHVyblN0YXRlbWVudFR5
cGVTZXQoKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVy
UmV0dXJuU3RhdGVtZW50OwotICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQW5hbHl6ZSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGEgcmV0dXJuIHN0YXRlbWVudCBjYW4gYmUg
YWRkZWQgaW1wbGljaXRseSB0byByZXR1cm4gdW5kZWZpbmVkIGF0IHRoZSBlbmQgb2YgYSBmdW5j
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZXNlIG5vZGVzIGRvbid0IGVtaXQg
ZXhwcmVzc2lvbiByYW5nZXMgYmVjYXVzZSB0aGV5IGFyZW4ndCBpbiB0aGUgYWN0dWFsIHNvdXJj
ZSB0ZXh0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB1c2VyJ3MgcHJvZ3JhbSwgZ2l2
ZSB0aGUgdHlwZSBwcm9maWxlciBzb21lIHJhbmdlIHRvIGlkZW50aWZ5IHRoZXNlIHJldHVybiBz
dGF0ZW1lbnRzLgotICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoZSB0ZXh0IG9m
ZnNldCB0aGF0IGlzIHVzZWQgYXMgaWRlbnRpZmljYXRpb24gaXMgImYiIGluIHRoZSBmdW5jdGlv
biBrZXl3b3JkCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpcyBzdG9yZWQgb24gVHlwZUxv
Y2F0aW9uJ3MgbV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgbWVtYmVy
IHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICBkaXZvdFN0YXJ0ID0gZGl2b3RFbmQgPSBv
d25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwotICAgICAgICAgICAg
ICAgICAgICBzaG91bGRBbmFseXplID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlvblBhaXIgPSB2bS50eXBl
UHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZh
cmlhYmxlSUQsCi0gICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsKLSAgICAgICAgICAgIFR5
cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7Ci0gICAgICAgICAgICBi
b29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwotCi0gICAgICAgICAgICBp
ZiAoZmxhZyA9PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQpCi0g
ICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJu
U3RhdGVtZW50ID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsK
LQotICAgICAgICAgICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlvbikKLSAgICAg
ICAgICAgICAgICB2bS50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24p
OwotCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDJdLnUubG9jYXRpb24gPSBsb2NhdGlv
bjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9kZWJ1
ZzogewotICAgICAgICAgICAgaWYgKHBjWzFdLnUuaW5kZXggPT0gRGlkUmVhY2hCcmVha3BvaW50
KQotICAgICAgICAgICAgICAgIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7
Ci0gICAgICAgICAgICBpbnQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBpbnN0cnVjdGlvbnNb
aSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID49IDApOwotICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9PSBudW1QYXJhbWV0
ZXJzKCkgLSAxLCAiV2UgYXNzdW1lIHRoYXQgdGhpcyBpcyB0cnVlIHdoZW4gcmVtYXRlcmlhbGl6
aW5nIHRoZSByZXN0IHBhcmFtZXRlciBkdXJpbmcgT1NSIGV4aXQgaW4gdGhlIEZUTCBKSVQuIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpICs9IG9wTGVuZ3RoOwotICAgIH0K
LQotICAgIGlmICh2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0gICAgICAgIGluc2VydEJhc2lj
QmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcihpbnN0cnVjdGlvbnMpOwotCi0g
ICAgbV9pbnN0cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3RydWN0aW9ucyk7Ci0KLSAgICAvLyBTZXQg
b3B0aW1pemF0aW9uIHRocmVzaG9sZHMgb25seSBhZnRlciBtX2luc3RydWN0aW9ucyBpcyBpbml0
aWFsaXplZCwgc2luY2UgdGhlc2UKLSAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKLSAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCi0gICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7Ci0KLSAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKLSAgICAvLyBzeW5jaHJvbm91c2x5
LgotICAgIGlmIChPcHRpb25zOjphbHdheXNDb21wdXRlSGFzaCgpKQotICAgICAgICBoYXNoKCk7
Ci0KLSAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQotICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICAKLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMp
OwotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9pbnN0cnVjdGlvbnMu
c2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKLSAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgZ2xvYmFsT2JqZWN0KQotICAgICwgbV9u
dW1DYWxsZWVMb2NhbHMoMCkKLSAgICAsIG1fbnVtVmFycygwKQotICAgICwgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQoZmFsc2UpCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAsIG1fY2FwYWJpbGl0eUxl
dmVsU3RhdGUoREZHOjpDYW5ub3RDb21waWxlKQotI2VuZGlmCi0gICAgLCBtX2RpZEZhaWxKSVRD
b21waWxhdGlvbihmYWxzZSkKLSAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQot
ICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9pc0NvbnN0cnVj
dG9yKGZhbHNlKQotICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpCi0gICAgLCBtX2NvZGVUeXBl
KEZ1bmN0aW9uQ29kZSkKLSAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCi0gICAg
LCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKLSAgICAsIG1fbnVtQnJlYWtw
b2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0
aGlzLCBvd25lckV4ZWN1dGFibGUpCi0gICAgLCBtX3ZtKHZtKQotICAgICwgbV9vc3JFeGl0Q291
bnRlcigwKQotICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKLSAgICAsIG1fcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKLSAgICAsIG1fY3JlYXRpb25UaW1lKHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6Om5vdygpKQotewotICAgIEFTU0VSVChoZWFwKCktPmlzRGVmZXJy
ZWQoKSk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7Ci0KLSAgICBoZWFwKCktPm1fY29kZUJsb2Nrcy0+YWRkKHRoaXMpOwotfQot
I2VuZGlmCi0KLUNvZGVCbG9jazo6fkNvZGVCbG9jaygpCi17Ci0gICAgaWYgKG1fdm0tPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5u
b3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKLQotICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaygpLT5k
aWRPcHRpbWl6ZSgpID09IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHVubGlua2VkQ29kZUJsb2Nr
KCktPnNldERpZE9wdGltaXplKEZhbHNlVHJpU3RhdGUpOwotCi0jaWYgRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKLSAgICBkdW1wVmFsdWVQcm9maWxlcygpOwotI2VuZGlmCi0KLSAgICAv
LyBXZSBtYXkgYmUgZGVzdHJveWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVyIHRv
IHVzIGFyZSBkZXN0cm95ZWQuCi0gICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2NrcyBi
ZWNvbWUgdW5yZWFjaGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKLSAgICAvLyBpcyBubyBn
dWFyYW50ZWUgYWJvdXQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBkZXN0
cm95ZWQuCi0gICAgLy8gU28sIGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywgYW5k
IGdldCBkZXN0cm95ZWQgYmVmb3JlIHRoZQotICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhhdmUg
Y2FsbHMgaW50byB1cywgdGhlbiB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCi0gICAgLy8gZGVz
dHJ1Y3RvciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxp
ZCkgbGlua2VkIGxpc3QuCi0gICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIC8v
IE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIg
Q29kZUJsb2NrcycKLSAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2gg
dGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbwotICAgIC8vIGRlc3RydWN0b3JzLgot
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiA9ICppdGVyOwotICAgICAgICBzdHViLT5hYm91dFRv
RGllKCk7Ci0gICAgICAgIHN0dWItPmRlcmVmKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQot
ewotICAgIEFTU0VSVChjb25zdGFudHMuc2l6ZSgpID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5zaXplKCkpOwotICAgIHNpemVfdCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7
Ci0gICAgbV9jb25zdGFudFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7Ci0gICAgYm9vbCBo
YXNUeXBlUHJvZmlsZXIgPSAhIW1fdm0tPnR5cGVQcm9maWxlcigpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gY29u
c3RhbnRzW2ldLmdldCgpOwotCi0gICAgICAgIGlmICghY29uc3RhbnQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNEeW5hbWljQ2FzdDxT
eW1ib2xUYWJsZSo+KGNvbnN0YW50KSkgewotICAgICAgICAgICAgICAgIGlmIChoYXNUeXBlUHJv
ZmlsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5w
cmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBjbG9uZSA9IHN5bWJvbFRhYmxlLT5jbG9uZVNjb3Bl
UGFydCgqbV92bSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdhc0NvbXBpbGVkV2l0aERlYnVnZ2lu
Z09wY29kZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgY2xvbmUtPnNldFJhcmVEYXRhQ29kZUJs
b2NrKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgY29uc3RhbnQgPSBjbG9uZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KCpt
X3ZtLCB0aGlzLCBjb25zdGFudCk7Ci0gICAgfQotCi0gICAgbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Ci19Ci0K
LXZvaWQgQ29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJu
YXRpdmUpCi17Ci0gICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVybmF0aXZlKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKQotewot
ICAgIG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOwotCi0gICAgbV9hcmd1bWVudFZhbHVlUHJv
ZmlsZXMgPSBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPihuZXdWYWx1ZSk7Ci19Ci0KLXZv
aWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgRXZhbENhY2hlTWFwOjppdGVyYXRvciBlbmQgPSBtX2NhY2hlTWFwLmVuZCgpOwotICAg
IGZvciAoRXZhbENhY2hlTWFwOjppdGVyYXRvciBwdHIgPSBtX2NhY2hlTWFwLmJlZ2luKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT52YWx1ZSk7Ci19
Ci0KLUNvZGVCbG9jayogQ29kZUJsb2NrOjpzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpCi17
Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdK
SVQpCi0gICAgICAgIHJldHVybiAwOwotICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0
Q29kZS0+ZGZnKCk7Ci0gICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2soKTsKLSNlbHNl
IC8vIEVOQUJMRShGVExfSklUKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQotfQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgYm9vbCBzZXRCeU1lID0gIW1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLmNv
bXBhcmVFeGNoYW5nZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7Ci0gICAgaWYgKCFzZXRCeU1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodGhpcykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKLSAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQg
bWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBjYWNoZSBjbGVhcmluZwot
ICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8g
ZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwotICAgIC8vIGlzIHByb2JhYmx5IHF1aXRl
IGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVu
cywgaXQKLSAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4K
LSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZp
bmFsaXplcik7Ci0KLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBqZXR0aXNvbiBvdXJzZWx2ZXMgd2Un
bGwgaW5zdGFsbCBvdXIgYWx0ZXJuYXRpdmUsIHNvIG1ha2Ugc3VyZSB0aGF0IGl0Ci0gICAgLy8g
c3Vydml2ZXMgR0MgZXZlbiBpZiB3ZSBkb24ndC4KLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRl
cm5hdGl2ZSk7Ci0gICAgCi0gICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ug
d2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IKLSAgICAvLyBq
ZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBs
aXZlIGJhc2VkIG9uIHNvbWUKLSAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNl
IHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7Ci0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICAvLyBXZSBnZXQgaGVyZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0
IG91ciBvd25lciBleGVjdXRhYmxlIGlzIGxpdmUsCi0gICAgLy8gYnV0IHdlJ3JlIG5vdCB5ZXQg
bGl2ZSBmb3Igc3VyZSBpbiBhbm90aGVyIHNlbnNlOiB3ZSBtYXkgeWV0IGRlY2lkZSB0aGF0IHRo
aXMKLSAgICAvLyBjb2RlIGJsb2NrIHNob3VsZCBiZSBqZXR0aXNvbmVkIGJhc2VkIG9uIGl0cyBv
dXRnb2luZyB3ZWFrIHJlZmVyZW5jZXMgYmVpbmcKLSAgICAvLyBzdGFsZS4gU2V0IGEgZmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIHN0aWxsIGFzc3VtaW5nIHRoYXQgd2UncmUgZGVhZCwgYW5k
Ci0gICAgLy8gcGVyZm9ybSBvbmUgcm91bmQgb2YgZGV0ZXJtaW5pbmcgaWYgd2UncmUgbGl2ZS4g
VGhlIEdDIG1heSBkZXRlcm1pbmUsIGJhc2VkIG9uCi0gICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcg
YWRkaXRpb25hbCBvYmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IK
LSAgICAvLyBvdGhlciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdh
aW47IGl0IHdpbGwgbm90aWZ5IHVzIG9mIHRoaXMKLSAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5n
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpLgotCi0gICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkID0gZmFsc2U7Ci0gICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Ci0KLSAg
ICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQgPSBmYWxzZTsK
LSAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKLX0KLQotc2l6ZV90IENvZGVCbG9jazo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17
Ci0gICAgQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PENvZGVCbG9jayo+KGNlbGwpOwot
ICAgIHNpemVfdCBleHRyYU1lbW9yeUFsbG9jYXRlZCA9IHRoaXNPYmplY3QtPm1faW5zdHJ1Y3Rp
b25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbik7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1f
aml0Q29kZSkKLSAgICAgICAgZXh0cmFNZW1vcnlBbGxvY2F0ZWQgKz0gdGhpc09iamVjdC0+bV9q
aXRDb2RlLT5zaXplKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBl
eHRyYU1lbW9yeUFsbG9jYXRlZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBDb2RlQmxvY2sqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwotfQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5j
b25kaXRpb25hbCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKLSAgICAvLyBhbmQg
amV0dGlzb25pbmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0
IG9uZSBvZiB0aG9zZSB0aGluZ3MKLSAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAx
LiBTbyB3ZSBhZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0Ci0gICAg
Ly8gZmlndXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwot
Ci0gICAgaWYgKENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JO
dWxsKCkpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIo
b3RoZXJCbG9jayk7Ci0KLSAgICBpZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChtX2ppdENvZGUtPnNpemUoKSk7Ci0gICAgaWYgKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSkKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
bV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rp
b25zLnJlZkNvdW50KCkpOwotCi0gICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlz
aXRvcik7Ci0gICAgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwotCi0gICAg
bV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7Ci0gICAgcHJvcGFnYXRlVHJh
bnNpdGlvbnModmlzaXRvcik7Ci19Ci0KLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9u
Z2x5KCkKLXsKLSAgICBpZiAoT3B0aW9uczo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGlu
ZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgotICAgIC8v
IHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2Rl
QmxvY2sgZ2V0cwotICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5z
IHRoYXQgaXQncyBsaXZlLgotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQotewotICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHRoaXMpOwotfQotCi1zdGF0aWMg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dXNlRWFnZXJDb2RlQmxvY2tKZXR0
aXNvblRpbWluZygpKSkgewotICAgICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMoMTApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklU
OgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAgKyAyMCk7
Ci0gICAgICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMoNDApOwotICAgICAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEyMCk7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
czo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGppdFR5cGUpIHsKLSAg
ICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9u
bzo6c2Vjb25kcyg1KSk7Ci0gICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKLSAgICAgICAg
Ly8gRWZmZWN0aXZlbHkgMTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBh
bmQKLSAgICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAg
ICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUgKyAxMCkpOwotICAgIGNhc2UgSklUQ29kZTo6
REZHSklUOgotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnNlY29uZHMoMjApKTsKLSAgICBjYXNl
IEpJVENvZGU6OkZUTEpJVDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9j
YXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDYwKSk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpOwotICAgIH0KLX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9P
bGRBZ2UoKQotewotICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0aGlzKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmZvcmNlQ29k
ZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICBpZiAodGltZVNpbmNlQ3JlYXRpb24oKSA8IHRpbWVUb0xpdmUoaml0VHlwZSgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihERkc6Oldl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uKQotewotICAgIGlmICh0cmFuc2l0aW9u
Lm1fY29kZU9yaWdpbiAmJiAhSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkodHJhbnNpdGlvbi5t
X2NvZGVPcmlnaW4uZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseSh0cmFuc2l0aW9uLm1fZnJvbS5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLQot
ICAgIGlmIChtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGJvb2wgYWxsQXJlTWFya2VkU29GYXIgPSB0cnVlOwotICAgICAgICAKLSAgICBJbnRl
cnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKLSAgICBpZiAoaml0VHlw
ZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKLSAgICAgICAgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmluc3RydWN0aW9ucygpW3Byb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdl
dE9wY29kZUlEKGluc3RydWN0aW9uWzBdLnUub3Bjb2RlKSkgewotICAgICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBpbnN0cnVjdGlvbls2XS51LnN0cnVjdHVyZUlEOwotICAg
ICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fdm0tPmhlYXAuc3RydWN0dXJlSURUYWJs
ZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPQotICAgICAgICAgICAgICAgICAgICBtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwotICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG5ld1N0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhbGxBcmVNYXJrZWRTb0ZhciA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzSklUKGpp
dFR5cGUoKSkpIHsKLSAgICAgICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRv
ciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpCi0gICAgICAgICAg
ICBhbGxBcmVNYXJrZWRTb0ZhciAmPSAoKml0ZXIpLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNp
dG9yKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKLSAg
ICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
OwotICAgICAgICBmb3IgKGF1dG8mIHdlYWtSZWZlcmVuY2UgOiBkZmdDb21tb24tPndlYWtTdHJ1
Y3R1cmVSZWZlcmVuY2VzKQotICAgICAgICAgICAgYWxsQXJlTWFya2VkU29GYXIgJj0gd2Vha1Jl
ZmVyZW5jZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKHNob3VsZE1hcmtUcmFuc2l0aW9uKGRmZ0NvbW1vbi0+dHJhbnNpdGlv
bnNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyB0aHJlZSB0aGlu
Z3MgYXJlIGxpdmUsIHRoZW4gdGhlIHRhcmdldCBvZiB0aGUKLSAgICAgICAgICAgICAgICAvLyB0
cmFuc2l0aW9uIGlzIGFsc28gbGl2ZToKLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1
c2Ugb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgLy8gICB3ZSB3b3VsZG4ndCBiZSBzY2Fubmlu
ZyBvdXJzZWx2ZXMuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyAtIFRo
ZSBjb2RlIG9yaWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNlIGZy
b20KLSAgICAgICAgICAgICAgICAvLyAgIGNvZGUgdGhhdCB3YXMgaW5saW5lZC4gVGhleSBhcmUg
bm90IHJlbGV2YW50IGlmIHRoZSB1c2VyJ3MKLSAgICAgICAgICAgICAgICAvLyAgIG9iamVjdCB0
aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5saW5lZSB0byBydW4gaXMgbm8gbG9uZ2VyCi0gICAg
ICAgICAgICAgICAgLy8gICBsaXZlLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAg
ICAgLy8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVj
a3MgaWYgc29tZQotICAgICAgICAgICAgICAgIC8vICAgaGVhcCBsb2NhdGlvbiBob2xkcyB0aGUg
c291cmNlLCBhbmQgaWYgc28sIHN0b3JlcyB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgICAgIC8v
ICAgSGVuY2UgdGhlIHNvdXJjZSBtdXN0IGJlIGxpdmUgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGJl
IGxpdmUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNo
b3J0LWNpcmN1aXQgdGhlIGxpdmVuZXNzIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaGFybWxlc3MKLSAg
ICAgICAgICAgICAgICAvLyB0byBtYXJrIChpLmUuIGl0cyBnbG9iYWwgb2JqZWN0IGFuZCBwcm90
b3R5cGUgYXJlIGJvdGggYWxyZWFkeQotICAgICAgICAgICAgICAgIC8vIGxpdmUpLgotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRy
YW5zaXRpb25zW2ldLm1fdG8pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
YWxsQXJlTWFya2VkU29GYXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKLSAgICAKLSAgICBpZiAoYWxsQXJlTWFya2VkU29GYXIpCi0gICAgICAg
IG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ29kZUJs
b2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gQ2hl
Y2sgaWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8uCi0gICAgREZHOjpDb21tb25E
YXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwotICAgIGlmIChkZmdDb21t
b24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8v
IE5vdyBjaGVjayBhbGwgb2Ygb3VyIHdlYWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJl
IGxpdmUsIHRoZW4gd2UKLSAgICAvLyBoYXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2Nh
biBvdXIgc3Ryb25nIHJlZmVyZW5jZXMuIElmIGF0IGVuZCBvZgotICAgIC8vIEdDIHdlIHN0aWxs
IGhhdmUgbm90IHByb3ZlZCBsaXZlbmVzcywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3Qu
Ci0gICAgYm9vbCBhbGxBcmVMaXZlU29GYXIgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNl
c1tpXS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFsbEFyZUxpdmVTb0Zh
cikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZENvbmN1cnJlbnRseShkZmdDb21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzW2ld
LmdldCgpKSkgewotICAgICAgICAgICAgICAgIGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIC8vIElmIHNvbWUgd2VhayByZWZlcmVuY2VzIGFyZSBkZWFkLCB0aGVuIHRoaXMgZml4
cG9pbnQgaXRlcmF0aW9uIHdhcwotICAgIC8vIHVuc3VjY2Vzc2Z1bC4KLSAgICBpZiAoIWFsbEFy
ZUxpdmVTb0ZhcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEFsbCB3ZWFrIHJlZmVy
ZW5jZXMgYXJlIGxpdmUuIFJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHNvIHdlIGRvbid0Ci0gICAg
Ly8gY29tZSBiYWNrIGhlcmUgYWdhaW4sIGFuZCBzY2FuIHRoZSBzdHJvbmcgcmVmZXJlbmNlcy4K
LSAgICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0gICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLX0KLQotdm9pZCBDb2RlQmxvY2s6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPQotICAgICAgICBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCi0gICAg
ICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyKSk7Ci0KLSAgICBjb2RlQmxvY2stPnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwotICAgIGNvZGVCbG9jay0+ZGV0ZXJtaW5lTGl2ZW5l
c3ModmlzaXRvcik7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpjbGVhckxMSW50R2V0QnlJZENhY2hl
KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICBpbnN0cnVjdGlvblswXS51Lm9wY29k
ZSA9IExMSW50OjpnZXRPcGNvZGUob3BfZ2V0X2J5X2lkKTsKLSAgICBpbnN0cnVjdGlvbls0XS51
LnBvaW50ZXIgPSBudWxscHRyOwotICAgIGluc3RydWN0aW9uWzVdLnUucG9pbnRlciA9IG51bGxw
dHI7Ci0gICAgaW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQotewotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLSAgICBpZiAobV9vd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyID0gbV92bS0+aW50ZXJwcmV0ZXI7Ci0gICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZS0+cHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbnMoKTsKLSAgICBmb3IgKHNpemVfdCBzaXplID0gcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBJbnN0
cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbnNbaV1dOwotICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChjdXJJbnN0cnVjdGlvblswXS51Lm9wY29kZSkpIHsKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWQ6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xvYWQ6Ci0gICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3Vuc2V0OiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKG1fdm0tPmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzLlxuIik7Ci0gICAgICAgICAgICBj
bGVhckxMSW50R2V0QnlJZENhY2hlKGN1ckluc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJl
SUQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IGN1ckluc3RydWN0
aW9uWzZdLnUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBjdXJJbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAg
aWYgKCghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQobV92bS0+aGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpICYmCi0gICAgICAgICAgICAgICAgKCFu
ZXdTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZChtX3ZtLT5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkgJiYKLSAgICAgICAgICAgICAgICAoIWNoYWluIHx8
IEhlYXA6OmlzTWFya2VkKGNoYWluKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCJDbGVhcmluZyBMTEludCBwdXQgdHJhbnNpdGlvbi5cbiIpOwotICAgICAgICAgICAgY3VySW5z
dHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmVJRCA9IDA7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlv
bls1XS51Lm9wZXJhbmQgPSAwOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5zdHJ1
Y3R1cmVJRCA9IDA7Ci0gICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls3XS51LnN0cnVjdHVyZUNo
YWluLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2dldF9hcnJheV9sZW5ndGg6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBv
cF90b190aGlzOgotICAgICAgICAgICAgaWYgKCFjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVy
ZSB8fCBIZWFwOjppc01hcmtlZChjdXJJbnN0cnVjdGlvblsyXS51LnN0cnVjdHVyZS5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190aGlz
IHdpdGggc3RydWN0dXJlICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmUuY2xlYXIoKTsK
LSAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNdLnUudG9UaGlzU3RhdHVzID0gbWVyZ2UoCi0g
ICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMsIFRvVGhpc0Ns
ZWFyZWRCeUdDKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOiB7Ci0gICAgICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IGN1ckluc3RydWN0
aW9uWzRdLnUuanNDZWxsOwotICAgICAgICAgICAgaWYgKCFjYWNoZVdyaXRlQmFycmllciB8fCBj
YWNoZVdyaXRlQmFycmllci51bnZhbGlkYXRlZEdldCgpID09IEpTQ2VsbDo6c2Vlbk11bHRpcGxl
Q2FsbGVlT2JqZWN0cygpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlND
ZWxsKiBjYWNoZWRGdW5jdGlvbiA9IGNhY2hlV3JpdGVCYXJyaWVyLmdldCgpOwotICAgICAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkKGNhY2hlZEZ1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IGNyZWF0ZV90aGlzIHdpdGggY2FjaGVkIGNh
bGxlZSAlcC5cbiIsIGNhY2hlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGNhY2hlV3JpdGVCYXJy
aWVyLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfc2NvcGU6IHsKLSAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB0aGlzIGlzbid0
IHN0cmljdGx5IG5lY2Vzc2FyeS4gQW55IHN5bWJvbCB0YWJsZXMgdGhhdCB0aGlzIHdpbGwgcmVm
ZXIgdG8KLSAgICAgICAgICAgIC8vIGFyZSBmb3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVm
ZXIgdG8gdGhvc2UgZnVuY3Rpb25zIHN0cm9uZ2x5LCBhbmQgdGhleSByZWZlcgotICAgICAgICAg
ICAgLy8gdG8gdGhlIHN5bWJvbCB0YWJsZSBzdHJvbmdseS4gQnV0IGl0J3MgbmljZSB0byBiZSBv
biB0aGUgc2FmZSBzaWRlLgotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJs
ZT4mIHN5bWJvbFRhYmxlID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5zeW1ib2xUYWJsZTsKLSAgICAg
ICAgICAgIGlmICghc3ltYm9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0
KCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1i
b2xUYWJsZSAlcC5cbiIsIHN5bWJvbFRhYmxlLmdldCgpKTsKLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2dldF9mcm9tX3Njb3BlOgotICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewotICAg
ICAgICAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSA9PSBHbG9iYWxWYXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgCi0gICAgICAgICAgICAgICAgfHwgZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4mIHN0cnVjdHVyZSA9
IGN1ckluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlOwotICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUgfHwgSGVhcDo6aXNNYXJrZWQoc3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIHNjb3BlIGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5c
biIsIHN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVj
dGlvblswXS51Lm9wY29kZSk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNF
RChvcGNvZGVJRCwgZmFsc2UsICJVbmhhbmRsZWQgb3Bjb2RlIGluIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHksICVzKCVkKSBhdCBiYyAldSIsIG9wY29kZU5hbWVzW29wY29kZUlE
XSwgb3Bjb2RlSUQsIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFdlIGNhbid0IGp1c3QgcmVtb3ZlIGFsbCB0aGUgc2V0cyB3aGVuIHdl
IGNsZWFyIHRoZSBjYWNoZXMgc2luY2Ugd2UgbWlnaHQgaGF2ZSBjcmVhdGVkIGEgd2F0Y2hwb2lu
dCBzZXQKLSAgICAvLyB0aGVuIGNsZWFyZWQgdGhlIGNhY2hlIHdpdGhvdXQgR0NpbmcgaW4gYmV0
d2Vlbi4KLSAgICBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAucmVtb3ZlSWYoW10oY29uc3Qg
U3RydWN0dXJlV2F0Y2hwb2ludE1hcDo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7
Ci0gICAgICAgIHJldHVybiAhSGVhcDo6aXNNYXJrZWQocGFpci5rZXkpOwotICAgIH0pOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGxpbnRDYWxsTGlua0luZm9zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpICYm
ICFIZWFwOjppc01hcmtlZChtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5jYWxsZWUuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAg
IGRhdGFMb2coIkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcywgIlxuIik7Ci0gICAg
ICAgICAgICBtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoISFtX2xsaW50Q2FsbExpbmtJbmZvc1tpXS5sYXN0U2VlbkNhbGxlZSAmJiAhSGVh
cDo6aXNNYXJrZWQobV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuZ2V0KCkp
KQotICAgICAgICAgICAgbV9sbGludENhbGxMaW5rSW5mb3NbaV0ubGFzdFNlZW5DYWxsZWUuY2xl
YXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5s
aW5lQ2FjaGVzKCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGZvciAoYXV0byBpdGVyID0gY2Fs
bExpbmtJbmZvc0JlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT52aXNp
dFdlYWsoKnZtKCkpOwotCi0gICAgZm9yIChCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRv
ciBpdGVyID0gbV9zdHViSW5mb3MuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKLSAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKippdGVyOwotICAgICAgICBzdHViSW5mby52
aXNpdFdlYWtSZWZlcmVuY2VzKHRoaXMpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIENvZGVC
bG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQot
ewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAot
ICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7
Ci0gICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9XZWFr
UmVmZXJlbmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLQotICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkg
ewotICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xk
QWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJl
SW50ZXJwcmV0ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjb2RlQmxvY2stPmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKCEh
Y29kZUJsb2NrLT5qaXRDb2RlKCkpCi0gICAgICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGlu
ZUpJVElubGluZUNhY2hlcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRTdHVi
SW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCkK
LXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKQot
ICAgICAgICB0b0hhc2hNYXAobV9zdHViSW5mb3MsIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9y
aWdpbiwgcmVzdWx0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiByZXN1bHQp
Ci17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBnZXRTdHVi
SW5mb01hcChsb2NrZXIsIHJlc3VsdCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlu
a0luZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mb01hcCYgcmVz
dWx0KQotewotI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUo
KSkpCi0gICAgICAgIHRvSGFzaE1hcChtX2NhbGxMaW5rSW5mb3MsIGdldENhbGxMaW5rSW5mb0Nv
ZGVPcmlnaW4sIHJlc3VsdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9NYXAoQ2FsbExpbmtJbmZv
TWFwJiByZXN1bHQpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICBnZXRDYWxsTGlua0luZm9NYXAobG9ja2VyLCByZXN1bHQpOwotfQotCi12b2lkIENvZGVC
bG9jazo6Z2V0QnlWYWxJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBCeVZhbElu
Zm9NYXAmIHJlc3VsdCkKLXsKLSNpZiBFTkFCTEUoSklUKQotICAgIGlmIChKSVRDb2RlOjppc0pJ
VChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIGZvciAoYXV0byogYnlWYWxJbmZvIDogbV9ieVZhbElu
Zm9zKQotICAgICAgICAgICAgcmVzdWx0LmFkZChDb2RlT3JpZ2luKGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCksIGJ5VmFsSW5mbyk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVz
dWx0KTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6Z2V0QnlWYWxJbmZvTWFwKEJ5VmFs
SW5mb01hcCYgcmVzdWx0KQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgZ2V0QnlWYWxJbmZvTWFwKGxvY2tlciwgcmVzdWx0KTsKLX0KLQotI2lmIEVOQUJM
RShKSVQpCi1TdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbyhBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwotfQotCi1KSVRBZGRJ
QyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsK
LSAgICByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE11bElDKiBD
b2RlQmxvY2s6OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAg
IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVC
bG9jazo6YWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgcmV0
dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2Nr
OjphZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICByZXR1cm4g
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLVN0cnVjdHVyZVN0dWJJbmZvKiBDb2Rl
QmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgZm9yIChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBtX3N0dWJJbmZvcykgewotICAgICAgICBpZiAo
c3R1YkluZm8tPmNvZGVPcmlnaW4gPT0gY29kZU9yaWdpbikKLSAgICAgICAgICAgIHJldHVybiBz
dHViSW5mbzsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUJ5VmFsSW5mbyogQ29k
ZUJsb2NrOjphZGRCeVZhbEluZm8oKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgcmV0dXJuIG1fYnlWYWxJbmZvcy5hZGQoKTsKLX0KLQotQ2FsbExpbmtJ
bmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCi17Ci0gICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gbV9jYWxsTGlua0luZm9zLmFkZCgpOwot
fQotCi1DYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbExpbmtJ
bmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+Y29k
ZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuICppdGVy
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnJlc2V0
SklURGF0YSgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKGppdFR5cGUo
KSkpOwotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAg
Ly8gV2UgY2FuIGNsZWFyIHRoZXNlIGJlY2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgaGF2ZSBy
ZWZlcmVuY2VzIHRvIGFueSBzdHViIGluZm9zLCBjYWxsCi0gICAgLy8gbGluayBpbmZvcywgb3Ig
YnkgdmFsIGluZm9zIGlmIHdlIGRvbid0IGhhdmUgSklUIGNvZGUuIEF0dGVtcHRzIHRvIHF1ZXJ5
IHRoZXNlIGRhdGEKLSAgICAvLyBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBjb25jdXJyZW50IEFQSSAo
Z2V0U3R1YkluZm9NYXAgYW5kIGZyaWVuZHMpIHdpbGwgcmV0dXJuIG5vdGhpbmcgaWYgd2UKLSAg
ICAvLyBkb24ndCBoYXZlIEpJVCBjb2RlLgotICAgIG1fc3R1YkluZm9zLmNsZWFyKCk7Ci0gICAg
bV9jYWxsTGlua0luZm9zLmNsZWFyKCk7Ci0gICAgbV9ieVZhbEluZm9zLmNsZWFyKCk7Ci0gICAg
Ci0gICAgLy8gV2UgY2FuIGNsZWFyIHRoaXMgYmVjYXVzZSB0aGUgREZHJ3MgcXVlcmllcyB0byB0
aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGd1YXJkZWQgYnkgd2hldGhlcgotICAgIC8vIHRoZXJl
IGlzIEpJVCBjb2RlLgotICAgIG1fcmFyZUNhc2VQcm9maWxlcy5jbGVhcigpOwotfQotI2VuZGlm
Ci0KLXZvaWQgQ29kZUJsb2NrOjp2aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IE9TUiBleGl0cyB0YXJnZXRzIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGgKLSAgICAvLyB0aGUgY29tcGxleGl0eSBvZiBn
ZW5lcmF0aW5nIGFuIGV4aXQgdGFyZ2V0IENvZGVCbG9jayBvbiBkZW1hbmQgYW5kCi0gICAgLy8g
Z3VhcmFudGVlaW5nIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGV0YWlscyBvZiB0aGUgQ29kZUJsb2Nr
IHdlIGNvbXBpbGVkCi0gICAgLy8gdGhlIE9TUiBleGl0IGFnYWluc3QuCi0KLSAgICB2aXNpdG9y
LmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgaWYg
KGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAg
IEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNp
dFN0cm9uZ1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5h
cHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1
dGFibGUpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7Ci0gICAgaWYgKG1f
cmFyZURhdGEpCi0gICAgICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhtX2NvbnN0YW50UmVnaXN0
ZXJzLmRhdGEoKSwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQotICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmbV9mdW5jdGlvbkV4cHJzW2ldKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1f
ZnVuY3Rpb25EZWNsc1tpXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlc1tpXS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgZm9yIChCeVZhbEluZm8qIGJ5VmFsSW5mbyA6IG1fYnlWYWxJbmZvcykKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sKTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpKQotICAgICAgICB2aXNpdE9TUkV4aXRUYXJnZXRzKHZpc2l0b3IpOwotI2VuZGlmCi0KLSAg
ICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwotfQotCi12b2lkIENvZGVCbG9jazo6c3Ryb25nbHlW
aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9Q
QVJBTSh2aXNpdG9yKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoISFkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9y
aWdpbikKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25z
W2ldLm1fY29kZU9yaWdpbik7IC8vIEFsbW9zdCBjZXJ0YWlubHkgbm90IG5lY2Vzc2FyeSwgc2lu
Y2UgdGhlIGNvZGUgb3JpZ2luIHNob3VsZCBhbHNvIGJlIGEgd2VhayByZWZlcmVuY2UuIEJldHRl
ciB0byBiZSBzYWZlLCB0aG91Z2guCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24t
PnRyYW5zaXRpb25zW2ldLm1fZnJvbSk7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21t
b24tPnRyYW5zaXRpb25zW2ldLm1fdG8pOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXNbaV0pOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0NvbW1vbi0+d2Vha1N0cnVjdHVyZVJlZmVyZW5j
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21tb24tPndlYWtT
dHJ1Y3R1cmVSZWZlcmVuY2VzW2ldKTsKLQotICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVu
UHJvdmVkID0gdHJ1ZTsKLSNlbmRpZiAgICAKLX0KLQotQ29kZUJsb2NrKiBDb2RlQmxvY2s6OmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKQotewotI2lmIEVOQUJMRShKSVQpCi0gICAgQ29kZUJsb2NrKiBy
ZXN1bHQgPSB0aGlzOwotICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCi0gICAgICAg
IHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlc3VsdC0+
aml0VHlwZSgpKSB8fCByZXN1bHQtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICByZXR1cm4gdGhpczsKLSNlbmRpZgotfQotCi1Db2Rl
QmxvY2sqIENvZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKLXsKLSNpZiBFTkFCTEUoSklUKQot
ICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKQotICAgICAgICByZXR1
cm4gdGhpczsKLSAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7Ci0gICAgaWYg
KCFyZXN1bHQpIHsKLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGNyZWF0aW5n
IHRoZSBvcmlnaW5hbCBDb2RlQmxvY2sgZm9yIGFuIGV4ZWN1dGFibGUuCi0gICAgICAgIC8vIEFz
c3VtZSB0aGF0IHdlJ3JlIHRoZSBiYXNlbGluZSBDb2RlQmxvY2suCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotICAgIHJlc3VsdCA9IHJlc3VsdC0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIHJldHVybiB0aGlzOwotI2VuZGlmCi19Ci0KLSNp
ZiBFTkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJ
VENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSkKLXsKLSAgICByZXR1cm4gSklUQ29kZTo6aXNI
aWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Ci19Ci0K
LWJvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCi17Ci0gICAgcmV0dXJu
IGhhc09wdGltaXplZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7Ci19Ci0jZW5kaWYKLQotSGFuZGxl
ckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQotewotICAgIFJFTEVB
U0VfQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gaGFuZGxlckZvckluZGV4KGJ5dGVjb2RlT2Zmc2V0LCByZXF1aXJlZEhhbmRsZXIpOwot
fQotCi1IYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5k
ZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3JhcmVE
YXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSGFuZGxlckluZm86OmhhbmRsZXJG
b3JJbmRleChtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRI
YW5kbGVyKTsKLX0KLQotQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlvbkhhbmRs
aW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpCi17Ci0jaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGppdFR5cGUoKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhbkdldENvZGVPcmlnaW4ob3Jp
Z2luYWxDYWxsU2l0ZSkpOwotICAgIEFTU0VSVCghIWhhbmRsZXJGb3JJbmRleChvcmlnaW5hbENh
bGxTaXRlLmJpdHMoKSkpOwotICAgIENvZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBjb2RlT3Jp
Z2luKG9yaWdpbmFsQ2FsbFNpdGUpOwotICAgIHJldHVybiBtX2ppdENvZGUtPmRmZ0NvbW1vbigp
LT5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbmFsT3JpZ2luKTsKLSNlbHNlCi0gICAgLy8g
V2UgbmV2ZXIgY3JlYXRlIG5ldyBvbi10aGUtZmx5IGV4Y2VwdGlvbiBoYW5kbGluZwotICAgIC8v
IGNhbGwgc2l0ZXMgb3V0c2lkZSB0aGUgREZHL0ZUTCBpbmxpbmUgY2FjaGVzLgotICAgIFVOVVNF
RF9QQVJBTShvcmlnaW5hbENhbGxTaXRlKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KDB1KTsKLSNlbmRpZgotfQotCi12b2lkIENv
ZGVCbG9jazo6cmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsKLSAgICBW
ZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVycyA9IG1fcmFyZURhdGEtPm1fZXhj
ZXB0aW9uSGFuZGxlcnM7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBjYWxsU2l0ZUluZGV4LmJpdHMo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcnNb
aV07Ci0gICAgICAgIGlmIChoYW5kbGVyLnN0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIuZW5kID4g
aW5kZXgpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJzLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6bGluZU51bWJlckZvckJ5dGVj
b2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gb3du
ZXJTY3JpcHRFeGVjdXRhYmxlKCktPmZpcnN0TGluZSgpICsgbV91bmxpbmtlZENvZGUtPmxpbmVO
dW1iZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7Ci19Ci0KLXVuc2lnbmVkIENv
ZGVCbG9jazo6Y29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpCi17Ci0gICAgaW50IGRpdm90OwotICAgIGludCBzdGFydE9mZnNldDsKLSAgICBpbnQg
ZW5kT2Zmc2V0OwotICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgdW5zaWduZWQgY29sdW1uOwotICAg
IGV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKLSAgICByZXR1cm4gY29sdW1u
OwotfQotCi12b2lkIENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsIGludCYgc3RhcnRPZmZzZXQsIGlu
dCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKLXsK
LSAgICBtX3VubGlua2VkQ29kZS0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4p
OwotICAgIGRpdm90ICs9IG1fc291cmNlT2Zmc2V0OwotICAgIGNvbHVtbiArPSBsaW5lID8gMSA6
IGZpcnN0TGluZUNvbHVtbk9mZnNldCgpOwotICAgIGxpbmUgKz0gb3duZXJTY3JpcHRFeGVjdXRh
YmxlKCktPmZpcnN0TGluZSgpOwotfQotCi1ib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0Zvckxp
bmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOwotICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7Ci0gICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOwotICAgIGZvciAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGl0ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKLSAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKLSAgICAgICAgaWYg
KG9wY29kZUlEID09IG9wX2RlYnVnKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IGl0IC0gYmVnaW47Ci0gICAgICAgICAgICBpbnQgdW51c2VkOwotICAgICAgICAgICAg
dW5zaWduZWQgb3BEZWJ1Z0xpbmU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1u
OwotICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQsIHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1u
KTsKLSAgICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJl
YWtwb2ludDo6dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGl0ICs9IG9w
Y29kZUxlbmd0aHNbb3Bjb2RlSURdOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCi17Ci0gICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLQotICAgIG1fcmFyZUNhc2VQcm9m
aWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIAotICAgIGlmIChzaHJpbmtNb2RlID09IEVhcmx5U2hy
aW5rKSB7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0gICAgICAgICAgICBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgICAgIG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICB9Ci0g
ICAgfSAvLyBlbHNlIGRvbid0IHNocmluayB0aGVzZSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGFs
cmVhZHkgcG9pbnRlZCBwb2ludGVycyBpbnRvIHRoZXNlIHRhYmxlcy4KLX0KLQotI2lmIEVOQUJM
RShKSVQpCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQot
Ci12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSog
Y2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQotewotICAgIG5vdGlj
ZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bHMucHVzaChpbmNvbWluZyk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDb2Rl
QmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQotewotICAgIHdoaWxlIChtX2luY29taW5nTExJ
bnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBt
X2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKLSNpZiBFTkFCTEUoSklUKQot
ICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5k
KCkpCi0gICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOwotICAg
IHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxs
cy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi19Ci0KLXZv
aWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExM
SW50Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2Fs
bGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21pbmcpOwotfQot
Ci1Db2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBv
d25lclNjcmlwdEV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lh
bGl6YXRpb25LaW5kKCkpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvZGVCbG9jayogQ29kZUJs
b2NrOjpyZXBsYWNlbWVudCgpCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0
aGlzLT5jbGFzc0luZm8oKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxv
Y2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9y
Q29uc3RydWN0IDogQ29kZUZvckNhbGwpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFsQ29k
ZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBQ
cm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotCi0gICAgaWYgKGNs
YXNzSW5mbyA9PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVy
biBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNv
ZGVCbG9jaygpOwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmIChjbGFzc0luZm8g
PT0gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0jZW5kaWYKLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLURGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNh
cGFiaWxpdHlMZXZlbCgpCi17Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlz
LT5jbGFzc0luZm8oKTsKLQotICAgIGlmIChjbGFzc0luZm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6
OmluZm8oKSkgewotICAgICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgcmV0
dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAg
ICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLSAg
ICB9Ci0KLSAgICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKLSAgICAg
ICAgcmV0dXJuIERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLQotICAgIGlmIChjbGFz
c0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1cm4gREZHOjpw
cm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwotCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBERkc6OnByb2dyYW1D
YXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYg
KGNsYXNzSW5mbyA9PSBXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpKQotICAgICAgICByZXR1
cm4gREZHOjpDYW5ub3RDb21waWxlOwotI2VuZGlmCi0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7Ci19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQotCi12b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRp
c29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRh
aWwqIGRldGFpbCkKLXsKLSNpZiAhRU5BQkxFKERGR19KSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1v
ZGUpOwotICAgIFVOVVNFRF9QQVJBTShkZXRhaWwpOwotI2VuZGlmCi0gICAgCi0gICAgQ09ERUJM
T0NLX0xPR19FVkVOVCh0aGlzLCAiamV0dGlzb24iLCAoImR1ZSB0byAiLCByZWFzb24sICIsIGNv
dW50aW5nID0gIiwgbW9kZSA9PSBDb3VudFJlb3B0aW1pemF0aW9uLCAiLCBkZXRhaWwgPSAiLCBw
b2ludGVyRHVtcChkZXRhaWwpKSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChyZWFzb24gIT0gUHJv
ZmlsZXI6Ok5vdEpldHRpc29uZWQpOwotICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlm
IChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7Ci0gICAgICAgIGRhdGFMb2coIkpldHRp
c29uaW5nICIsICp0aGlzKTsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlv
bikKLSAgICAgICAgICAgIGRhdGFMb2coIiBhbmQgY291bnRpbmcgcmVvcHRpbWl6YXRpb24iKTsK
LSAgICAgICAgZGF0YUxvZygiIGR1ZSB0byAiLCByZWFzb24pOwotICAgICAgICBpZiAoZGV0YWls
KQotICAgICAgICAgICAgZGF0YUxvZygiLCAiLCAqZGV0YWlsKTsKLSAgICAgICAgZGF0YUxvZygi
LlxuIik7Ci0gICAgfQotICAgIAotICAgIGlmIChyZWFzb24gPT0gUHJvZmlsZXI6OkpldHRpc29u
RHVlVG9XZWFrUmVmZXJlbmNlKSB7Ci0gICAgICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3Nl
bWJseSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIHdpbGwgYmUgamV0dGlzb25l
ZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVhZCByZWZlcmVuY2VzOlxuIik7Ci0gICAgICAg
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFuc2l0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIERGRzo6V2Vha1JlZmVyZW5jZVRy
YW5zaXRpb24mIHRyYW5zaXRpb24gPSBkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldOwotICAgICAg
ICAgICAgICAgIEpTQ2VsbCogb3JpZ2luID0gdHJhbnNpdGlvbi5tX2NvZGVPcmlnaW4uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBmcm9tID0gdHJhbnNpdGlvbi5tX2Zyb20uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiB0byA9IHRyYW5zaXRpb24ubV90by5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoKCFvcmlnaW4gfHwgSGVhcDo6aXNNYXJrZWQob3JpZ2luKSkgJiYg
SGVhcDo6aXNNYXJrZWQoZnJvbSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBUcmFuc2l0aW9uIHVuZGVyICIsIFJhd1BvaW50ZXIo
b3JpZ2luKSwgIiwgIiwgUmF3UG9pbnRlcihmcm9tKSwgIiAtPiAiLCBSYXdQb2ludGVyKHRvKSwg
Ii5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRmZ0NvbW1vbi0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBKU0NlbGwqIHdlYWsgPSBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzW2ldLmdldCgpOwot
ICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFdlYWsgcmVmZXJl
bmNlICIsIFJhd1BvaW50ZXIod2VhayksICIuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQygqaGVhcCgpKTsKLSAgICAKLSAgICAvLyBXZSB3YW50IHRvIGFjY29tcGxpc2gg
dHdvIHRoaW5ncyBoZXJlOgotICAgIC8vIDEpIE1ha2Ugc3VyZSB0aGF0IGlmIHRoaXMgQ29kZUJs
b2NrIGlzIG9uIHRoZSBzdGFjayByaWdodCBub3csIHRoZW4gaWYgd2UgcmV0dXJuIHRvIGl0Ci0g
ICAgLy8gICAgd2Ugc2hvdWxkIE9TUiBleGl0IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIHJldHVybi4KLSAgICAvLyAyKSBNYWtlIHN1cmUgdGhh
dCBpZiB3ZSBjYWxsIHRoZSBvd25lciBleGVjdXRhYmxlLCB0aGVuIHdlIHNob3VsZG4ndCBjYWxs
IHRoaXMgQ29kZUJsb2NrLgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKHJlYXNvbiAh
PSBQcm9maWxlcjo6SmV0dGlzb25EdWVUb09sZEFnZSkgewotICAgICAgICBpZiAoUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBp
bGF0aW9uLmdldCgpKQotICAgICAgICAgICAgY29tcGlsYXRpb24tPnNldEpldHRpc29uUmVhc29u
KHJlYXNvbiwgZGV0YWlsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgYWNjb21wbGlzaGVz
ICgxKSwgYW5kIGRvZXMgaXRzIG93biBib29rLWtlZXBpbmcgYWJvdXQgd2hldGhlciBpdCBoYXMg
YWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgaWYgKCFqaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5p
bnZhbGlkYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYmVlbiBpbnZhbGlk
YXRlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSB8
fCAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhlYXA6OmlzTWFya2VkKG93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQotICAg
ICAgICBkYXRhTG9nKCIgICAgRGlkIGludmFsaWRhdGUgIiwgKnRoaXMsICJcbiIpOwotICAgIAot
ICAgIC8vIENvdW50IHRoZSByZW9wdGltaXphdGlvbiBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciB3
YW50ZWQuCi0gICAgaWYgKG1vZGUgPT0gQ291bnRSZW9wdGltaXphdGlvbikgewotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBhbHRlcm5hdGl2ZSgpLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3Ci0gICAgICAg
IGJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+Y291bnRSZW9wdGltaXphdGlvbigpOwotICAgICAgICBp
ZiAoREZHOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBEaWQgY291bnQgcmVvcHRpbWl6YXRpb24gZm9yICIsICp0aGlzLCAiXG4iKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHRoaXMgIT0gcmVwbGFjZW1lbnQoKSkgewotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgd2Ugd2VyZSBuZXZlciB0aGUgZW50cnlwb2ludC4gVGhpcyBjYW4gaGFwcGVuIGZv
ciBPU1IgZW50cnkgY29kZQotICAgICAgICAvLyBibG9ja3MuCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoYWx0ZXJuYXRpdmUoKSkKLSAgICAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0
aW1pemVBZnRlcldhcm1VcCgpOwotCi0gICAgaWYgKHJlYXNvbiAhPSBQcm9maWxlcjo6SmV0dGlz
b25EdWVUb09sZEFnZSkKLSAgICAgICAgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCi0gICAgLy8gSmV0dGlzb24gY2FuIGhhcHBlbiBkdXJpbmcg
R0MuIFdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBjb2RlIHRvIGEgZGVhZCBleGVjdXRhYmxlCi0g
ICAgLy8gYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCBhIGRlYWQgb2JqZWN0IHRvIHRoZSByZW1lbWJl
cmVkIHNldC4KLSAgICBpZiAobV92bS0+aGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkgJiYgIUhl
YXA6OmlzTWFya2VkKG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDIpLgotICAgIG93bmVyU2NyaXB0RXhlY3V0YWJs
ZSgpLT5pbnN0YWxsQ29kZSgKLSAgICAgICAgbV9nbG9iYWxPYmplY3QtPnZtKCksIGFsdGVybmF0
aXZlKCksIGNvZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKLQotI2lmIEVOQUJMRShE
RkdfSklUKQotICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQotICAgICAgICBk
YXRhTG9nKCIgICAgRGlkIGluc3RhbGwgYmFzZWxpbmUgdmVyc2lvbiBvZiAiLCAqdGhpcywgIlxu
Iik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0KLUpTR2xvYmFsT2JqZWN0KiBDb2Rl
QmxvY2s6Omdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYg
KCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVj
dCgpOwotICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwotfQotCi1jbGFzcyBSZWN1cnNpb25DaGVja0Z1bmN0b3Ig
ewotcHVibGljOgotICAgIFJlY3Vyc2lvbkNoZWNrRnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2Fs
bEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgZGVwdGhUb0NoZWNrKQotICAg
ICAgICA6IG1fc3RhcnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUpCi0gICAgICAgICwgbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQotICAgICAgICAsIG1fZGVwdGhUb0NoZWNrKGRlcHRoVG9DaGVjaykK
LSAgICAgICAgLCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFsc2UpCi0gICAgICAgICwgbV9kaWRS
ZWN1cnNlKGZhbHNlKQotICAgIHsgfQotCi0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBDYWxsRnJh
bWUqIGN1cnJlbnRDYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKLQotICAgICAgICBp
ZiAoY3VycmVudENhbGxGcmFtZSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKQotICAgICAgICAgICAgbV9m
b3VuZFN0YXJ0Q2FsbEZyYW1lID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9mb3VuZFN0YXJ0Q2Fs
bEZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbEZyYW1lKCktPmNvZGVCbG9j
aygpID09IG1fY29kZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgbV9kaWRSZWN1cnNlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIW1fZGVwdGhUb0NoZWNrLS0pCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgIH0KLQotICAgIGJvb2wgZGlkUmVjdXJzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlkUmVjdXJzZTsgfQotCi1wcml2YXRlOgotICAgIENhbGxGcmFt
ZSogbV9zdGFydENhbGxGcmFtZTsKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIG11
dGFibGUgdW5zaWduZWQgbV9kZXB0aFRvQ2hlY2s7Ci0gICAgbXV0YWJsZSBib29sIG1fZm91bmRT
dGFydENhbGxGcmFtZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9kaWRSZWN1cnNlOwotfTsKLQotdm9p
ZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKQot
ewotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIAotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKLSAgICAgICAg
ZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgcG9pbnRlckR1bXAoY2FsbGVyQ29k
ZUJsb2NrKSwgIiB0byAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0gICAgaWYgKCFtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKSB7Ci0gICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkK
LSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlz
IG5hdGl2ZS5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoYXNCYXNl
bGluZUpJVFByb2ZpbGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIURGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZiAoIURGRzo6aXNTbWFsbEVub3VnaFRvSW5saW5lQ29kZUludG8oY2FsbGVyQ29kZUJsb2Nr
KSkgewotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAg
Q2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyB0b28gbGFyZ2UuXG4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSB7Ci0gICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMg
c3RpbGwgaW4gdGhlIGludGVycHJldGVyLCB0aGVuIHdlIGNhbid0IGV4cGVjdCBpbmxpbmluZyB0
bwotICAgICAgICAvLyBoYXBwZW4gYW55dGltZSBzb29uLiBBc3N1bWUgaXQncyBwcm9maXRhYmxl
IHRvIG9wdGltaXplIGl0IHNlcGFyYXRlbHkuIFRoaXMKLSAgICAgICAgLy8gZW5zdXJlcyB0aGF0
IGEgZnVuY3Rpb24gaXMgU0FCSSBvbmx5IGlmIGl0IGlzIGNhbGxlZCBubyBtb3JlIGZyZXF1ZW50
bHkgdGhhbgotICAgICAgICAvLyBhbnkgb2YgaXRzIGNhbGxlcnMuCi0gICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2Fs
bExpbmsoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2Ug
Y2FsbGVyIGlzIGluIExMSW50LlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSkpIHsKLSAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICAgICAgZGF0YUxvZygiICAg
IENsZWFyaW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuXG4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5j
b2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlz
IGVpdGhlciBldmFsIG9yIGdsb2JhbCBjb2RlLCBhc3N1bWUgdGhhdCB0aGF0IHdvbid0IGJlCi0g
ICAgICAgIC8vIG9wdGltaXplZCBhbnl0aW1lIHNvb24uIEZvciBldmFsIGNvZGUgdGhpcyBpcyBw
YXJ0aWN1bGFybHkgdHJ1ZSBzaW5jZSB3ZQotICAgICAgICAvLyBkZWxheSBldmFsIG9wdGltaXph
dGlvbiBieSBhICpsb3QqLgotICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNl
OwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBub3QgYSBmdW5jdGlv
bi5cbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVjdXJzaXZlIGNhbGxz
IHdvbid0IGJlIGlubGluZWQuCi0gICAgUmVjdXJzaW9uQ2hlY2tGdW5jdG9yIGZ1bmN0b3IoY2Fs
bGVyRnJhbWUsIHRoaXMsIE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkpOwotICAgIHZt
KCktPnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLQotICAgIGlmIChmdW5jdG9yLmRp
ZFJlY3Vyc2UoKSkgewotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIHJlY3Vyc2lvbiB3
YXMgZGV0ZWN0ZWQuXG4iKTsKLSAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2FsbGVyQ29kZUJsb2Nr
LT5jYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpID09IERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KSB7
Ci0gICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJvbSAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiICIs
IGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwgKnRoaXMsICI6IGNhbGxlcidzIERG
RyBjYXBhYmlsaXR5IGxldmVsIGlzIG5vdCBzZXQuXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKGNhbkNvbXBpbGUoY2FsbGVyQ29kZUJsb2NrLT5jYXBhYmlsaXR5
TGV2ZWxTdGF0ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlQ2FsbExpbmsoKSkKLSAgICAgICAgZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmVj
YXVzZSB0aGUgY2FsbGVyIGlzIG5vdCBhIERGRyBjYW5kaWRhdGUuXG4iKTsKLSAgICAKLSAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLXVuc2lnbmVkIENv
ZGVCbG9jazo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAotewotI2lmIEVOQUJM
RShKSVQpCi0gICAgQVNTRVJUKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gT3B0aW9u
czo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSk7Ci0gICAgcmV0dXJuIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXI7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi19Ci0KLSNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldENhbGxl
ZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycykKLXsKLSAgICBt
X2NhbGxlZVNhdmVSZWdpc3RlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRM
aXN0PihjYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnNldENhbGxl
ZVNhdmVSZWdpc3RlcnMoc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdp
c3RlckF0T2Zmc2V0TGlzdCkKLXsKLSAgICBtX2NhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3Zl
KHJlZ2lzdGVyQXRPZmZzZXRMaXN0KTsKLX0KLSAgICAKLXN0YXRpYyBzaXplX3Qgcm91bmRDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoc2l6ZV90IGNhbGxlZVNhdmVSZWdpc3RlcnMp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNwdVJlZ2lzdGVyU2l6ZSA9IHNpemVvZih2
b2lkKik7Ci0gICAgcmV0dXJuIChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9mKFJlZ2lz
dGVyKSwgY2FsbGVlU2F2ZVJlZ2lzdGVycyAqIGNwdVJlZ2lzdGVyU2l6ZSkgLyBzaXplb2YoUmVn
aXN0ZXIpKTsKLQotfQotCi1zaXplX3QgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkKLXsKLSAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMobnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKLX0KLQotc2l6ZV90IENvZGVCbG9jazo6Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkKLXsKLSAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLT5zaXplKCkpOwotfQotCi12b2lkIENv
ZGVCbG9jazo6Y291bnRSZW9wdGltaXphdGlvbigpCi17Ci0gICAgbV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcisrOwotICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0
aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkKLSAgICAgICAgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlciA9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4KCk7Ci19Ci0KLXVuc2lnbmVkIENvZGVCbG9jazo6bnVtYmVyT2ZERkdDb21waWxlcygpCi17
Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGlm
IChPcHRpb25zOjp0ZXN0VGhlRlRMKCkpIHsKLSAgICAgICAgaWYgKG1fZGlkRmFpbEZUTENvbXBp
bGF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDA7Ci0gICAgICAgIHJldHVybiAobV9o
YXNCZWVuQ29tcGlsZWRXaXRoRlRMID8gMSA6IDApICsgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKLSAgICB9Ci0gICAgcmV0dXJuIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFj
ZW1lbnQoKS0+aml0VHlwZSgpKSA/IDEgOiAwKSArIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXI7Ci19Ci0KLWludDMyX3QgQ29kZUJsb2NrOjpjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIo
KSBjb25zdAotewotICAgIGlmIChjb2RlVHlwZSgpID09IEV2YWxDb2RlKQotICAgICAgICByZXR1
cm4gT3B0aW9uczo6ZXZhbFRocmVzaG9sZE11bHRpcGxpZXIoKTsKLSAgICAKLSAgICByZXR1cm4g
MTsKLX0KLQotZG91YmxlIENvZGVCbG9jazo6b3B0aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0Zh
Y3RvcigpCi17Ci0gICAgLy8gVGhpcyBleHByZXNzaW9uIGFyaXNlcyBmcm9tIGRvaW5nIGEgbGVh
c3Qtc3F1YXJlcyBmaXQgb2YKLSAgICAvLwotICAgIC8vIEZbeF9dID06IGEgKiBTcXJ0W3ggKyBi
XSArIEFic1tjICogeF0gKyBkCi0gICAgLy8KLSAgICAvLyBhZ2FpbnN0IHRoZSBkYXRhIHBvaW50
czoKLSAgICAvLwotICAgIC8vICAgIHggICAgICAgRlt4X10KLSAgICAvLyAgICAxMCAgICAgICAw
LjkgICAgICAgICAgKHNtYWxsZXN0IHJlYXNvbmFibGUgY29kZSBibG9jaykKLSAgICAvLyAgIDIw
MCAgICAgICAxLjAgICAgICAgICAgKHR5cGljYWwgc21hbGwtaXNoIGNvZGUgYmxvY2spCi0gICAg
Ly8gICAzMjAgICAgICAgMS4yICAgICAgICAgIChzb21ldGhpbmcgSSBzYXcgaW4gM2QtY3ViZSB0
aGF0IEkgd2FudGVkIHRvIG9wdGltaXplKQotICAgIC8vICAxMjY4ICAgICAgIDUuMCAgICAgICAg
ICAoc29tZXRoaW5nIEkgc2F3IGluIDNkLWN1YmUgdGhhdCBJIGRpZG4ndCB3YW50IHRvIG9wdGlt
aXplKQotICAgIC8vICA0MDAwICAgICAgIDUuNSAgICAgICAgICAocmFuZG9tIGxhcmdlIHNpemUs
IHVzZWQgdG8gY2F1c2UgdGhlIGZ1bmN0aW9uIHRvIGNvbnZlcmdlIHRvIGEgc2hhbGxvdyBjdXJ2
ZSBvZiBzb21lIHNvcnQpCi0gICAgLy8gMTAwMDAgICAgICAgNi4wICAgICAgICAgIChzaW1pbGFy
IHRvIGFib3ZlKQotICAgIC8vCi0gICAgLy8gSSBhY2hpZXZlIHRoZSBtaW5pbWl6YXRpb24gdXNp
bmcgdGhlIGZvbGxvd2luZyBNYXRoZW1hdGljYSBjb2RlOgotICAgIC8vCi0gICAgLy8gTXlGdW5j
dGlvblRlbXBsYXRlW3hfLCBhXywgYl8sIGNfLCBkX10gOj0gYSpTcXJ0W3ggKyBiXSArIEFic1tj
KnhdICsgZAotICAgIC8vCi0gICAgLy8gc2FtcGxlcyA9IHt7MTAsIDAuOX0sIHsyMDAsIDF9LCB7
MzIwLCAxLjJ9LCB7MTI2OCwgNX0sIHs0MDAwLCA1LjV9LCB7MTAwMDAsIDZ9fQotICAgIC8vCi0g
ICAgLy8gc29sdXRpb24gPSAKLSAgICAvLyAgICAgTWluaW1pemVbUGx1cyBAQCAoKE15RnVuY3Rp
b25UZW1wbGF0ZVsjW1sxXV0sIGEsIGIsIGMsIGRdIC0gI1tbMl1dKV4yICYgL0Agc2FtcGxlcyks
Ci0gICAgLy8gICAgICAgICB7YSwgYiwgYywgZH1dW1syXV0KLSAgICAvLwotICAgIC8vIEFuZCB0
aGUgY29kZSBiZWxvdyAodG8gaW5pdGlhbGl6ZSBhLCBiLCBjLCBkKSBpcyBnZW5lcmF0ZWQgYnk6
Ci0gICAgLy8KLSAgICAvLyBQcmludFsiY29uc3QgZG91YmxlICIgPD4gVG9TdHJpbmdbI1tbMV1d
XSA8PiAiID0gIiA8PgotICAgIC8vICAgICBJZlsjW1syXV0gPCAwLjAwMDAxLCAiMC4wIiwgVG9T
dHJpbmdbI1tbMl1dXV0gPD4gIjsiXSAmIC9AIHNvbHV0aW9uCi0gICAgLy8KLSAgICAvLyBXZSd2
ZSBsb25nIGtub3duIHRoZSBmb2xsb3dpbmcgdG8gYmUgdHJ1ZToKLSAgICAvLyAtIFNtYWxsIGNv
ZGUgYmxvY2tzIGFyZSBjaGVhcCB0byBvcHRpbWl6ZSBhbmQgc28gd2Ugc2hvdWxkIGRvIGl0IHNv
b25lciByYXRoZXIKLSAgICAvLyAgIHRoYW4gbGF0ZXIuCi0gICAgLy8gLSBMYXJnZSBjb2RlIGJs
b2NrcyBhcmUgZXhwZW5zaXZlIHRvIG9wdGltaXplIGFuZCBzbyB3ZSBzaG91bGQgcG9zdHBvbmUg
ZG9pbmcgc28sCi0gICAgLy8gICBhbmQgc29tZXRpbWVzIGhhdmUgYSBsYXJnZSBlbm91Z2ggdGhy
ZXNob2xkIHRoYXQgd2UgbmV2ZXIgb3B0aW1pemUgdGhlbS4KLSAgICAvLyAtIFRoZSBkaWZmZXJl
bmNlIGluIGNvc3QgaXMgbm90IHRvdGFsbHkgbGluZWFyIGJlY2F1c2UgKGEpIGp1c3QgaW52b2tp
bmcgdGhlCi0gICAgLy8gICBERkcgaW5jdXJzIHNvbWUgYmFzZSBjb3N0IGFuZCAoYikgZm9yIGxh
cmdlIGNvZGUgYmxvY2tzIHRoZXJlIGlzIGVub3VnaCBzbG9wCi0gICAgLy8gICBpbiB0aGUgY29y
cmVsYXRpb24gYmV0d2VlbiBpbnN0cnVjdGlvbiBjb3VudCBhbmQgdGhlIGFjdHVhbCBjb21waWxh
dGlvbiBjb3N0Ci0gICAgLy8gICB0aGF0IGZvciB0aG9zZSBsYXJnZSBibG9ja3MsIHRoZSBpbnN0
cnVjdGlvbiBjb3VudCBzaG91bGQgbm90IGhhdmUgYSBzdHJvbmcKLSAgICAvLyAgIGluZmx1ZW5j
ZSBvbiBvdXIgdGhyZXNob2xkLgotICAgIC8vCi0gICAgLy8gSSBrbmV3IHRoZSBnb2FscyBidXQg
SSBkaWRuJ3Qga25vdyBob3cgdG8gYWNoaWV2ZSB0aGVtOyBzbyBJIHBpY2tlZCBhbiBpbnRlcmVz
dGluZwotICAgIC8vIGV4YW1wbGUgd2hlcmUgdGhlIGhldXJpc3RpY3Mgd2VyZSByaWdodCAoY29k
ZSBibG9jayBpbiAzZC1jdWJlIHdpdGggaW5zdHJ1Y3Rpb24KLSAgICAvLyBjb3VudCAzMjAsIHdo
aWNoIGdvdCBjb21waWxlZCBlYXJseSBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuKSBhbmQgb25lIHdo
ZXJlIHRoZXkgd2VyZQotICAgIC8vIHRvdGFsbHkgd3JvbmcgKGNvZGUgYmxvY2sgaW4gM2QtY3Vi
ZSB3aXRoIGluc3RydWN0aW9uIGNvdW50IDEyNjgsIHdoaWNoIHdhcyBleHBlbnNpdmUKLSAgICAv
LyB0byBjb21waWxlIGFuZCBkaWRuJ3QgcnVuIG9mdGVuIGVub3VnaCB0byB3YXJyYW50IGNvbXBp
bGF0aW9uIGluIG15IG9waW5pb24pLCBhbmQKLSAgICAvLyB0aGVuIHRocmV3IGluIGFkZGl0aW9u
YWwgZGF0YSBwb2ludHMgdGhhdCByZXByZXNlbnRlZCBteSBvd24gZ3Vlc3Mgb2Ygd2hhdCBvdXIK
LSAgICAvLyBoZXVyaXN0aWNzIHNob3VsZCBkbyBmb3Igc29tZSByb3VuZC1udW1iZXJlZCBleGFt
cGxlcy4KLSAgICAvLwotICAgIC8vIFRoZSBleHByZXNzaW9uIHRvIHdoaWNoIEkgZGVjaWRlZCB0
byBmaXQgdGhlIGRhdGEgYXJvc2UgYmVjYXVzZSBJIHN0YXJ0ZWQgd2l0aCBhbgotICAgIC8vIGFm
ZmluZSBmdW5jdGlvbiwgYW5kIHRoZW4gZGlkIHR3byB0aGluZ3M6IHB1dCB0aGUgbGluZWFyIHBh
cnQgaW4gYW4gQWJzIHRvIGVuc3VyZQotICAgIC8vIHRoYXQgdGhlIGZpdCBkaWRuJ3QgZW5kIHVw
IGNob29zaW5nIGEgbmVnYXRpdmUgdmFsdWUgb2YgYyAod2hpY2ggd291bGQgcmVzdWx0IGluCi0g
ICAgLy8gdGhlIGZ1bmN0aW9uIHR1cm5pbmcgb3ZlciBhbmQgZ29pbmcgbmVnYXRpdmUgZm9yIGxh
cmdlIHgpIGFuZCBJIHRocmV3IGluIGEgU3FydAotICAgIC8vIHRlcm0gYmVjYXVzZSBTcXJ0IHJl
cHJlc2VudHMgbXkgaW50dXRpb24gdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIG1vcmUgc2Vu
c2l0aXZlCi0gICAgLy8gdG8gc21hbGwgY2hhbmdlcyBpbiBzbWFsbCB2YWx1ZXMgb2YgeCwgYnV0
IGxlc3Mgc2Vuc2l0aXZlIHdoZW4geCBnZXRzIGxhcmdlLgotICAgIAotICAgIC8vIE5vdGUgdGhh
dCB0aGUgY3VycmVudCBmaXQgZXNzZW50aWFsbHkgZWxpbWluYXRlcyB0aGUgbGluZWFyIHBvcnRp
b24gb2YgdGhlCi0gICAgLy8gZXhwcmVzc2lvbiAoYyA9PSAwLjApLgotICAgIGNvbnN0IGRvdWJs
ZSBhID0gMC4wNjE1MDQ7Ci0gICAgY29uc3QgZG91YmxlIGIgPSAxLjAyNDA2OwotICAgIGNvbnN0
IGRvdWJsZSBjID0gMC4wOwotICAgIGNvbnN0IGRvdWJsZSBkID0gMC44MjU5MTQ7Ci0gICAgCi0g
ICAgZG91YmxlIGluc3RydWN0aW9uQ291bnQgPSB0aGlzLT5pbnN0cnVjdGlvbkNvdW50KCk7Ci0g
ICAgCi0gICAgQVNTRVJUKGluc3RydWN0aW9uQ291bnQpOyAvLyBNYWtlIHN1cmUgdGhpcyBpcyBj
YWxsZWQgb25seSBhZnRlciB3ZSBoYXZlIGFuIGluc3RydWN0aW9uIHN0cmVhbTsgb3RoZXJ3aXNl
IGl0J2xsIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZSBvZiBkLCB3aGljaCBtYWtlcyBubyBzZW5zZS4K
LSAgICAKLSAgICBkb3VibGUgcmVzdWx0ID0gZCArIGEgKiBzcXJ0KGluc3RydWN0aW9uQ291bnQg
KyBiKSArIGMgKiBpbnN0cnVjdGlvbkNvdW50OwotICAgIAotICAgIHJlc3VsdCAqPSBjb2RlVHlw
ZVRocmVzaG9sZE11bHRpcGxpZXIoKTsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7Ci0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAqdGhpcywgIjogaW5zdHJ1Y3Rp
b24gY291bnQgaXMgIiwgaW5zdHJ1Y3Rpb25Db3VudCwKLSAgICAgICAgICAgICIsIHNjYWxpbmcg
ZXhlY3V0aW9uIGNvdW50ZXIgYnkgIiwgcmVzdWx0LCAiICogIiwgY29kZVR5cGVUaHJlc2hvbGRN
dWx0aXBsaWVyKCksCi0gICAgICAgICAgICAiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RhdGljIGludDMyX3QgY2xpcFRocmVzaG9sZChkb3VibGUgdGhyZXNob2xkKQot
ewotICAgIGlmICh0aHJlc2hvbGQgPCAxLjApCi0gICAgICAgIHJldHVybiAxOwotICAgIAotICAg
IGlmICh0aHJlc2hvbGQgPiBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1heCgpOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aHJl
c2hvbGQpOwotfQotCi1pbnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRDb3VudGVyVmFsdWUoaW50
MzJfdCBkZXNpcmVkVGhyZXNob2xkKQotewotICAgIHJldHVybiBjbGlwVGhyZXNob2xkKAotICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KGRlc2lyZWRUaHJlc2hvbGQpICoKLSAgICAgICAgb3B0
aW1pemF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpICoKLSAgICAgICAgKDEgPDwgcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIoKSkpOwotfQotCi1ib29sIENvZGVCbG9jazo6Y2hlY2tJZk9w
dGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQotewotI2lmIEVOQUJMRShERkdfSklUKQotICAg
IGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdHbG9iYWxERkdXb3Jr
bGlzdE9yTnVsbCgpKSB7Ci0gICAgICAgIGlmICh3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShE
Rkc6OkNvbXBpbGF0aW9uS2V5KHRoaXMsIERGRzo6REZHTW9kZSkpCi0gICAgICAgICAgICA9PSBE
Rkc6OldvcmtsaXN0OjpDb21waWxlZCkgewotICAgICAgICAgICAgb3B0aW1pemVOZXh0SW52b2Nh
dGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLSAgICAKLSAgICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xk
Q3Jvc3NlZEFuZFNldCh0aGlzKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6Om9wdGltaXplTmV4dElu
dm9jYXRpb24oKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRh
dGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7Ci0gICAgbV9q
aXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7Ci19Ci0KLXZvaWQgQ29k
ZUJsb2NrOjpkb250T3B0aW1pemVBbnl0aW1lU29vbigpCi17Ci0gICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogTm90IG9wdGltaXppbmcgYW55
dGltZSBzb29uLlxuIik7Ci0gICAgbV9qaXRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVs
eSgpOwotfQotCi12b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlcldhcm1VcCgpCi17Ci0gICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogT3B0
aW1pemluZyBhZnRlciB3YXJtLXVwLlxuIik7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9q
aXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVkQ291bnRl
clZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSksIHRoaXMp
OwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgp
Ci17Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgZGF0YUxvZygqdGhp
cywgIjogT3B0aW1pemluZyBhZnRlciBsb25nIHdhcm0tdXAuXG4iKTsKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgKLSAgICAgICAg
YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSksIHRoaXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6
ZVNvb24oKQotewotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgIGRhdGFM
b2coKnRoaXMsICI6IE9wdGltaXppbmcgc29vbi5cbiIpOwotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAotICAgICAgICBhZGp1c3Rl
ZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24oKSksIHRoaXMp
OwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZUJsb2NrOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRo
Q29uY3VycmVudGx5KCkKLXsKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAg
ICBkYXRhTG9nKCp0aGlzLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkuXG4iKTsK
LSAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKLX0K
LQotI2lmIEVOQUJMRShERkdfSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCByZXN1bHQp
Ci17Ci0gICAgSklUQ29kZTo6SklUVHlwZSB0eXBlID0gaml0VHlwZSgpOwotICAgIGlmICh0eXBl
ICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7Ci0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IGV4
cGVjdGVkIHRvIGhhdmUgYmFzZWxpbmUgY29kZSBidXQgaGF2ZSAiLCB0eXBlLCAiXG4iKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgQ29k
ZUJsb2NrKiB0aGVSZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50KCk7Ci0gICAgaWYgKChyZXN1bHQg
PT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSAhPSAodGhlUmVwbGFjZW1lbnQgIT0gdGhpcykpIHsK
LSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogd2UgaGF2ZSByZXN1bHQgPSAiLCByZXN1bHQsICIg
YnV0ICIpOwotICAgICAgICBpZiAodGhlUmVwbGFjZW1lbnQgPT0gdGhpcykKLSAgICAgICAgICAg
IGRhdGFMb2coIndlIGFyZSBvdXIgb3duIHJlcGxhY2VtZW50LlxuIik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGRhdGFMb2coIm91ciByZXBsYWNlbWVudCBpcyAiLCBwb2ludGVyRHVtcCh0
aGVSZXBsYWNlbWVudCksICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOgotICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIG9wdGltaXplTmV4
dEludm9jYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25GYWls
ZWQ6Ci0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0gICAgICAgIC8vIFdlJ2QgbGlrZSB0byBk
byBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQotICAgICAg
ICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRs
eSByYWN5LiBJdCB3b24ndAotICAgICAgICAvLyBuZWNlc3NhcmlseSBndWFyYW50ZWUgYW55dGhp
bmcuIFNvLCB3ZSBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoYXQKLSAgICAgICAgLy8gZnVuY3Rp
b24gZW5kcyB1cCBiZWluZyBhIG5vLW9wLCB3ZSBzdGlsbCBldmVudHVhbGx5IHJldHJ5IGFuZCBy
ZWFsaXplCi0gICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBvcHRpbWl6ZWQgY29kZSByZWFkeS4KLSAg
ICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
b21waWxhdGlvbkludmFsaWRhdGVkOgotICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFs
IGJhY2tvZmYuCi0gICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSAgICAgICAgb3B0aW1p
emVBZnRlcldhcm1VcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGRhdGFM
b2coIlVucmVjb2duaXplZCByZXN1bHQ6ICIsIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSwgIlxu
Iik7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2VuZGlmCi0gICAg
Ci11aW50MzJfdCBDb2RlQmxvY2s6OmFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90
IGRlc2lyZWRUaHJlc2hvbGQpCi17Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKTsKLSAgICAvLyBDb21wdXRlIHRoaXMgdGhlIGxhbWUgd2F5IHNvIHdlIGRv
bid0IHNhdHVyYXRlLiBUaGlzIGlzIGNhbGxlZCBpbmZyZXF1ZW50bHkKLSAgICAvLyBlbm91Z2gg
dGhhdCB0aGlzIGxvb3Agd29uJ3QgaHVydCB1cy4KLSAgICB1bnNpZ25lZCByZXN1bHQgPSBkZXNp
cmVkVGhyZXNob2xkOwotICAgIGZvciAodW5zaWduZWQgbiA9IGJhc2VsaW5lVmVyc2lvbigpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyBuLS07KSB7Ci0gICAgICAgIHVuc2lnbmVkIG5l
d1Jlc3VsdCA9IHJlc3VsdCA8PCAxOwotICAgICAgICBpZiAobmV3UmVzdWx0IDwgcmVzdWx0KQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsK
LSAgICAgICAgcmVzdWx0ID0gbmV3UmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi11aW50MzJfdCBDb2RlQmxvY2s6OmV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkKLXsKLSAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6
b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSAqIGNvZGVUeXBlVGhyZXNob2xkTXVsdGlw
bGllcigpKTsKLX0KLQotdWludDMyX3QgQ29kZUJsb2NrOjpleGl0Q291bnRUaHJlc2hvbGRGb3JS
ZW9wdGltaXphdGlvbkZyb21Mb29wKCkKLXsKLSAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRU
aHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgp
ICogY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVyKCkpOwotfQotCi1ib29sIENvZGVCbG9jazo6
c2hvdWxkUmVvcHRpbWl6ZU5vdygpCi17Ci0gICAgcmV0dXJuIG9zckV4aXRDb3VudGVyKCkgPj0g
ZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKLX0KLQotYm9vbCBDb2RlQmxv
Y2s6OnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCi17Ci0gICAgcmV0dXJuIG9zckV4aXRD
b3VudGVyKCkgPj0gZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgp
OwotfQotI2VuZGlmCi0KLUFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5UHJvZmlsZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1fYXJyYXlQcm9maWxlc1tpXS5ieXRlY29kZU9mZnNldCgpID09IGJ5
dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuICZtX2FycmF5UHJvZmlsZXNbaV07Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCi1BcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJy
YXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGdldEFycmF5UHJvZmlsZShsb2NrZXIs
IGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmFkZEFycmF5
UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgbV9hcnJheVByb2ZpbGVzLmFwcGVuZChBcnJheVByb2ZpbGUoYnl0ZWNvZGVP
ZmZzZXQpKTsKLSAgICByZXR1cm4gJm1fYXJyYXlQcm9maWxlcy5sYXN0KCk7Ci19Ci0KLUFycmF5
UHJvZmlsZSogQ29kZUJsb2NrOjphZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1
cm4gYWRkQXJyYXlQcm9maWxlKGxvY2tlciwgYnl0ZWNvZGVPZmZzZXQpOwotfQotCi1BcnJheVBy
b2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBBcnJheVBy
b2ZpbGUqIHJlc3VsdCA9IGdldEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiBhZGRB
cnJheVByb2ZpbGUobG9ja2VyLCBieXRlY29kZU9mZnNldCk7Ci19Ci0KLUFycmF5UHJvZmlsZSog
Q29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkK
LXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBn
ZXRPckFkZEFycmF5UHJvZmlsZShsb2NrZXIsIGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotI2lmIEVO
QUJMRShERkdfSklUKQotVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiYgQ29kZUJsb2NrOjpjb2RlT3JpZ2lucygpCi17Ci0gICAgcmV0dXJuIG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmNvZGVPcmlnaW5zOwotfQotCi1zaXplX3QgQ29kZUJsb2NrOjpudW1iZXJPZkRG
R0lkZW50aWZpZXJzKCkgY29uc3QKLXsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gbV9qaXRD
b2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnMuc2l6ZSgpOwotfQotCi1jb25zdCBJZGVu
dGlmaWVyJiBDb2RlQmxvY2s6OmlkZW50aWZpZXIoaW50IGluZGV4KSBjb25zdAotewotICAgIHNp
emVfdCB1bmxpbmtlZElkZW50aWZpZXJzID0gbV91bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRp
ZmllcnMoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IHVubGlua2Vk
SWRlbnRpZmllcnMpCi0gICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihp
bmRleCk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsK
LSAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+ZGZnSWRlbnRpZmllcnNbaW5kZXgg
LSB1bmxpbmtlZElkZW50aWZpZXJzXTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQot
dm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNp
Z25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwotICAgIAotICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cyA9IDA7Ci0gICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2
aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAg
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOwot
ICAgICAgICB1bnNpZ25lZCBudW1TYW1wbGVzID0gcHJvZmlsZS0+dG90YWxOdW1iZXJPZlNhbXBs
ZXMoKTsKLSAgICAgICAgaWYgKG51bVNhbXBsZXMgPiBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cykKLSAgICAgICAgICAgIG51bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0czsgLy8gV2UgZG9uJ3Qgd2FudCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90IHRv
IGJlIGdpdmVuIG1vcmUgd2VpZ2h0LgotICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
ICs9IG51bVNhbXBsZXM7Ci0gICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwg
MCkgewotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
cik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvZmls
ZS0+bnVtYmVyT2ZTYW1wbGVzKCkgfHwgcHJvZmlsZS0+bV9wcmVkaWN0aW9uICE9IFNwZWNOb25l
KQotICAgICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7Ci0g
ICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgIH0K
LSAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxl
cy5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKGxvY2tlcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCkKLXsKLSAgICB1bnNp
Z25lZCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyhpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKQotewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9hcnJheVByb2ZpbGVz
W2ldLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIHRoaXMpOwotICAgIAotICAgIC8v
IERvbid0IGNvdW50IHRoZXNlIGVpdGhlciwgZm9yIHNpbWlsYXIgcmVhc29ucy4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAg
ICAgICAgbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlc1tpXS51cGRhdGVJbmRleGluZ1R5cGUoKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKCkKLXsKLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5
RXhlY3V0YWJsZSgpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB1cGRhdGVBbGxWYWx1
ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwotICAgIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoKTsK
LX0KLQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKLXsKLSAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRpbWl6
aW5nICIsICp0aGlzLCAiLi4uXG4iKTsKLQotICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygpOwotICAgIAot
ICAgIHVuc2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKLSAgICB1
bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMs
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwotCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgewotICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICJQcm9maWxlIGhvdG5lc3M6
ICVsZiAoJXUgLyAldSksICVsZiAoJXUgLyAldSlcbiIsCi0gICAgICAgICAgICAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpLAotICAgICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwKLSAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1w
bGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZW
YWx1ZVByb2ZpbGVzKCksCi0gICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsK
LSAgICB9Ci0KLSAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCi0gICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKLSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKLSAgICBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcisrOwotICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLXZvaWQgQ29kZUJsb2NrOjp0
YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkKLXsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpOwotICAgIEFTU0VSVChhbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jayA9IGFsdGVybmF0aXZlKCk7Ci0gICAgCi0gICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKLSAg
ICBjYXNlIEpJVENvZGU6OkRGR0pJVDogewotICAgICAgICBERkc6OkpJVENvZGUqIGppdENvZGUg
PSBtX2ppdENvZGUtPmRmZygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaml0
Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgREZHOjpPU1JFeGl0JiBl
eGl0ID0gaml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgY2FzZSBKSVRDb2RlOjpG
VExKSVQ6IHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gYXZvaWQgZHVwbGlj
YXRpbmcgdGhpcyBjb2RlIHNpbmNlIHRoZSBGVEw6OkpJVENvZGU6Om9zckV4aXQKLSAgICAgICAg
Ly8gdmVjdG9yIGNvbnRhaW5zIGEgdG90YWxseSBkaWZmZXJlbnQgdHlwZSwgdGhhdCBqdXN0IHNv
IGhhcHBlbnMgdG8gYmVoYXZlIGxpa2UKLSAgICAgICAgLy8gREZHOjpKSVRDb2RlOjpvc3JFeGl0
LgotICAgICAgICBGVEw6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmZ0bCgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgRlRMOjpPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtp
XTsKLSAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJv
ZmlsZWRCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0g
ICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
LQotI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi12b2lkIENvZGVCbG9jazo6ZHVt
cFZhbHVlUHJvZmlsZXMoKQotewotICAgIGRhdGFMb2coIlZhbHVlUHJvZmlsZSBmb3IgIiwgKnRo
aXMsICI6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZh
bHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGdl
dEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOwotICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29k
ZU9mZnNldCA8IDApIHsKLSAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0ID09IC0xKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICBhcmcgPSAldTogIiwgaSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICIsIHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2Ft
cGxlcygpICYmIHByb2ZpbGUtPm1fcHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0YoIjxlbXB0eT5cbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBkYXRh
TG9nRigiXG4iKTsKLSAgICB9Ci0gICAgZGF0YUxvZygiUmFyZUNhc2VQcm9maWxlIGZvciAiLCAq
dGhpcywgIjpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlJhcmVD
YXNlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9
IHJhcmVDYXNlUHJvZmlsZShpKTsKLSAgICAgICAgZGF0YUxvZ0YoIiAgIGJjID0gJWQ6ICV1XG4i
LCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwotICAgIH0K
LX0KLSNlbmRpZiAvLyBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQotCi11bnNpZ25lZCBD
b2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCi17Ci0gICAgc3dpdGNoIChqaXRUeXBlKCkp
IHsKLSAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgIHJldHVybiBM
TEludDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJl
Z2lzdGVyQ291bnRGb3IodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgIGNhc2UgSklUQ29kZTo6
RlRMSklUOgotICAgICAgICByZXR1cm4gaml0Q29kZSgpLT5kZmdDb21tb24oKS0+ZnJhbWVSZWdp
c3RlckNvdW50OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLWludCBDb2RlQmxvY2s6OnN0YWNrUG9pbnRlck9mZnNldCgpCi17
Ci0gICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudCgp
IC0gMSkub2Zmc2V0KCk7Ci19Ci0KLXNpemVfdCBDb2RlQmxvY2s6OnByZWRpY3RlZE1hY2hpbmVD
b2RlU2l6ZSgpCi17Ci0gICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBmcm9tIENvZGVCbG9jazo6
Q29kZUJsb2NrIGJlZm9yZSBlaXRoZXIgbV92bSBvciB0aGUKLSAgICAvLyBpbnN0cnVjdGlvbnMg
aGF2ZSBiZWVuIGluaXRpYWxpemVkLiBJdCdzIE9LIHRvIHJldHVybiAwIGJlY2F1c2Ugd2hhdCB3
aWxsIHJlYWxseQotICAgIC8vIG1hdHRlciBpcyB0aGUgcmVjb21wdXRhdGlvbiBvZiB0aGlzIHZh
bHVlIHdoZW4gdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQuCi0gICAgaWYgKCFtX3ZtKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoISptX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQpCi0gICAgICAgIHJldHVybiAwOyAvLyBJdCdzIGFz
IGdvb2Qgb2YgYSBwcmVkaWN0aW9uIGFzIHdlJ2xsIGdldC4KLSAgICAKLSAgICAvLyBCZSBjb25z
ZXJ2YXRpdmU6IHJldHVybiBhIHNpemUgdGhhdCB3aWxsIGJlIGFuIG92ZXJlc3RpbWF0aW9uIDg0
JSBvZiB0aGUgdGltZS4KLSAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fdm0tPm1hY2hpbmVDb2Rl
Qnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+bWVhbigpICsKLSAgICAgICAgbV92
bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5zdGFuZGFy
ZERldmlhdGlvbigpOwotICAgIAotICAgIC8vIEJlIHBhcmFub2lkOiBzaWxlbnRseSByZWplY3Qg
Ym9ndXMgbXVsdGlwaWVycy4gU2lsZW50bHkgZG9pbmcgdGhlICJ3cm9uZyIgdGhpbmcKLSAgICAv
LyBoZXJlIGlzIE9LLCBzaW5jZSB0aGlzIHdob2xlIG1ldGhvZCBpcyBqdXN0IGEgaGV1cmlzdGlj
LgotICAgIGlmIChtdWx0aXBsaWVyIDwgMCB8fCBtdWx0aXBsaWVyID4gMTAwMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgZG91YmxlIGRvdWJsZVJlc3VsdCA9IG11bHRpcGxpZXIgKiBt
X2luc3RydWN0aW9ucy5zaXplKCk7Ci0gICAgCi0gICAgLy8gQmUgZXZlbiBtb3JlIHBhcmFub2lk
OiBzaWxlbnRseSByZWplY3QgdmFsdWVzIHRoYXQgd29uJ3QgZml0IGludG8gYSBzaXplX3QuIElm
Ci0gICAgLy8gdGhlIGZ1bmN0aW9uIGlzIHNvIGh1Z2UgdGhhdCB3ZSBjYW4ndCBldmVuIGZpdCBp
dCBpbnRvIHZpcnR1YWwgbWVtb3J5IHRoZW4gd2UKLSAgICAvLyBzaG91bGQgcHJvYmFibHkgaGF2
ZSBzb21lIG90aGVyIGd1YXJkcyBpbiBwbGFjZSB0byBwcmV2ZW50IHVzIGZyb20gZXZlbiBnZXR0
aW5nCi0gICAgLy8gdG8gdGhpcyBwb2ludC4KLSAgICBpZiAoZG91YmxlUmVzdWx0ID4gc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZG91YmxlUmVzdWx0KTsKLX0KLQotYm9vbCBD
b2RlQmxvY2s6OnVzZXNPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCi17Ci0gICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICB1bnNpZ25lZCBp
bnN0cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIAotICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9u
Q291bnQ7ICkgewotICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0
cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSB7Ci0jZGVmaW5lIERFRklO
RV9PUChjdXJPcGNvZGUsIGxlbmd0aCkgICAgICAgIFwKLSAgICAgICAgY2FzZSBjdXJPcGNvZGU6
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGN1ck9wY29kZSA9PSBvcGNv
ZGVJRCkgICAgICBcCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgICAgICAgXAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoREVGSU5FX09QKQot
I3VuZGVmIERFRklORV9PUAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIENvZGVCbG9jazo6bmFtZUZv
clJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uZ2V0KCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBq
c0R5bmFtaWNDYXN0PFN5bWJvbFRhYmxlKj4obV9jb25zdGFudFJlZ2lzdGVyc1tpXS5nZXQoKSkp
IHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5t
X2xvY2spOwotICAgICAgICAgICAgYXV0byBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8gcHRyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7
IHB0ciAhPSBlbmQ7ICsrcHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci0+dmFsdWUudmFy
T2Zmc2V0KCkgPT0gVmFyT2Zmc2V0KHZpcnR1YWxSZWdpc3RlcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBmcm9tIHRoZSBjb21waWxhdGlvbiB0aHJl
YWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTUzMDAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB0ci0+a2V5Lmdl
dCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IHRoaXNSZWdpc3RlcigpKQotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJ0aGlzIik7Ci0gICAgaWYgKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiYXJndW1lbnRzWyUzZF0iLCB2
aXJ0dWFsUmVnaXN0ZXIudG9Bcmd1bWVudCgpKTsKLQotICAgIHJldHVybiAiIjsKLX0KLQotVmFs
dWVQcm9maWxlKiBDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBi
eXRlY29kZU9mZnNldCkKLXsKLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUp
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG9wY29kZUxlbmd0aChvcGNvZGVJRCk7Ci0gICAgcmV0
dXJuIGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgbGVuZ3RoIC0gMV0udS5wcm9maWxl
OwotfQotCi12b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQotewotICAgIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBmcm9tIHNjcmF0
Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KLSAgICAKLSAgICBG
YXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KDApOwotICAgIAotICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewotICAgICAgICBiZWdpblZhbGlk
YXRpb25EaWRGYWlsKCk7Ci0gICAgICAgIGRhdGFMb2coIiAgICBXcm9uZyBudW1iZXIgb2YgYml0
cyBpbiByZXN1bHQhXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0
SGVhZCwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICBCaXQgY291bnQ6ICIsIGxpdmVBdEhl
YWQubnVtQml0cygpLCAiXG4iKTsKLSAgICAgICAgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAg
ICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DYWxsZWVMb2NhbHM7IGktLTsp
IHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxpdmVBdEhlYWRbaV0pIHsKLSAgICAgICAgICAg
IGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBWYXJp
YWJsZSAiLCByZWcsICIgaXMgZXhwZWN0ZWQgdG8gYmUgZGVhZC5cbiIpOwotICAgICAgICAgICAg
ZGF0YUxvZygiICAgIFJlc3VsdDogIiwgbGl2ZUF0SGVhZCwgIlxuIik7Ci0gICAgICAgICAgICBl
bmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvZGVC
bG9jazo6YmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpCi17Ci0gICAgZGF0YUxvZygiVmFsaWRhdGlv
biBmYWlsdXJlIGluICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLX0KLQot
dm9pZCBDb2RlQmxvY2s6OmVuZFZhbGlkYXRpb25EaWRGYWlsKCkKLXsKLSAgICBkYXRhTG9nKCJc
biIpOwotICAgIGR1bXBCeXRlY29kZSgpOwotICAgIGRhdGFMb2coIlxuIik7Ci0gICAgZGF0YUxv
ZygiVmFsaWRhdGlvbiBmYWlsdXJlLlxuIik7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJl
YWtwb2ludHMpCi17Ci0gICAgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsKLSAg
ICBBU1NFUlQobV9udW1CcmVha3BvaW50cyk7Ci0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKQotICAgICAgICBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVU
b0RlYnVnZ2VyQnJlYWtwb2ludCk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01v
ZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGUgbW9kZSkKLXsKLSAgICBtX3N0ZXBwaW5nTW9kZSA9
IG1vZGU7Ci0gICAgaWYgKG1vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9EZWJ1Z2dlclN0ZXBwaW5nKTsKLX0KLQotUmFyZUNhc2VQcm9maWxlKiBDb2Rl
QmxvY2s6OmFkZFJhcmVDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgbV9y
YXJlQ2FzZVByb2ZpbGVzLmFwcGVuZChSYXJlQ2FzZVByb2ZpbGUoYnl0ZWNvZGVPZmZzZXQpKTsK
LSAgICByZXR1cm4gJm1fcmFyZUNhc2VQcm9maWxlcy5sYXN0KCk7Ci19Ci0KLVJhcmVDYXNlUHJv
ZmlsZSogQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0
ZWNvZGVPZmZzZXQpCi17Ci0gICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2Zp
bGUsIGludD4oCi0gICAgICAgIG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVz
LnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVj
b2RlT2Zmc2V0KTsKLX0KLQotdW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3Vu
dEZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBSYXJlQ2FzZVBy
b2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIHJldHVybiBwcm9maWxlLT5tX2Nv
dW50ZXI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0
aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgcmV0
dXJuIGFyaXRoUHJvZmlsZUZvclBDKGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9m
ZnNldCk7Ci19Ci0KLUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JQQyhJ
bnN0cnVjdGlvbiogcGMpCi17Ci0gICAgYXV0byBvcGNvZGVJRCA9IHZtKCktPmludGVycHJldGVy
LT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJv
ZmlsZSo+KCZwY1szXS51Lm9wZXJhbmQpOwotICAgIGNhc2Ugb3BfYml0b3I6Ci0gICAgY2FzZSBv
cF9iaXRhbmQ6Ci0gICAgY2FzZSBvcF9iaXR4b3I6Ci0gICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2Fz
ZSBvcF9tdWw6Ci0gICAgY2FzZSBvcF9zdWI6Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzRdLnUub3BlcmFuZCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLWJvb2wgQ29kZUJsb2NrOjpjb3VsZFRha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2Rl
T2Zmc2V0KQotewotICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEFyaXRoUHJvZmlsZSogcHJvZmlsZSA9IGFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBpZiAoIXByb2ZpbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcHJvZmlsZS0+dG9va1NwZWNpYWxGYXN0UGF0
aCgpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLURGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9j
azo6Y2FwYWJpbGl0eUxldmVsKCkKLXsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQg
PSBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7Ci0gICAgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9
IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLXZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoUmVmQ291
bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKQotewotICAgIGlmICghdW5saW5r
ZWRDb2RlQmxvY2soKS0+aGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBieXRlY29kZU9mZnNl
dHMgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBvZmZzZXRzTGVuZ3RoID0gYnl0ZWNvZGVP
ZmZzZXRzLnNpemUoKTsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykgewotICAgICAgICAvLyBCZWNh
dXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93IGlzIGVtaXR0ZWQgYXQgdGhlIGJlZ2lubmluZyBv
ZiBldmVyeSBiYXNpYyBibG9jaywgZmluZGluZyAKLSAgICAgICAgLy8gdGhlIG5leHQgb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3cgd2lsbCBnaXZlIHVzIHRoZSB0ZXh0IHJhbmdlIG9mIGEgc2luZ2xl
IGJhc2ljIGJsb2NrLgotICAgICAgICBzaXplX3Qgc3RhcnRJZHggPSBieXRlY29kZU9mZnNldHNb
aV07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChpbnN0cnVjdGlvbnNbc3RhcnRJZHhdLnUub3Bjb2RlKSA9PSBvcF9wcm9maWxlX2NvbnRyb2xf
Zmxvdyk7Ci0gICAgICAgIGludCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnNb
c3RhcnRJZHggKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBiYXNpY0Jsb2NrRW5kT2Zmc2V0
OwotICAgICAgICBpZiAoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKSB7Ci0gICAgICAgICAgICBzaXpl
X3QgZW5kSWR4ID0gYnl0ZWNvZGVPZmZzZXRzW2kgKyAxXTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNbZW5kSWR4
XS51Lm9wY29kZSkgPT0gb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cpOwotICAgICAgICAgICAgYmFz
aWNCbG9ja0VuZE9mZnNldCA9IGluc3RydWN0aW9uc1tlbmRJZHggKyAxXS51Lm9wZXJhbmQgLSAx
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IG1f
c291cmNlT2Zmc2V0ICsgb3duZXJTY3JpcHRFeGVjdXRhYmxlKCktPnNvdXJjZSgpLmxlbmd0aCgp
IC0gMTsgLy8gT2Zmc2V0IGJlZm9yZSB0aGUgY2xvc2luZyBicmFjZS4KLSAgICAgICAgICAgIGJh
c2ljQmxvY2tTdGFydE9mZnNldCA9IHN0ZDo6bWluKGJhc2ljQmxvY2tTdGFydE9mZnNldCwgYmFz
aWNCbG9ja0VuZE9mZnNldCk7IC8vIFNvbWUgc3RhcnQgb2Zmc2V0cyBtYXkgYmUgYXQgdGhlIGNs
b3NpbmcgYnJhY2UsIGVuc3VyZSBpdCBpcyB0aGUgb2Zmc2V0IGJlZm9yZS4KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgYWxsb3dzIGZvciB0aGUgc2FtZSB0ZXh0
dWFsIEphdmFTY3JpcHQgYmFzaWMgYmxvY2sgdG8gaGF2ZSBpdHMgYnl0ZWNvZGUgZW1pdHRlZCBt
b3JlCi0gICAgICAgIC8vIHRoYW4gb25jZSBhbmQgc3RpbGwgcGxheSBuaWNlIHdpdGggdGhlIGNv
bnRyb2wgZmxvdyBwcm9maWxlci4gV2hlbiBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgaXMgbGFyZ2Vy
IHRoYW4gCi0gICAgICAgIC8vIGJhc2ljQmxvY2tFbmRPZmZzZXQsIGl0IGluZGljYXRlcyB0aGF0
IHRoZSBieXRlY29kZSBnZW5lcmF0b3IgaGFzIGVtaXR0ZWQgY29kZSBmb3IgdGhlIHNhbWUgQVNU
IG5vZGUgCi0gICAgICAgIC8vIG1vcmUgdGhhbiBvbmNlIChmb3IgZXhhbXBsZTogRm9ySW5Ob2Rl
LCBGaW5hbGx5IGJsb2NrcyBpbiBUcnlOb2RlLCBldGMpLiBUaG91Z2ggdGhlc2UgYXJlIGRpZmZl
cmVudCAKLSAgICAgICAgLy8gYmFzaWMgYmxvY2tzIGF0IHRoZSBieXRlY29kZSBsZXZlbCwgdGhl
eSBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgdGV4dHVhbCBiYXNpYyBibG9jayBpbiB0aGUg
SmF2YVNjcmlwdCAKLSAgICAgICAgLy8gcHJvZ3JhbS4gVGhlIGNvbmRpdGlvbjogCi0gICAgICAg
IC8vIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0KSAKLSAgICAg
ICAgLy8gaXMgZW5jb3VudGVyZWQgd2hlbiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyBsaWVzIGFj
cm9zcyB0aGUgYm91bmRhcnkgb2YgdGhlc2UgZHVwbGljYXRlZCBieXRlY29kZSBiYXNpYyAKLSAg
ICAgICAgLy8gYmxvY2tzIGFuZCB0aGUgdGV4dHVhbCBvZmZzZXQgZ29lcyBmcm9tIHRoZSBlbmQg
b2YgdGhlIGR1cGxpY2F0ZWQgYmxvY2sgYmFjayB0byB0aGUgYmVnaW5uaW5nLiBUaGVzZSAKLSAg
ICAgICAgLy8gcmFuZ2VzIGFyZSBkdW1teSByYW5nZXMgYW5kIGFyZSBpZ25vcmVkLiBUaGUgZHVw
bGljYXRlZCBieXRlY29kZSBiYXNpYyBibG9ja3MgcG9pbnQgdG8gdGhlIHNhbWUgCi0gICAgICAg
IC8vIGludGVybmFsIGRhdGEgc3RydWN0dXJlLCBzbyBpZiBhbnkgb2YgdGhlbSBleGVjdXRlLCBp
dCB3aWxsIHJlY29yZCB0aGUgc2FtZSB0ZXh0dWFsIGJhc2ljIGJsb2NrIGluIHRoZSAKLSAgICAg
ICAgLy8gSmF2YVNjcmlwdCBwcm9ncmFtIGFzIGV4ZWN1dGluZy4KLSAgICAgICAgLy8gQXQgdGhl
IGJ5dGVjb2RlIGxldmVsLCB0aGlzIHNpdHVhdGlvbiBsb29rcyBsaWtlOgotICAgICAgICAvLyBq
OiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyAoZnJvbSBqLT5rLCB3ZSBoYXZlIGJhc2ljQmxvY2tF
bmRPZmZzZXQgPCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQpCi0gICAgICAgIC8vIC4uLgotICAgICAg
ICAvLyBrOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdyAod2Ugd2FudCB0byBza2lwIG92ZXIgdGhl
IGotPmsgYmxvY2sgYW5kIHN0YXJ0IGZyZXNoIGF0IG9mZnNldCBrIGFzIHRoZSBzdGFydCBvZiBh
IG5ldyBiYXNpYyBibG9jayBrLT5tKS4KLSAgICAgICAgLy8gLi4uCi0gICAgICAgIC8vIG06IG9w
X3Byb2ZpbGVfY29udHJvbF9mbG93Ci0gICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwg
YmFzaWNCbG9ja1N0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsg
MSA8IG9mZnNldHNMZW5ndGgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJs
b2NrcyBhdCB0aGUgZW5kIG9mIGEgQ29kZUJsb2NrLgotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W3N0YXJ0SWR4ICsgMV0udS5iYXNpY0Jsb2NrTG9jYXRpb24gPSB2bSgpLT5jb250cm9sRmxvd1By
b2ZpbGVyKCktPmR1bW15QmFzaWNCbG9jaygpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9
IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja0xvY2F0aW9uKG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJh
c2ljQmxvY2tFbmRPZmZzZXQpOwotCi0gICAgICAgIC8vIEZpbmQgYWxsIGZ1bmN0aW9ucyB0aGF0
IGFyZSBlbmNsb3NlZCB3aXRoaW4gdGhlIHJhbmdlOiBbYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBi
YXNpY0Jsb2NrRW5kT2Zmc2V0XQotICAgICAgICAvLyBhbmQgaW5zZXJ0IHRoZXNlIGZ1bmN0aW9u
cycgc3RhcnQvZW5kIG9mZnNldHMgYXMgZ2FwcyBpbiB0aGUgY3VycmVudCBCYXNpY0Jsb2NrTG9j
YXRpb24uCi0gICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gdGhlIG9yaWdp
bmFsIHNvdXJjZSB0ZXh0IG9mIGEgSmF2YVNjcmlwdCBwcm9ncmFtLCAKLSAgICAgICAgLy8gZnVu
Y3Rpb24gbGl0ZXJhbHMgZm9ybSBuZXcgYmFzaWMgYmxvY2tzIGJvdW5kYXJpZXMsIGJ1dCB0aGV5
IGFyZW4ndCByZXByZXNlbnRlZCAKLSAgICAgICAgLy8gaW5zaWRlIHRoZSBDb2RlQmxvY2sncyBp
bnN0cnVjdGlvbiBzdHJlYW0uCi0gICAgICAgIGF1dG8gaW5zZXJ0RnVuY3Rpb25HYXBzID0gW2Jh
c2ljQmxvY2tMb2NhdGlvbiwgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0LCBiYXNpY0Jsb2NrRW5kT2Zm
c2V0XSAoY29uc3QgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkgewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwot
ICAgICAgICAgICAgaW50IGZ1bmN0aW9uU3RhcnQgPSBleGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoKTsKLSAgICAgICAgICAgIGludCBmdW5jdGlvbkVuZCA9IGV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKTsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvblN0YXJ0
ID49IGJhc2ljQmxvY2tTdGFydE9mZnNldCAmJiBmdW5jdGlvbkVuZCA8PSBiYXNpY0Jsb2NrRW5k
T2Zmc2V0KQotICAgICAgICAgICAgICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+aW5zZXJ0R2FwKGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uRW5kKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKGNv
bnN0IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVjdXRhYmxlIDogbV9mdW5j
dGlvbkRlY2xzKQotICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBzKGV4ZWN1dGFibGUpOwot
ICAgICAgICBmb3IgKGNvbnN0IFdyaXRlQmFycmllcjxGdW5jdGlvbkV4ZWN1dGFibGU+JiBleGVj
dXRhYmxlIDogbV9mdW5jdGlvbkV4cHJzKQotICAgICAgICAgICAgaW5zZXJ0RnVuY3Rpb25HYXBz
KGV4ZWN1dGFibGUpOwotCi0gICAgICAgIGluc3RydWN0aW9uc1tzdGFydElkeCArIDFdLnUuYmFz
aWNCbG9ja0xvY2F0aW9uID0gYmFzaWNCbG9ja0xvY2F0aW9uOwotICAgIH0KLX0KLQotI2lmIEVO
QUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAgIG1fcGNUb0NvZGVPcmln
aW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KLU9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9j
azo6ZmluZFBDKHZvaWQqIHBjKQotewotICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKSB7Ci0g
ICAgICAgIGlmIChPcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gbV9wY1RvQ29kZU9y
aWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwotICAg
IH0KLQotICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1f
c3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7Ci0gICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViID0gKml0ZXI7Ci0gICAgICAgIGlmIChzdHViLT5jb250YWluc1BDKHBjKSkK
LSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2RlT3JpZ2luPihzdHViLT5jb2RlT3JpZ2lu
KTsKLSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IG1f
aml0Q29kZS0+ZmluZFBDKHRoaXMsIHBjKSkKLSAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0K
LSAgICByZXR1cm4gTnVsbG9wdDsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi1PcHRpb25h
bDx1bnNpZ25lZD4gQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldEZyb21DYWxsU2l0ZUluZGV4KENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gYnl0
ZWNvZGVPZmZzZXQ7Ci0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlID0gdGhpcy0+aml0VHlw
ZSgpOwotICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsgfHwgaml0
VHlwZSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7Ci0jZWxzZQotICAgICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8SW5zdHJ1Y3Rpb24qPihj
YWxsU2l0ZUluZGV4LmJpdHMoKSk7Ci0gICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0gaW5zdHJ1Y3Rp
b24gLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmIChqaXRU
eXBlID09IEpJVENvZGU6OkRGR0pJVCB8fCBqaXRUeXBlID09IEpJVENvZGU6OkZUTEpJVCkgewot
I2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5HZXRDb2RlT3Jp
Z2luKGNhbGxTaXRlSW5kZXgpKTsKLSAgICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBjb2RlT3Jp
Z2luKGNhbGxTaXRlSW5kZXgpOwotICAgICAgICBieXRlY29kZU9mZnNldCA9IG9yaWdpbi5ieXRl
Y29kZUluZGV4OwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIHJldHVybiBieXRlY29kZU9mZnNldDsKLX0KLQotaW50MzJf
dCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBz
d2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIE1p
eGVkVHJpU3RhdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBGYWxzZVRy
aVN0YXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRydWVUcmlT
dGF0ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Ci0gICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0aHJlc2hvbGQ7Ci19Ci0KLXZvaWQgQ29kZUJsb2Nr
OjpqaXRBZnRlcldhcm1VcCgpCi17Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJt
VXAoKSksIHRoaXMpOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCi17Ci0gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9u
czo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpk
dW1wTWF0aElDU3RhdHMoKQotewotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGRvdWJs
ZSBudW1BZGRzID0gMC4wOwotICAgIGRvdWJsZSB0b3RhbEFkZFNpemUgPSAwLjA7Ci0gICAgZG91
YmxlIG51bU11bHMgPSAwLjA7Ci0gICAgZG91YmxlIHRvdGFsTXVsU2l6ZSA9IDAuMDsKLSAgICBk
b3VibGUgbnVtTmVncyA9IDAuMDsKLSAgICBkb3VibGUgdG90YWxOZWdTaXplID0gMC4wOwotICAg
IGRvdWJsZSBudW1TdWJzID0gMC4wOwotICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7Ci0K
LSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAg
ICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGNvZGVCbG9jay0+bV9hZGRJQ3MpIHsKLSAgICAgICAg
ICAgIG51bUFkZHMrKzsKLSAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNp
emUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogY29kZUJs
b2NrLT5tX211bElDcykgewotICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgdG90
YWxNdWxTaXplICs9IG11bElDLT5jb2RlU2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChKSVROZWdJQyogbmVnSUMgOiBjb2RlQmxvY2stPm1fbmVnSUNzKSB7Ci0gICAgICAgICAgICBu
dW1OZWdzKys7Ci0gICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVCbG9jay0+
bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAgIHRvdGFsU3Vi
U2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9OwotICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7Ci0K
LSAgICBkYXRhTG9nKCJOdW0gQWRkczogIiwgbnVtQWRkcywgIlxuIik7Ci0gICAgZGF0YUxvZygi
VG90YWwgQWRkIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsQWRkU2l6ZSwgIlxuIik7Ci0gICAgZGF0
YUxvZygiQXZlcmFnZSBBZGQgc2l6ZTogIiwgdG90YWxBZGRTaXplIC8gbnVtQWRkcywgIlxuIik7
Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJOdW0gTXVsczogIiwgbnVtTXVscywg
IlxuIik7Ci0gICAgZGF0YUxvZygiVG90YWwgTXVsIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsTXVs
U2l6ZSwgIlxuIik7Ci0gICAgZGF0YUxvZygiQXZlcmFnZSBNdWwgc2l6ZTogIiwgdG90YWxNdWxT
aXplIC8gbnVtTXVscywgIlxuIik7Ci0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJO
dW0gTmVnczogIiwgbnVtTmVncywgIlxuIik7Ci0gICAgZGF0YUxvZygiVG90YWwgTmVnIHNpemUg
aW4gYnl0ZXM6ICIsIHRvdGFsTmVnU2l6ZSwgIlxuIik7Ci0gICAgZGF0YUxvZygiQXZlcmFnZSBO
ZWcgc2l6ZTogIiwgdG90YWxOZWdTaXplIC8gbnVtTmVncywgIlxuIik7Ci0gICAgZGF0YUxvZygi
XG4iKTsKLSAgICBkYXRhTG9nKCJOdW0gU3ViczogIiwgbnVtU3VicywgIlxuIik7Ci0gICAgZGF0
YUxvZygiVG90YWwgU3ViIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsU3ViU2l6ZSwgIlxuIik7Ci0g
ICAgZGF0YUxvZygiQXZlcmFnZSBTdWIgc2l6ZTogIiwgdG90YWxTdWJTaXplIC8gbnVtU3Vicywg
IlxuIik7Ci0KLSAgICBkYXRhTG9nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0jZW5k
aWYKLX0KLQotQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5h
bHlzaXNTbG93KCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBhbmFseXNpcyA9IHN0ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
Pih0aGlzKTsKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgICAgIGlmICghbV9saXZlbmVzc0FuYWx5c2lzKQotICAgICAgICAgICAgbV9saXZl
bmVzc0FuYWx5c2lzID0gV1RGTW92ZShhbmFseXNpcyk7Ci0gICAgICAgIHJldHVybiAqbV9saXZl
bmVzc0FuYWx5c2lzOwotICAgIH0KLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XZWJBc3NlbWJseUNvZGVC
bG9jay5oCShyZXZpc2lvbiAyMDgyMjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaDoyMDgyMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJp
Y2hAdXdhdGVybG9vLmNhPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJCeVZhbEluZm8uaCIKKyNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCisjaW5jbHVk
ZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVP
ZmZzZXQuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkNvZGVUeXBlLmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAu
aCIKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4
ZWN1dGlvbkNvdW50ZXIuaCIKKyNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCisjaW5j
bHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJK
SVRNYXRoSUNGb3J3YXJkcy5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiTExJbnRDYWxs
TGlua0luZm8uaCIKKyNpbmNsdWRlICJMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgorI2lu
Y2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJK
ZXR0aXNvblJlYXNvbi5oIgorI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVk
ZSAiUHV0UHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5o
IgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKK2NsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CitjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKK2NsYXNzIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKK2VudW0gY2xhc3MgQWNjZXNz
VHlwZSA6IGludDhfdDsKKworc3RydWN0IEFyaXRoUHJvZmlsZTsKKwordHlwZWRlZiBIYXNoTWFw
PENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aD4gU3R1YkluZm9NYXA7CisKK2VudW0gUmVvcHRpbWl6YXRpb25Nb2RlIHsgRG9udENvdW50UmVv
cHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKKworY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBmcmllbmQgY2xh
c3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworICAgIGNsYXNzIFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsgCisg
ICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9Owor
CisgICAgY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIgeworICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKSBvdmVycmlkZTsKKyAgICB9OworCitwdWJsaWM6CisgICAgZW51bSBDb3B5UGFyc2Vk
QmxvY2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1v
cnRhbDsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJvdGVjdGVkOgorICAgIENvZGVCbG9jayhW
TSosIFN0cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Cisg
ICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1
Y3R1cmUqLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxP
YmplY3QqKTsKKyNlbmRpZgorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIENvcHlQYXJz
ZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
LCBKU1Njb3BlKik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9i
YWxPYmplY3QqKTsKKyNlbmRpZgorCisgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBt
X2dsb2JhbE9iamVjdDsKKworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxv
Y2soKTsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLmdldCgpOyB9CisKKyAgICBDU3RyaW5nIGluZmVycmVk
TmFtZSgpIGNvbnN0OworICAgIENvZGVCbG9ja0hhc2ggaGFzaCgpIGNvbnN0OworICAgIGJvb2wg
aGFzSGFzaCgpIGNvbnN0OworICAgIGJvb2wgaXNTYWZlVG9Db21wdXRlSGFzaCgpIGNvbnN0Owor
ICAgIENTdHJpbmcgaGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpIGNvbnN0OworICAgIENTdHJpbmcg
c291cmNlQ29kZUZvclRvb2xzKCkgY29uc3Q7IC8vIE5vdCBxdWl0ZSB0aGUgYWN0dWFsIHNvdXJj
ZSB3ZSBwYXJzZWQ7IHRoaXMgd2lsbCBkbyB0aGluZ3MgbGlrZSBwcmVmaXggdGhlIHNvdXJjZSBm
b3IgYSBmdW5jdGlvbiB3aXRoIGEgcmVpZmllZCBzaWduYXR1cmUuCisgICAgQ1N0cmluZyBzb3Vy
Y2VDb2RlT25PbmVMaW5lKCkgY29uc3Q7IC8vIEFzIHNvdXJjZUNvZGVGb3JUb29scygpLCBidXQg
cmVwbGFjZXMgYWxsIHdoaXRlc3BhY2UgcnVucyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgIHZv
aWQgZHVtcEFzc3VtaW5nSklUVHlwZShQcmludFN0cmVhbSYsIEpJVENvZGU6OkpJVFR5cGUpIGNv
bnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRl
cnM7IH0KKyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKTsKKworICAgIGlu
dCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQor
CisgICAgaW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1l
dGVyczsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQorCisg
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
ZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CisgICAgdm9pZCBzZXRBbHRlcm5hdGl2
ZShWTSYsIENvZGVCbG9jayopOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAg
VmVjdG9yPENvZGVCbG9jayosIDQ+IGNvZGVCbG9ja3M7CisgICAgICAgIGNvZGVCbG9ja3MuYXBw
ZW5kKHRoaXMpOworCisgICAgICAgIHdoaWxlICghY29kZUJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIENvZGVCbG9jayogY3VycmVudENvZGVCbG9jayA9IGNvZGVCbG9ja3MudGFrZUxh
c3QoKTsKKyAgICAgICAgICAgIGYoY3VycmVudENvZGVCbG9jayk7CisKKyAgICAgICAgICAgIGlm
IChDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSkKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2tzLmFwcGVuZChhbHRlcm5hdGl2ZSk7CisgICAg
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrID0gY3VycmVudENvZGVCbG9jay0+
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2tz
LmFwcGVuZChvc3JFbnRyeUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3QobV9pc0NvbnN0cnVjdG9y
KTsKKyAgICB9CisKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAg
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7
CisgICAgCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CisgICAgQ29kZUJsb2NrKiBiYXNl
bGluZVZlcnNpb24oKTsKKworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
KTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdl
YWtseShTbG90VmlzaXRvciYpOworICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0JlZW5DYWxs
ZWQoKTsKKworICAgIHZvaWQgZHVtcFNvdXJjZSgpOworICAgIHZvaWQgZHVtcFNvdXJjZShQcmlu
dFN0cmVhbSYpOworCisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoKTsKKyAgICB2b2lkIGR1bXBCeXRl
Y29kZShQcmludFN0cmVhbSYpOworICAgIHZvaWQgZHVtcEJ5dGVjb2RlKAorICAgICAgICBQcmlu
dFN0cmVhbSYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb25zdCBTdHViSW5m
b01hcCYgPSBTdHViSW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJ
bmZvTWFwKCkpOworICAgIHZvaWQgZHVtcEV4Y2VwdGlvbkhhbmRsZXJzKFByaW50U3RyZWFtJik7
CisgICAgdm9pZCBwcmludFN0cnVjdHVyZXMoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlv
biopOworICAgIHZvaWQgcHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBvcGVyYW5kKTsKKworICAgIHZvaWQgZHVtcE1h
dGhJQ1N0YXRzKCk7CisKKyAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTdHJpY3RNb2RlOyB9CisgICAgRUNNQU1vZGUgZWNtYU1vZGUoKSBjb25zdCB7IHJldHVybiBp
c1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlOyB9CisKKyAgICBpbmxp
bmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA9PSBtX3RoaXNSZWdpc3Rlci5vZmZzZXQoKSAmJiAhbV9pc1N0cmljdE1vZGUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KGluZGV4KS5pc0Nl
bGwoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChpbnQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gaW5kZXggPj0gbV9udW1WYXJzOworICAgIH0KKworICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIFJlcXVpcmVk
SGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisgICAgSGFuZGxlckluZm8q
IGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKKyAgICB2b2lkIHJlbW92ZUV4Y2VwdGlvbkhhbmRsZXJGb3JDYWxs
U2l0ZShDYWxsU2l0ZUluZGV4KTsKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRm9yQnl0ZWNvZGVP
ZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHVuc2lnbmVkIGNvbHVtbk51bWJl
ckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB2b2lkIGV4
cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBp
bnQmIGRpdm90LAorICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCwgdW5z
aWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworCisgICAgT3B0aW9uYWw8dW5z
aWduZWQ+IGJ5dGVjb2RlT2Zmc2V0RnJvbUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCk7CisK
KyAgICB2b2lkIGdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHVi
SW5mb01hcCYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFN0dWJJbmZvTWFwKFN0dWJJbmZvTWFwJiBy
ZXN1bHQpOworICAgIAorICAgIHZvaWQgZ2V0Q2FsbExpbmtJbmZvTWFwKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm9NYXAmIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDYWxs
TGlua0luZm9NYXAoQ2FsbExpbmtJbmZvTWFwJiByZXN1bHQpOworCisgICAgdm9pZCBnZXRCeVZh
bEluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIEJ5VmFsSW5mb01hcCYgcmVzdWx0
KTsKKyAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9NYXAmIHJlc3VsdCk7CisgICAg
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNj
ZXNzVHlwZSk7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSopOworICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEFyaXRo
UHJvZmlsZSopOworICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZv
QmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CisgICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9FbmQoKSB7IHJldHVybiBtX3N0dWJJbmZvcy5l
bmQoKTsgfQorICAgIAorICAgIC8vIE8obikgb3BlcmF0aW9uLiBVc2UgZ2V0U3R1YkluZm9NYXAo
KSB1bmxlc3MgeW91IHJlYWxseSBvbmx5IGludGVuZCB0byBnZXQgb25lCisgICAgLy8gc3R1YiBp
bmZvLgorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBmaW5kU3R1YkluZm8oQ29kZU9yaWdpbik7CisK
KyAgICBCeVZhbEluZm8qIGFkZEJ5VmFsSW5mbygpOworCisgICAgQ2FsbExpbmtJbmZvKiBhZGRD
YWxsTGlua0luZm8oKTsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJ
bmZvc0JlZ2luKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmJlZ2luKCk7IH0KKyAgICBCYWc8
Q2FsbExpbmtJbmZvPjo6aXRlcmF0b3IgY2FsbExpbmtJbmZvc0VuZCgpIHsgcmV0dXJuIG1fY2Fs
bExpbmtJbmZvcy5lbmQoKTsgfQorCisgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2Fs
bCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQorICAg
IC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50
IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CisgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlu
a0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgorICAgIENhbGxM
aW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KTsKKyAgICAKKyAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSB3YW50IHRvIHJlYXR0
ZW1wdCBjb21waWxpbmcgc29tZXRoaW5nIHdpdGggdGhlIGJhc2VsaW5lIEpJVC4gSWRlYWxseQor
ICAgIC8vIHRoZSBiYXNlbGluZSBKSVQgd291bGQgbm90IGFkZCBkYXRhIHRvIENvZGVCbG9jaywg
YnV0IGluc3RlYWQgaXQgd291bGQgcHV0IGl0cyBkYXRhIGludG8KKyAgICAvLyBhIG5ld2x5IGNy
ZWF0ZWQgSklUQ29kZSwgd2hpY2ggY291bGQgYmUgdGhyb3duIGF3YXkgaWYgd2UgYmFpbCBvbiBK
SVQgY29tcGlsYXRpb24uIFRoZW4gd2UKKyAgICAvLyB3b3VsZCBiZSBhYmxlIHRvIGdldCByaWQg
b2YgdGhpcyBzaWxseSBmdW5jdGlvbi4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTA2MQorICAgIHZvaWQgcmVzZXRKSVREYXRhKCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBj
YWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9y
cGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0
YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKKworICAgIHZvaWQgc2V0SklU
Q29kZU1hcChzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisg
ICAgeworICAgICAgICBtX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOworICAgIH0K
KyAgICBDb21wYWN0SklUQ29kZU1hcCogaml0Q29kZU1hcCgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9qaXRDb2RlTWFwLmdldCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjbGVh
ckxMSW50R2V0QnlJZENhY2hlKEluc3RydWN0aW9uKik7CisKKyAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldChJbnN0cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJldHVybkFkZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1
cm5BZGRyZXNzIDwgaW5zdHJ1Y3Rpb25zKCkuZW5kKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW5zdHJ1Y3Rpb24qPihyZXR1cm5BZGRyZXNzKSAtIGluc3RydWN0aW9ucygpLmJlZ2lu
KCk7CisgICAgfQorCisgICAgdHlwZWRlZiBKU0M6Okluc3RydWN0aW9uIEluc3RydWN0aW9uOwor
ICAgIHR5cGVkZWYgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVj
dGlvbnM7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsgfQorICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CisgICAgY29u
c3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KKworICAgIHNpemVfdCBwcmVkaWN0ZWRNYWNoaW5lQ29k
ZVNpemUoKTsKKworICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CisKKyAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgp
OyB9CisKKyAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSkKKyAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7CisgICAgCisgICAg
dm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChoZWFwKCktPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8g
VGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRv
IHNvbWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorICAgICAg
ICBtX2ppdENvZGUgPSBjb2RlOworICAgIH0KKyAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENv
ZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGppdENvZGVP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdENvZGUpOyB9
CisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEpJ
VENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7CisgICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOworICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIHJlc3VsdCA9IEpJVENvZGU6OmppdFR5
cGVGb3Ioaml0Q29kZSk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOyAvLyBUaGlzIHBy
b2JhYmx5IGlzbid0IG5lZWRlZC4gT2ggd2VsbCwgcGFyYW5vaWEgaXMgZ29vZC4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIGhhc0Jhc2VsaW5lSklUUHJvZmlsaW5n
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQ7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgQ29kZUJsb2NrKiBy
ZXBsYWNlbWVudCgpOworCisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxp
dHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOwor
ICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8REZHOjpDYXBhYmlsaXR5TGV2ZWw+KG1fY2FwYWJpbGl0eUxldmVsU3RhdGUp
OyB9CisKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUg
dHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0
aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCisjZW5kaWYKKworICAgIHZvaWQgamV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgPSBEb250Q291
bnRSZW9wdGltaXphdGlvbiwgY29uc3QgRmlyZURldGFpbCogPSBudWxscHRyKTsKKyAgICAKKyAg
ICBFeGVjdXRhYmxlQmFzZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25l
ckV4ZWN1dGFibGUuZ2V0KCk7IH0KKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lclNjcmlwdEV4
ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKTsgfQorCisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQorCisgICAgdm9pZCBzZXRUaGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdp
c3RlcikgeyBtX3RoaXNSZWdpc3RlciA9IHRoaXNSZWdpc3RlcjsgfQorICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3RoaXNSZWdpc3RlcjsgfQorCisg
ICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51c2VzRXZh
bCgpOyB9CisKKyAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkg
fHwgIXNjb3BlUmVnaXN0ZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgbV9zY29wZVJlZ2lzdGVyID0g
c2NvcGVSZWdpc3RlcjsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zY29wZVJlZ2lzdGVyOworICAgIH0K
KyAgICAKKyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5cGUpOworICAgIH0KKworICAgIFB1dFBy
b3BlcnR5U2xvdDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoY29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dEJ5SWRFdmFsOworICAgICAgICByZXR1cm4gUHV0UHJvcGVydHlTbG90OjpQ
dXRCeUlkOworICAgIH0KKworICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlT2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVDb2x1bW5PZmZzZXQ7IH0KKworICAg
IHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPm51bWJlck9mSnVtcFRhcmdldHMoKTsgfQorICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+anVtcFRhcmdldChpbmRleCk7
IH0KKworICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKKworICAg
IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX251bVBhcmFtZXRlcnMgPj0gMCk7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50
VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1l
dGVycykpOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwor
ICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgpCisgICAgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9ICZt
X2FyZ3VtZW50VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKKyAgICAgICAgQVNTRVJUKHJl
c3VsdC0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gbV92
YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKGlu
dCBpbmRleCkgeyByZXR1cm4gJm1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KKyAgICBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7
CisgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zm
c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgfQor
CisgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKTsKKyAgICB9CisgICAgVmFsdWVQcm9maWxlKiBnZXRGcm9tQWxsVmFsdWVQcm9m
aWxlcyh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9m
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoaW5kZXgpOworICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlKGluZGV4IC0g
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQorCisgICAgUmFyZUNhc2VQ
cm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB1bnNp
Z25lZCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSB7IHJldHVybiBtX3JhcmVDYXNlUHJvZmls
ZXMuc2l6ZSgpOyB9CisgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHVuc2lnbmVkIHJhcmVDYXNlUHJv
ZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgIGJv
b2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0
aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKTsKKyAgICB9CisKKyAgICBi
b29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IE9wdGlv
bnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCk7CisgICAgfQorCisgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQp
OworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKKwor
ICAgIGJvb2wgY291bGRUYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCk7CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5UHJvZmlsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgQXJyYXlQcm9maWxlVmVjdG9yJiBhcnJh
eVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzOyB9CisgICAgQXJyYXlQcm9maWxl
KiBhZGRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZSh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCk7CisgICAgQXJyYXlQcm9maWxlKiBnZXRBcnJheVByb2ZpbGUoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICBB
cnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIEFycmF5UHJvZmlsZSogZ2V0
T3JBZGRBcnJheVByb2ZpbGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworCisgICAgLy8gRXhj
ZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQKKworICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQorICAgIEhhbmRsZXJJbmZvJiBleGNlcHRpb25IYW5k
bGVyKGludCBpbmRleCkgeyBSRUxFQVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisKKyAgICBib29sIGhhc0V4cHJl
c3Npb25JbmZvKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0V4cHJlc3Npb25JbmZvKCk7
IH0KKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4mIGNvZGVPcmlnaW5zKCk7CisgICAgCisgICAgLy8gSGF2aW5nIGNv
ZGUgb3JpZ2lucyBpbXBsaWVzIHRoYXQgdGhlcmUgaGFzIGJlZW4gc29tZSBpbmxpbmluZy4KKyAg
ICBib29sIGhhc0NvZGVPcmlnaW5zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSgpKTsKKyAgICB9CisgICAgICAgIAorICAgIGJvb2wgY2Fu
R2V0Q29kZU9yaWdpbihDYWxsU2l0ZUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFo
YXNDb2RlT3JpZ2lucygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gaW5kZXguYml0cygpIDwgY29kZU9yaWdpbnMoKS5zaXplKCk7CisgICAgfQorCisgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKENhbGxTaXRlSW5kZXggaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCldOworICAgIH0KKworICAgIGJvb2wgYWRk
RnJlcXVlbnRFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCisgICAg
eworICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSgpKSk7Cisg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVy
biBtX2V4aXRQcm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOworICAgIH0KKworICAgIGJv
b2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOworICAgIH0KKyAgICBib29s
IGhhc0V4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOworICAgIH0KKworICAgIERGRzo6RXhp
dFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9leGl0UHJvZmlsZTsgfQorCisgICAg
Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBsYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVzOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworICAgIC8vIENvbnN0YW50
IFBvb2wKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCkg
KyBudW1iZXJPZkRGR0lkZW50aWZpZXJzKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZERkdJZGVu
dGlmaWVycygpIGNvbnN0OworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGlu
ZGV4KSBjb25zdDsKKyNlbHNlCisgICAgc2l6ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyB9CisgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGluZGV4KTsgfQorI2VuZGlmCisKKyAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzKCkgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyczsgfQorICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KEpTVmFsdWUgdikK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5r
bm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgdGhpcywgdik7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudExh
emlseSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJy
aWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAt
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisK
KyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBpbnQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQorICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4
cHJzW2luZGV4XS5nZXQoKTsgfQorICAgIAorICAgIFJlZ0V4cCogcmVnZXhwKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnJlZ2V4cChpbmRleCk7IH0KKworICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9y
YXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuc2l6ZSgpOworICAgIH0KKyAgICB1bnNpZ25lZCBh
ZGRDb25zdGFudEJ1ZmZlcihjb25zdCBWZWN0b3I8SlNWYWx1ZT4mIGJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzLnNpemUoKTsKKyAgICAgICAgbV9yYXJl
RGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBz
aXplOworICAgIH0KKworICAgIFZlY3RvcjxKU1ZhbHVlPiYgY29uc3RhbnRCdWZmZXJBc1ZlY3Rv
cih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzW2luZGV4XTsKKyAgICB9
CisgICAgSlNWYWx1ZSogY29uc3RhbnRCdWZmZXIodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gY29uc3RhbnRCdWZmZXJBc1ZlY3RvcihpbmRleCkuZGF0YSgpOworICAgIH0K
KworICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiAmbV92bS0+aGVhcDsgfQorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQo
KTsgfQorCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luKTsK
KworICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcygpCisgICAg
eworICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICAgICAgaWYgKCEhbV9saXZlbmVzc0FuYWx5c2lzKQorICAgICAgICAgICAg
ICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRl
KCk7CisKKyAgICAvLyBKdW1wIFRhYmxlcworCisgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRj
aEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNo
SnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJl
RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYg
c3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9
CisgICAgdm9pZCBjbGVhclN3aXRjaEp1bXBUYWJsZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3JhcmVEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAwOyB9CisgICAgU3RyaW5nSnVt
cFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChTdHJp
bmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMubGFzdCgpOyB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KKworICAgIEV2
YWxDb2RlQ2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQorCisgICAgZW51bSBTaHJp
bmtNb2RlIHsKKyAgICAgICAgLy8gU2hyaW5rIHByaW9yIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBj
b2RlIHRoYXQgbWF5IHBvaW50IGRpcmVjdGx5IGludG8gdmVjdG9ycy4KKyAgICAgICAgRWFybHlT
aHJpbmssCisKKyAgICAgICAgLy8gU2hyaW5rIGFmdGVyIGdlbmVyYXRpbmcgbWFjaGluZSBjb2Rl
LCBhbmQgYWZ0ZXIgcG9zc2libHkgY3JlYXRpbmcgbmV3IHZlY3RvcnMKKyAgICAgICAgLy8gYW5k
IGFwcGVuZGluZyB0byBvdGhlcnMuIEF0IHRoaXMgdGltZSBpdCBpcyBub3Qgc2FmZSB0byBzaHJp
bmsgY2VydGFpbiB2ZWN0b3JzCisgICAgICAgIC8vIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBnZW5l
cmF0ZWQgbWFjaGluZSBjb2RlIHRoYXQgcmVmZXJlbmNlcyB0aGVtIGRpcmVjdGx5LgorICAgICAg
ICBMYXRlU2hyaW5rCisgICAgfTsKKyAgICB2b2lkIHNocmlua1RvRml0KFNocmlua01vZGUpOwor
CisgICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIEpJVHRpbmcga2lja3MgaW4s
IGluIGEgbWl4ZWQgbW9kZQorICAgIC8vIGV4ZWN1dGlvbiB3b3JsZC4KKworICAgIGJvb2wgY2hl
Y2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCisgICAgeworICAgICAgICBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICB9CisKKyAgICBpbnQzMl90
IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisgICAgdm9pZCBqaXRBZnRlcldh
cm1VcCgpOworICAgIHZvaWQgaml0U29vbigpOworCisgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgfQorCisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cnVjdHVyZSosIEJhZzxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOworICAgIFN0cnVjdHVyZVdhdGNocG9pbnRN
YXAmIGxsaW50R2V0QnlJZFdhdGNocG9pbnRNYXAoKSB7IHJldHVybiBtX2xsaW50R2V0QnlJZFdh
dGNocG9pbnRNYXA7IH0KKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0
aWVyZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMKKyAgICAvLyBjb250cm9scyBib3RoIHdo
ZW4gdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKKyAgICAv
LyBlbnRyeSBoYXBwZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5k
IHRoZSByZXR1cm4KKyAgICAvLyB0cmlnZ2VyLiBJbiBlaXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRp
dGlvbiB0byBtX2ppdEV4ZWN1dGVDb3VudGVyCisgICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBu
b24tbmVnYXRpdmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzCisgICAgLy8gaW52b2tlZC4g
VGhpcyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcwor
ICAgIC8vIGFscmVhZHkgYmVlbiBvcHRpbWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5z
IGEgQ29kZUJsb2NrCisgICAgLy8gdGhhdCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdoZXIgdGll
ciBKSVQgdGhhbiB0aGlzIG9uZSkuIEluIHRoZQorICAgIC8vIGNhc2Ugb2YgdGhlIGxvb3AgdHJp
Z2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcworICAgIC8vIChvciBo
YXMgYWxyZWFkeSBzdWNjZWVkZWQgaW4gdGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0
bworICAgIC8vIHJlZGlyZWN0IHByb2dyYW0gZmxvdyBpbnRvIHRoZSBvcHRpbWl6ZWQgY29kZS4K
KworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRp
bWl6YXRpb24gdHJpZ2dlcnMsCisgICAgLy8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50
IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUgaGV1cmlzdGljcworICAgIC8vIGZvciBob3cgbXVjaCB3
YXJtLXVwIGlzIG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24KKyAgICAvLyB0
cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVy
V2FybVVwKCksCisgICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNv
bnN0cnVjdG9yLgorCisgICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9u
IGZhaWx1cmVzLCB3ZSB0cmlnZ2VyIGEKKyAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2gg
dGltZSwgd2UgaW5jcmVhc2UgdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgLy8gdG8gYXZv
aWQgdGhyYXNoaW5nLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCkgY29uc3Q7CisgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCk7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIFJlZ2lzdGVyU2V0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7IH0KKyAgICBz
dGF0aWMgc2l6ZV90IGxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsKKyAgICBzaXplX3QgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CisK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCk7CisKKyAgICBpbnQzMl90IGNvZGVU
eXBlVGhyZXNob2xkTXVsdGlwbGllcigpIGNvbnN0OworCisgICAgaW50MzJfdCBhZGp1c3RlZENv
dW50ZXJWYWx1ZShpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpOworCisgICAgaW50MzJfdCogYWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2ppdEV4
ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2ppdEV4ZWN1dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIsIG1fY291bnRlcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVzaG9sZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxDb3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV90b3RhbENvdW50KTsgfQorCisgICAgY29uc3QgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyJiBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KKworICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9CisK
KyAgICAvLyBDaGVjayBpZiB0aGUgb3B0aW1pemF0aW9uIHRocmVzaG9sZCBoYXMgYmVlbiByZWFj
aGVkLCBhbmQgaWYgbm90LAorICAgIC8vIGFkanVzdCB0aGUgaGV1cmlzdGljcyBhY2NvcmRpbmds
eS4gUmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlc2hvbGQgaGFzCisgICAgLy8gYmVlbiByZWFjaGVk
LgorICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKTsKKworICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBm
aXJlLiBUaGlzIGlzCisgICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmln
Z2VycyBhcmUgdHlwaWNhbGx5IG1vcmUKKyAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcg
YmFzZWxpbmUgY29kZS4KKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKTsKKworICAg
IC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fp
bi4gTm90ZSB0aGF0CisgICAgLy8gb3B0aW1pemF0aW9uIHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVy
IHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKKyAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFu
dCB0byBkZWxheSB0aGF0IGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMKKyAgICAvLyBpcyBjYWxs
ZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisg
ICAgLy8gdGhlIGZ1dHVyZSBhcyB3ZWxsLgorICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKKworICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8g
aXRzIHN0YXJ0aW5nIHN0YXRlLAorICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAvLyBmaXJlcy4gVGhpcyBp
cyBjYWxsZWQgaW4gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4gSXQgYWxzbworICAgIC8vIG1h
a2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBpZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4gTm90ZSB0aGF0
CisgICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28gdGhlIHZhbHVlIG9m
IHRoZSBleGVjdXRlCisgICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMg
YWxzbyBhdmFpbGFibGUgZGlyZWN0bHkuCisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8g
ZmlyZSBvbmx5IGFmdGVyCisgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICB2b2lkIG9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCk7CisKKyAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0
aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKKyAgICAvLyBub3QgbmVjZXNzYXJp
bHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgorICAgIC8v
IHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMg
YXJlCisgICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkg
YWZmZWN0cyBjYWxsCisgICAgLy8gZnJhbWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlz
IENvZGVCbG9jay4gVGhlIHZhbHVlIGhlcmUKKyAgICAvLyBpcyB0dW5lZCB0byBzdHJpa2UgYSBi
YWxhbmNlIGJldHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVudHJ5CisgICAgLy8gKHdoaWNoIGlzIHRv
byBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdlIHRvCisgICAgLy8g
dHJpZ2dlciBPU1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxp
bmUKKyAgICAvLyBjb2RlICh3aGljaCBpcyBoaWdoIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lY2Vz
c2FyaWx5IHdhbnQgdG8KKyAgICAvLyBoYXZlIGEgZnVsbCB3YXJtLXVwKS4gVGhlIGludHVpdGlv
biBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKKyAgICAvLyBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCkgaXMgZm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMKKyAgICAvLyB3aXRo
IGxvb3BzLiBDb25zaWRlciB0aGF0IHRoZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUK
KyAgICAvLyByZWN1cnNpdmUgZnVuY3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUg
b2YgTi4gVGhlIHRvcAorICAgIC8vIG9uZSB0cmlnZ2VycyBvcHRpbWl6YXRpb24sIGFuZCB0aGVu
IHJldHVybnMsIGFuZCB0aGVuIGFsbCBvZgorICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBk
b24ndCB3YW50IG9wdGltaXphdGlvbiB0byBiZSB0cmlnZ2VyZWQgb24KKyAgICAvLyBlYWNoIHJl
dHVybiwgYXMgdGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQor
ICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9uIGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMg
YmVjb21lcyBob3QKKyAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KKyAgICB2b2lkIG9wdGlt
aXplU29vbigpOworCisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVu
dGx5KCk7CisKKyAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdChDb21waWxhdGlvblJlc3VsdCk7CisgICAgCisgICAgdWludDMyX3Qgb3NyRXhp
dENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29zckV4aXRDb3VudGVyOyB9CisKKyAgICB2b2lk
IGNvdW50T1NSRXhpdCgpIHsgbV9vc3JFeGl0Q291bnRlcisrOyB9CisKKyAgICB1aW50MzJfdCog
YWRkcmVzc09mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiAmbV9vc3JFeGl0Q291bnRlcjsgfQor
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9TUkV4aXRDb3VudGVyKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9vc3JFeGl0Q291bnRlcik7IH0KKworICAgIHVp
bnQzMl90IGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hv
bGQpOworICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7
CisgICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9v
cCgpOworICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpOworICAgIGJvb2wgc2hvdWxkUmVv
cHRpbWl6ZUZyb21Mb29wTm93KCk7CisKKyAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQpOworICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhzdGQ6OnVuaXF1
ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KTsKKyAgICAKKyAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJl
Z2lzdGVycy5nZXQoKTsgfQorI2Vsc2UgLy8gTm8gSklUCisgICAgc3RhdGljIHVuc2lnbmVkIG51
bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9Cisg
ICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCkgeyByZXR1cm4gMDsgfTsKKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSB7
IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkRGR0NvbXBpbGVzKCkgeyByZXR1cm4gMDsgfQorI2Vu
ZGlmCisKKyAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgdm9pZCB1cGRhdGVBbGxW
YWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOworICAgIHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0
aW9ucygpOworICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKworICAgIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudCgpOworICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQoKTsKKwor
ICAgIGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWdu
ZWQgY29sdW1uKTsKKworICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorCisgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCisgICAgeworICAgICAgICBBU1NFUlQobV9udW1C
cmVha3BvaW50cyA+PSBudW1CcmVha3BvaW50cyk7CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMg
LT0gbnVtQnJlYWtwb2ludHM7CisgICAgfQorCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAg
ICAgICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAor
ICAgIH07CisgICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKKworICAgIHZv
aWQgY2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCkKKyAgICB7CisgICAgICAgIG1fc3RlcHBpbmdNb2Rl
ID0gU3RlcHBpbmdNb2RlRGlzYWJsZWQ7CisgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgPSAwOwor
ICAgIH0KKworICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVz
KCk7IH0KKyAgICAKKyAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBw
cml2YXRlLgorCisgICAgaW50IG1fbnVtQ2FsbGVlTG9jYWxzOworICAgIGludCBtX251bVZhcnM7
CisgICAgCisgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVz
cG9uc2liaWxpdHkgb2YgYW55b25lIGRvaW5nIGFueQorICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcg
dG8gaG9sZCB0aGUgbG9jazoKKyAgICAvLworICAgIC8vIC0gTW9kaWZ5aW5nIGFueSBpbmxpbmUg
Y2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLgorICAgIC8vCisgICAgLy8gLSBRdWVyaW5nIGFueSBp
bmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4K
KyAgICAvLyAgIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLworICAgIC8vIEFkZGl0aW9uYWxseSwg
aXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hlIG9uIHRoZSBtYWluCisg
ICAgLy8gdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBxdWVyeSB0
aGUgaW5saW5lIGNhY2hlIHdpdGhvdXQKKyAgICAvLyBsb2NraW5nLiBUaGlzIGlzIGNydWNpYWwg
c2luY2UgZXhlY3V0aW5nIHRoZSBpbmxpbmUgY2FjaGUgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyAi
cXVlcnlpbmciIGl0LgorICAgIC8vCisgICAgLy8gQW5vdGhlciBleGNlcHRpb24gdG8gdGhlIHJ1
bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cworICAgIC8vIHdpdGhv
dXQgaG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2Fp
dCB1bnRpbCBhbnkKKyAgICAvLyBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZHMgZmluaXNo
IHdoYXQgdGhleSdyZSBkb2luZy4KKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9j
azsKKworICAgIEF0b21pYzxib29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKKworICAg
IGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2Ug
dGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKworI2lmIEVOQUJMRShKSVQpCisgICAgdW5z
aWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVs
CisjZW5kaWYKKworICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkIDogMTsg
Ly8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCisKKyAgICBib29sIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uIDogMTsKKyAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDog
MTsKKyAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7CisgICAgYm9vbCBtX2lz
Q29uc3RydWN0b3IgOiAxOworICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOworICAgIHVuc2ln
bmVkIG1fY29kZVR5cGUgOiAyOyAvLyBDb2RlVHlwZQorCisgICAgLy8gSW50ZXJuYWwgbWV0aG9k
cyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3
YXNuJ3QKKyAgICAvLyBmb3IgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgaXQgZnJvbSBhbm9ueW1vdXMg
bmFtZXNwYWNlcy4KKyAgICB2b2lkIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKworICAgIHN0
cnVjdCBSYXJlRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1
YmxpYzoKKyAgICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOwor
CisgICAgICAgIC8vIEJ1ZmZlcnMgdXNlZCBmb3IgbGFyZ2UgYXJyYXkgbGl0ZXJhbHMKKyAgICAg
ICAgVmVjdG9yPFZlY3RvcjxKU1ZhbHVlPj4gbV9jb25zdGFudEJ1ZmZlcnM7CisKKyAgICAgICAg
Ly8gSnVtcCBUYWJsZXMKKyAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOworICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXM7CisKKyAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7Cisg
ICAgfTsKKworICAgIHZvaWQgY2xlYXJFeGNlcHRpb25IYW5kbGVycygpCisgICAgeworICAgICAg
ICBpZiAobV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIo
Y29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCisgICAgeworICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7IC8vIFdlIG1heSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFu
IGlubGluZWQgY2FsbCBmcmFtZS4KKyAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycy5hcHBlbmQoaGFuZGxlcik7CisgICAgfQorCisgICAgQ2FsbFNpdGVJbmRleCBuZXdFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRl
KTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOworICAgIE9wdGlvbmFsPENvZGVPcmln
aW4+IGZpbmRQQyh2b2lkKiBwYyk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmlu
YWxpemVMTEludElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElu
bGluZUNhY2hlcygpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgdm9pZCB0YWxseUZyZXF1
ZW50RXhpdFNpdGVzKCk7CisjZWxzZQorICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygp
IHsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsK
KworICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
KyAgICAKKyAgICBDb2RlQmxvY2sqIHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCk7CisgICAg
CisgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSk7Cisg
ICAgCisgICAgZG91YmxlIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKKwor
ICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzKTsKKworICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bik7CisKKyAgICB2b2lkIHJlcGxhY2VDb25zdGFudChpbnQgaW5kZXgsIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBBU1NFUlQoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpICYm
IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkg
PCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3Rl
cnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCisg
ICAgICAgIFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2lu
LCBjb25zdCBJbnN0cnVjdGlvbiomLAorICAgICAgICBjb25zdCBTdHViSW5mb01hcCYgPSBTdHVi
SW5mb01hcCgpLCBjb25zdCBDYWxsTGlua0luZm9NYXAmID0gQ2FsbExpbmtJbmZvTWFwKCkpOwor
CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0OworICAgIENTdHJpbmcgY29u
c3RhbnROYW1lKGludCBpbmRleCkgY29uc3Q7CisgICAgdm9pZCBwcmludFVuYXJ5T3AoUHJpbnRT
dHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNv
bnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50QmluYXJ5T3AoUHJpbnRTdHJlYW0mLCBFeGVj
U3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9w
KTsKKyAgICB2b2lkIHByaW50Q29uZGl0aW9uYWxKdW1wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRl
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBJbnN0cnVjdGlvbiomLCBpbnQgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50R2V0QnlJZE9wKFByaW50U3RyZWFtJiwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomKTsKKyAgICB2b2lk
IHByaW50R2V0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxv
Y2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOworICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1
bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07CisgICAgdm9pZCBwcmludENhbGxPcChQcmludFN0
cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29u
c3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcsIGNv
bnN0IENhbGxMaW5rSW5mb01hcCYpOworICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJl
YW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0
IGNoYXIqIG9wKTsKKyAgICB2b2lkIHByaW50UHV0QnlJZENhY2hlU3RhdHVzKFByaW50U3RyZWFt
JiwgaW50IGxvY2F0aW9uLCBjb25zdCBTdHViSW5mb01hcCYpOworICAgIHZvaWQgcHJpbnRMb2Nh
dGlvbkFuZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJ
bnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CisgICAgdm9pZCBwcmludExvY2F0aW9uT3BB
bmRSZWdpc3Rlck9wZXJhbmQoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBpbnQgb3BlcmFuZCk7CisK
KyAgICB2b2lkIGJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50
ZWRQcm9maWxpbmcpOworICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CisgICAgdm9p
ZCBkdW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBi
b29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUo
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBo
YXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICB2b2lkIGR1bXBBcml0aFByb2ZpbGUoUHJpbnRTdHJl
YW0mLCBBcml0aFByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKKworICAgIGJv
b2wgc2hvdWxkVmlzaXRTdHJvbmdseSgpOworICAgIGJvb2wgc2hvdWxkSmV0dGlzb25EdWVUb1dl
YWtSZWZlcmVuY2UoKTsKKyAgICBib29sIHNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKTsKKyAg
ICAKKyAgICB2b2lkIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBkZXRlcm1pbmVMaXZlbmVzcyhTbG90VmlzaXRvciYpOworICAgICAgICAKKyAgICB2b2lkIHN0
cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBzdHJv
bmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0T1NS
RXhpdFRhcmdldHMoU2xvdFZpc2l0b3ImKTsKKworICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgdGltZVNpbmNlQ3JlYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25v
OjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAorICAgICAgICAgICAg
c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2NyZWF0aW9uVGltZSk7CisgICAg
fQorCisgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB7CisgICAgICAg
IGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJhcmVEYXRhPigpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0QmFzaWNCbG9ja0JvdW5k
YXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKFJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4m
KTsKKworICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7
CisgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVk
IG1fZGVidWdnZXJSZXF1ZXN0czsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgbV9z
dGVwcGluZ01vZGUgOiAxOworICAgICAgICAgICAgdW5zaWduZWQgbV9udW1CcmVha3BvaW50cyA6
IDMwOworICAgICAgICB9OworICAgIH07CisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNl
PiBtX293bmVyRXhlY3V0YWJsZTsKKyAgICBWTSogbV92bTsKKworICAgIFJlZkNvdW50ZWRBcnJh
eTxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhp
c1JlZ2lzdGVyOworICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CisgICAgbXV0
YWJsZSBDb2RlQmxvY2tIYXNoIG1faGFzaDsKKworICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4g
bV9zb3VyY2U7CisgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9m
aXJzdExpbmVDb2x1bW5PZmZzZXQ7CisKKyAgICBSZWZDb3VudGVkQXJyYXk8TExJbnRDYWxsTGlu
a0luZm8+IG1fbGxpbnRDYWxsTGlua0luZm9zOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTElu
dENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBt
X2luY29taW5nTExJbnRDYWxsczsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRH
ZXRCeUlkV2F0Y2hwb2ludE1hcDsKKyAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOworI2lm
IEVOQUJMRShKSVQpCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBt
X2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJ
bmZvczsKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9t
dWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1f
c3ViSUNzOworICAgIEJhZzxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5r
SW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxz
OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3Jp
Z2luTWFwOworI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBhY3RKSVRDb2RlTWFwPiBt
X2ppdENvZGVNYXA7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gVGhpcyBpcyByZWxldmFu
dCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUg
YmxvY2sKKyAgICAvLyBmb3IgREZHIGNvZGUgYmxvY2tzLgorICAgIERGRzo6RXhpdFByb2ZpbGUg
bV9leGl0UHJvZmlsZTsKKyAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xk
ZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7CisjZW5kaWYKKyAgICBSZWZDb3VudGVkQXJy
YXk8VmFsdWVQcm9maWxlPiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAgICBSZWZDb3VudGVk
QXJyYXk8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CisgICAgU2VnbWVudGVkVmVjdG9y
PFJhcmVDYXNlUHJvZmlsZSwgOD4gbV9yYXJlQ2FzZVByb2ZpbGVzOworICAgIFJlZkNvdW50ZWRB
cnJheTxBcnJheUFsbG9jYXRpb25Qcm9maWxlPiBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzOwor
ICAgIEFycmF5UHJvZmlsZVZlY3RvciBtX2FycmF5UHJvZmlsZXM7CisgICAgUmVmQ291bnRlZEFy
cmF5PE9iamVjdEFsbG9jYXRpb25Qcm9maWxlPiBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlczsK
KworICAgIC8vIENvbnN0YW50IFBvb2wKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVnaXN0
ZXIpID09IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBSZWdpc3Rlcl9tdXN0X2JlX3Nh
bWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXJfVW5rbm93bik7CisgICAgLy8gVE9ETzogVGhpcyBjb3Vs
ZCBqdXN0IGJlIGEgcG9pbnRlciB0byBtX3VubGlua2VkQ29kZUJsb2NrJ3MgZGF0YSwgYnV0IHRo
ZSBERkcgbXV0YXRlcworICAgIC8vIGl0LCBzbyB3ZSdyZSBzdHVjayB3aXRoIGl0IGZvciBub3cu
CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsK
KyAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPEZ1bmN0
aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKKworICAgIFdy
aXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgCisgICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKworICAgIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOworICAgIHVpbnQzMl90IG1fb3NyRXhp
dENvdW50ZXI7CisgICAgdWludDE2X3QgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7CisgICAg
dWludDE2X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKworICAgIHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVhdGlvblRpbWU7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzQW5hbHlzaXM7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CisKKyAgICBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKKyAgICBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKK307CisKKy8vIFByb2dyYW0g
Y29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFs
IG9iamVjdAorLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCisKK2NsYXNzIEdsb2JhbENv
ZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7
CisgICAgREVDTEFSRV9JTkZPOworCitwcm90ZWN0ZWQ6CisgICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBh
cnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgR2xvYmFsQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENv
ZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2Nr
LCBzY29wZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGlj
IEdsb2JhbENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sg
QmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgUHJvZ3JhbUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhl
cikKKyAgICB7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAg
ICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOworICAgIH0KKworICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZt
LCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCkKKyAgICB7CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQor
ICAgICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPnByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBz
b3VyY2VQcm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKKyAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9ncmFt
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZt
LCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAg
IFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvZ3JhbUV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
CisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5l
Q29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworfTsKKworY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9i
YWxDb2RlQmxvY2sgeworcHVibGljOgorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayYgb3RoZXIpCisgICAgeworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZt
LT5oZWFwKSkKKyAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1
bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpCisgICAgeworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFw
KSkKKyAgICAgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5tb2R1bGVQcm9n
cmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0K
KworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQor
ICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ss
IG90aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKK307
CisKK2NsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsK
KworICAgIHN0YXRpYyBFdmFsQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRXZhbENvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2
bS0+aGVhcCkpCisgICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9j
a1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNy
ZWF0ZShWTSogdm0sIEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRXZh
bENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgICAg
IEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZh
bENvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0t
PmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyJiB2YXJp
YWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPnZh
cmlhYmxlKGluZGV4KTsgfQorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIHVu
bGlua2VkRXZhbENvZGVCbG9jaygpLT5udW1WYXJpYWJsZXMoKTsgfQorICAgIAorcHJpdmF0ZToK
KyAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJz
ZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0K
KyAgICAgICAgCisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3Bl
LCBzb3VyY2VQcm92aWRlciwgMCwgMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5saW5r
ZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KK307CisKK2NsYXNzIEZ1
bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRnVuY3Rp
b25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25D
b2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5o
ZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2Rl
QmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVC
bG9jayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBz
Y29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2
bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBGdW5jdGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAorICAgICAgICBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1
Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworfTsKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENv
ZGVCbG9jayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNM
QVJFX0lORk87CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSog
dm0sIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAg
IHsKKyAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAg
ICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCB2bS0+d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0
dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayog
Y3JlYXRlKFZNKiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBXZWJBc3NlbWJseUNv
ZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2so
dm0sIHZtLT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRh
YmxlLCBnbG9iYWxPYmplY3QpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZt
LCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90
aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ss
IG90aGVyKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Cit9OworI2VuZGlmCisKK2lu
bGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKK3sKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkpOworICAg
IHJldHVybiB0aGlzW2luZGV4XTsKK30KKworaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIo
VmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOworfQor
CitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Cisg
ICAgcmV0dXJuIHRoaXNbaW5kZXhdOworfQorCitpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6
dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJldHVybiB1bmNoZWNrZWRS
KHJlZy5vZmZzZXQoKSk7Cit9CisKK2lubGluZSB2b2lkIENvZGVCbG9jazo6Y2xlYXJWaXNpdFdl
YWtseUhhc0JlZW5DYWxsZWQoKQoreworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0
b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmZvckVhY2hDb2Rl
QmxvY2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBj
YXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZTogeworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pih0aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6
IHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9jay5nZXQo
KSkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZTogeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihleGVjdXRh
YmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5m
b3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJs
b2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCkpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENv
ZGVCbG9jayhmKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyktPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCisgICAgICAgICAgICBjb2Rl
QmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgRXhlY3V0YWJsZVR5cGU+CitKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZv
ckV4ZWN1dGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBDb2RlQmxvY2sqJiByZXN1bHRDb2RlQmxvY2sp
Cit7CisgICAgaWYgKGhhc0pJVENvZGVGb3Ioa2luZCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNf
c2FtZTxFeGVjdXRhYmxlVHlwZSwgRXZhbEV4ZWN1dGFibGU+Ojp2YWx1ZSkKKyAgICAgICAgICAg
IHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPih0aGlzKS0+Y29kZUJsb2NrKCkpOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8
RXhlY3V0YWJsZVR5cGUsIFByb2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCisgICAgICAgICAgICBy
ZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1l
PEV4ZWN1dGFibGVUeXBlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZT46OnZhbHVlKQorICAgICAg
ICAgICAgcmVzdWx0Q29kZUJsb2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2soKSk7CisgICAgICAgIGVsc2UgaWYg
KHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlwZSwgRnVuY3Rpb25FeGVjdXRhYmxlPjo6dmFsdWUp
CisgICAgICAgICAgICByZXN1bHRDb2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25J
bXBsKHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsIHJlc3VsdENvZGVCbG9jayk7Cit9CisKKyNk
ZWZpbmUgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssIHN1bW1hcnksIGRldGFpbHMpIFwK
KyAgICAoY29kZUJsb2NrLT52bSgpLT5sb2dFdmVudChjb2RlQmxvY2ssIHN1bW1hcnksIFsmXSAo
KSB7IHJldHVybiB0b0NTdHJpbmcgZGV0YWlsczsgfSkpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODIyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9XZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MjIwICsyOSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5o
IgotI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMu
aCIKLSNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKLSNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldC5oIgotI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKLSNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiQ29kZVR5cGUuaCIKLSNpbmNsdWRlICJDb21wYWN0
SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCi0jaW5jbHVkZSAi
REZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKLSNpbmNsdWRlICJEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgiCi0j
aW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgotI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUlu
Zm8uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJIYW5kbGVy
SW5mby5oIgotI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiSklUQ29kZS5oIgot
I2luY2x1ZGUgIkpJVE1hdGhJQ0ZvcndhcmRzLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNsdWRl
ICJMTEludENhbGxMaW5rSW5mby5oIgotI2luY2x1ZGUgIkxMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmgiCi0jaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRl
ICJQcm9maWxlckpldHRpc29uUmVhc29uLmgiCi0jaW5jbHVkZSAiUHJvZ3JhbUV4ZWN1dGFibGUu
aCIKLSNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKLSNpbmNsdWRlICJVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmgiCi0jaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCi0jaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzOwotY2xhc3MgQ29kZUJsb2NrU2V0OwotY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgSlNN
b2R1bGVFbnZpcm9ubWVudDsKLWNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLWNsYXNzIFBD
VG9Db2RlT3JpZ2luTWFwOwotY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7Ci1jbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbzsKLQotZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwotCi1zdHJ1
Y3QgQXJpdGhQcm9maWxlOwotCi10eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJl
U3R1YkluZm8qLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKLQotZW51
bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9w
dGltaXphdGlvbiB9OwotCi1jbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKLSAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM7Ci0gICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwotCi0gICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1Ymxp
YyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKLSAgICAgICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwotICAgIH07Ci0KLSAgICBjbGFzcyBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyIDogcHVibGljIEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7Ci0gICAg
ICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotICAg
IH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENvcHlQYXJzZWRCbG9ja1RhZyB7IENvcHlQYXJzZWRC
bG9jayB9OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotCi0gICAgREVDTEFSRV9J
TkZPOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgQ29weVBh
cnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKLSAgICBDb2RlQmxvY2soVk0qLCBTdHJ1
Y3R1cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7Ci0jaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQotICAgIENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOwotI2VuZGlmCi0KLSAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2sm
IG90aGVyKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqKTsKLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOwotI2VuZGlmCi0K
LSAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwotCi1wdWJs
aWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvZGVCbG9jaygpOwotCi0gICAgVW5saW5rZWRD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUuZ2V0KCk7IH0KLQotICAgIENTdHJpbmcgaW5mZXJyZWROYW1lKCkgY29uc3Q7Ci0gICAgQ29k
ZUJsb2NrSGFzaCBoYXNoKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNIYXNoKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1NhZmVUb0NvbXB1dGVIYXNoKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBoYXNoQXNTdHJp
bmdJZlBvc3NpYmxlKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBzb3VyY2VDb2RlRm9yVG9vbHMoKSBj
b25zdDsgLy8gTm90IHF1aXRlIHRoZSBhY3R1YWwgc291cmNlIHdlIHBhcnNlZDsgdGhpcyB3aWxs
IGRvIHRoaW5ncyBsaWtlIHByZWZpeCB0aGUgc291cmNlIGZvciBhIGZ1bmN0aW9uIHdpdGggYSBy
ZWlmaWVkIHNpZ25hdHVyZS4KLSAgICBDU3RyaW5nIHNvdXJjZUNvZGVPbk9uZUxpbmUoKSBjb25z
dDsgLy8gQXMgc291cmNlQ29kZUZvclRvb2xzKCksIGJ1dCByZXBsYWNlcyBhbGwgd2hpdGVzcGFj
ZSBydW5zIHdpdGggYSBzaW5nbGUgc3BhY2UuCi0gICAgdm9pZCBkdW1wQXNzdW1pbmdKSVRUeXBl
KFByaW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBpbnQgbnVtUGFyYW1l
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQotICAgIHZvaWQgc2V0TnVt
UGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpOwotCi0gICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9Ci0KLSAgICBpbnQqIGFkZHJlc3NPZk51
bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9Ci0gICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9Ci0KLSAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2
ZS5nZXQoKSk7IH0KLSAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUmVsYXRlZENvZGVC
bG9jayhGdW5jdG9yJiYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIEZ1bmN0b3IgZihzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKiwgND4g
Y29kZUJsb2NrczsKLSAgICAgICAgY29kZUJsb2Nrcy5hcHBlbmQodGhpcyk7Ci0KLSAgICAgICAg
d2hpbGUgKCFjb2RlQmxvY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBj
dXJyZW50Q29kZUJsb2NrID0gY29kZUJsb2Nrcy50YWtlTGFzdCgpOwotICAgICAgICAgICAgZihj
dXJyZW50Q29kZUJsb2NrKTsKLQotICAgICAgICAgICAgaWYgKENvZGVCbG9jayogYWx0ZXJuYXRp
dmUgPSBjdXJyZW50Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQotICAgICAgICAgICAgICAgIGNv
ZGVCbG9ja3MuYXBwZW5kKGFsdGVybmF0aXZlKTsKLSAgICAgICAgICAgIGlmIChDb2RlQmxvY2sq
IG9zckVudHJ5QmxvY2sgPSBjdXJyZW50Q29kZUJsb2NrLT5zcGVjaWFsT1NSRW50cnlCbG9ja09y
TnVsbCgpKQotICAgICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKG9zckVudHJ5QmxvY2sp
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3Bl
Y2lhbGl6YXRpb25LaW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzcGVjaWFsaXph
dGlvbkZyb21Jc0NvbnN0cnVjdChtX2lzQ29uc3RydWN0b3IpOwotICAgIH0KLQotICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmVGb3JKZXR0aXNvbigpOyAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKLSAgICAKLSAgICAvLyBGSVhNRTog
R2V0IHJpZCBvZiB0aGlzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjM2NzcKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpOwotCi0gICAg
c3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0V2Vha2x5KFNsb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgpOwotCi0gICAgdm9pZCBkdW1w
U291cmNlKCk7Ci0gICAgdm9pZCBkdW1wU291cmNlKFByaW50U3RyZWFtJik7Ci0KLSAgICB2b2lk
IGR1bXBCeXRlY29kZSgpOwotICAgIHZvaWQgZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJik7Ci0g
ICAgdm9pZCBkdW1wQnl0ZWNvZGUoCi0gICAgICAgIFByaW50U3RyZWFtJiwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsCi0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCks
IGNvbnN0IENhbGxMaW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7Ci0gICAgdm9pZCBk
dW1wRXhjZXB0aW9uSGFuZGxlcnMoUHJpbnRTdHJlYW0mKTsKLSAgICB2b2lkIHByaW50U3RydWN0
dXJlcyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgdm9pZCBwcmludFN0
cnVjdHVyZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEluc3RydWN0aW9u
KiwgaW50IG9wZXJhbmQpOwotCi0gICAgdm9pZCBkdW1wTWF0aElDU3RhdHMoKTsKLQotICAgIGJv
b2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0cmljdE1vZGU7IH0KLSAgICBF
Q01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzU3RyaWN0TW9kZSgpID8gU3RyaWN0
TW9kZSA6IE5vdFN0cmljdE1vZGU7IH0KLQotICAgIGlubGluZSBib29sIGlzS25vd25Ob3RJbW1l
ZGlhdGUoaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID09IG1fdGhpc1JlZ2lz
dGVyLm9mZnNldCgpICYmICFtX2lzU3RyaWN0TW9kZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdp
c3RlckluZGV4KGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleCA+PSBtX251
bVZhcnM7Ci0gICAgfQotCi0gICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5k
bGVyOjpBbnlIYW5kbGVyKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2ln
bmVkLCBSZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwotICAg
IHZvaWQgcmVtb3ZlRXhjZXB0aW9uSGFuZGxlckZvckNhbGxTaXRlKENhbGxTaXRlSW5kZXgpOwot
ICAgIHVuc2lnbmVkIGxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCi0gICAgICAgIGlu
dCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbikgY29uc3Q7Ci0KLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gYnl0ZWNvZGVPZmZzZXRG
cm9tQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4KTsKLQotICAgIHZvaWQgZ2V0U3R1YkluZm9N
YXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFwJiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCk7Ci0gICAgCi0gICAgdm9p
ZCBnZXRDYWxsTGlua0luZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5r
SW5mb01hcCYgcmVzdWx0KTsKLSAgICB2b2lkIGdldENhbGxMaW5rSW5mb01hcChDYWxsTGlua0lu
Zm9NYXAmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgQnlWYWxJbmZvTWFwJiByZXN1bHQpOwotICAgIHZvaWQgZ2V0QnlWYWxJ
bmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKLSAgICAKLSNpZiBFTkFCTEUoSklUKQotICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKLSAgICBKSVRBZGRJ
QyogYWRkSklUQWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElD
KEFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUq
KTsKLSAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1
YkluZm9zLmJlZ2luKCk7IH0KLSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBz
dHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9Ci0gICAgCi0gICAgLy8g
TyhuKSBvcGVyYXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9u
bHkgaW50ZW5kIHRvIGdldCBvbmUKLSAgICAvLyBzdHViIGluZm8uCi0gICAgU3RydWN0dXJlU3R1
YkluZm8qIGZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKLQotICAgIEJ5VmFsSW5mbyogYWRkQnlW
YWxJbmZvKCk7Ci0KLSAgICBDYWxsTGlua0luZm8qIGFkZENhbGxMaW5rSW5mbygpOwotICAgIEJh
ZzxDYWxsTGlua0luZm8+OjppdGVyYXRvciBjYWxsTGlua0luZm9zQmVnaW4oKSB7IHJldHVybiBt
X2NhbGxMaW5rSW5mb3MuYmVnaW4oKTsgfQotICAgIEJhZzxDYWxsTGlua0luZm8+OjppdGVyYXRv
ciBjYWxsTGlua0luZm9zRW5kKCkgeyByZXR1cm4gbV9jYWxsTGlua0luZm9zLmVuZCgpOyB9Ci0K
LSAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBj
b21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCi0gICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVl
biBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSBy
ZWFsbHkKLSAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0
aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0lu
Zm9Gb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIC8v
IFdlIGNhbGwgdGhpcyB3aGVuIHdlIHdhbnQgdG8gcmVhdHRlbXB0IGNvbXBpbGluZyBzb21ldGhp
bmcgd2l0aCB0aGUgYmFzZWxpbmUgSklULiBJZGVhbGx5Ci0gICAgLy8gdGhlIGJhc2VsaW5lIEpJ
VCB3b3VsZCBub3QgYWRkIGRhdGEgdG8gQ29kZUJsb2NrLCBidXQgaW5zdGVhZCBpdCB3b3VsZCBw
dXQgaXRzIGRhdGEgaW50bwotICAgIC8vIGEgbmV3bHkgY3JlYXRlZCBKSVRDb2RlLCB3aGljaCBj
b3VsZCBiZSB0aHJvd24gYXdheSBpZiB3ZSBiYWlsIG9uIEpJVCBjb21waWxhdGlvbi4gVGhlbiB3
ZQotICAgIC8vIHdvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIHNpbGx5IGZ1bmN0aW9u
LgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU5MDYxCi0gICAgdm9pZCByZXNldEpJVERhdGEoKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
Ci0gICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAg
IHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0lu
Zm8qKTsKLSAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNh
bGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTElu
dENhbGxMaW5rSW5mbyopOwotCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKHN0ZDo6dW5pcXVlX3B0
cjxDb21wYWN0SklUQ29kZU1hcD4gaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIG1faml0Q29k
ZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIENvbXBhY3RKSVRDb2RlTWFw
KiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSW5z
dHJ1Y3Rpb24qKTsKLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiBy
ZXR1cm5BZGRyZXNzKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuQWRkcmVz
cyA+PSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIHJldHVybkFkZHJlc3MgPCBpbnN0cnVjdGlv
bnMoKS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJl
dHVybkFkZHJlc3MpIC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICB0eXBl
ZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247Ci0gICAgdHlwZWRlZiBSZWZDb3VudGVk
QXJyYXk8SW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9uczsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6
ZSgpOyB9Ci0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkg
eyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KLSAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5z
dHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQotCi0gICAgc2l6ZV90IHByZWRpY3RlZE1hY2hpbmVDb2RlU2l6ZSgpOwotCi0gICAgYm9vbCB1
c2VzT3Bjb2RlKE9wY29kZUlEKTsKLQotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KLQotICAgIC8vIEV4YWN0bHkg
ZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVu
dENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKQotICAgIENvZGVC
bG9jayogbmV3UmVwbGFjZW1lbnQoKTsKLSAgICAKLSAgICB2b2lkIHNldEpJVENvZGUoUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBjb2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhlYXAoKS0+aXNEZWZl
cnJlZCgpKTsKLSAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChjb2Rl
LT5zaXplKCkpOwotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBu
ZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1
dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCi0gICAgICAgIG1faml0Q29kZSA9IGNvZGU7Ci0g
ICAgfQotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29k
ZTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgaml0Q29kZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0Q29kZSk7IH0KLSAgICBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IG1faml0
Q29kZS5nZXQoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIEpJVENv
ZGU6OkpJVFR5cGUgcmVzdWx0ID0gSklUQ29kZTo6aml0VHlwZUZvcihqaXRDb2RlKTsKLSAgICAg
ICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVlZGVkLiBP
aCB3ZWxsLCBwYXJhbm9pYSBpcyBnb29kLgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIGJvb2wgaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVDsKLSAgICB9Ci0gICAg
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0KLSAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7Ci0gICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKCk7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsU3RhdGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkNhcGFi
aWxpdHlMZXZlbD4obV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSk7IH0KLQotICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKLSAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKLSNlbmRpZgotCi0gICAgdm9pZCBqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25S
ZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSA9IERvbnRDb3VudFJlb3B0aW1pemF0aW9uLCBjb25z
dCBGaXJlRGV0YWlsKiA9IG51bGxwdHIpOwotICAgIAotICAgIEV4ZWN1dGFibGVCYXNlKiBvd25l
ckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQot
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyU2NyaXB0RXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4obV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpOyB9
Ci0KLSAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0KLSAgICB2b2lkIHNldFRo
aXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fdGhpc1JlZ2lzdGVy
ID0gdGhpc1JlZ2lzdGVyOyB9Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGhpc1JlZ2lzdGVyOyB9Ci0KLSAgICBib29sIHVzZXNFdmFsKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVzZXNFdmFsKCk7IH0KLQotICAgIHZvaWQgc2V0
U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlcikKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChzY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSB8fCAhc2NvcGVSZWdpc3Rlci5pc1Zh
bGlkKCkpOwotICAgICAgICBtX3Njb3BlUmVnaXN0ZXIgPSBzY29wZVJlZ2lzdGVyOwotICAgIH0K
LQotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7Ci0gICAgfQotICAgIAotICAgIENvZGVUeXBlIGNv
ZGVUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2RlVHlw
ZT4obV9jb2RlVHlwZSk7Ci0gICAgfQotCi0gICAgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IHB1
dEJ5SWRDb250ZXh0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjb2RlVHlwZSgpID09IEV2
YWxDb2RlKQotICAgICAgICAgICAgcmV0dXJuIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZEV2YWw7
Ci0gICAgICAgIHJldHVybiBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQ7Ci0gICAgfQotCi0gICAg
U291cmNlUHJvdmlkZXIqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9
Ci0gICAgdW5zaWduZWQgc291cmNlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VPZmZz
ZXQ7IH0KLSAgICB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldDsgfQotCi0gICAgc2l6ZV90IG51bWJlck9mSnVtcFRh
cmdldHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZKdW1wVGFyZ2V0
cygpOyB9Ci0gICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5qdW1wVGFyZ2V0KGluZGV4KTsgfQotCi0gICAgU3RyaW5nIG5hbWVG
b3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVy
cyA+PSAwKTsKLSAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSk7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7Ci0gICAgfQotICAgIFZhbHVlUHJvZmls
ZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkKLSAgICB7
Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gJm1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
W2FyZ3VtZW50SW5kZXhdOwotICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0
ID09IC0xKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpOyB9
Ci0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGluZGV4KSB7IHJldHVybiAmbV92
YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBTcGVjdWxhdGVkVHlwZSB2
YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB0b3RhbE51
bWJlck9mVmFsdWVQcm9maWxlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSArIG51bWJlck9mVmFsdWVQcm9maWxlcygpOwotICAgIH0KLSAg
ICBWYWx1ZVByb2ZpbGUqIGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKHVuc2lnbmVkIGluZGV4KQot
ICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpbmRleCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGUoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpKTsKLSAgICB9Ci0KLSAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFJhcmVDYXNlUHJv
ZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIHVuc2lnbmVkIG51bWJlck9mUmFyZUNhc2VQ
cm9maWxlcygpIHsgcmV0dXJuIG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCk7IH0KLSAgICBSYXJl
Q2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29k
ZU9mZnNldCk7Ci0gICAgdW5zaWduZWQgcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9m
ZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZShpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICBpZiAoIWhhc0Jhc2VsaW5lSklU
UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVk
IHZhbHVlID0gcmFyZUNhc2VQcm9maWxlQ291bnRGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93
Q2FzZU1pbmltdW1Db3VudCgpOwotICAgIH0KLQotICAgIGJvb2wgY291bGRUYWtlU2xvd0Nhc2Uo
aW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUNvdW50Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOwotICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VN
aW5pbXVtQ291bnQoKTsKLSAgICB9Ci0KLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7Ci0gICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlvbiopOwotCi0gICAgYm9vbCBjb3VsZFRha2VTcGVj
aWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9m
QXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlcy5zaXplKCk7IH0K
LSAgICBjb25zdCBBcnJheVByb2ZpbGVWZWN0b3ImIGFycmF5UHJvZmlsZXMoKSB7IHJldHVybiBt
X2FycmF5UHJvZmlsZXM7IH0KLSAgICBBcnJheVByb2ZpbGUqIGFkZEFycmF5UHJvZmlsZShjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFy
cmF5UHJvZmlsZSogYWRkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAg
ICBBcnJheVByb2ZpbGUqIGdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFycmF5UHJvZmlsZSogZ2V0QXJyYXlQ
cm9maWxlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBBcnJheVByb2ZpbGUqIGdldE9y
QWRkQXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7Ci0gICAgQXJyYXlQcm9maWxlKiBnZXRPckFkZEFycmF5UHJvZmlsZSh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7Ci0KLSAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3VwcG9y
dAotCi0gICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAw
OyB9Ci0gICAgSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IFJFTEVB
U0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVyc1tpbmRleF07IH0KLQotICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+aGFzRXhwcmVzc2lvbkluZm8oKTsgfQotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgY29k
ZU9yaWdpbnMoKTsKLSAgICAKLSAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxpZXMgdGhh
dCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgotICAgIGJvb2wgaGFzQ29kZU9yaWdpbnMo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBl
KCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKENhbGxTaXRl
SW5kZXggaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIWhhc0NvZGVPcmlnaW5zKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbmRleC5iaXRzKCkgPCBjb2Rl
T3JpZ2lucygpLnNpemUoKTsKLSAgICB9Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oQ2Fs
bFNpdGVJbmRleCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2RlT3JpZ2lucygpW2lu
ZGV4LmJpdHMoKV07Ci0gICAgfQotCi0gICAgYm9vbCBhZGRGcmVxdWVudEV4aXRTaXRlKGNvbnN0
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuYWRkKGxv
Y2tlciwgdGhpcywgc2l0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYg
c2l0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgREZH
OjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKGxv
Y2tlciwgc2l0ZSk7Ci0gICAgfQotCi0gICAgREZHOjpFeGl0UHJvZmlsZSYgZXhpdFByb2ZpbGUo
KSB7IHJldHVybiBtX2V4aXRQcm9maWxlOyB9Ci0KLSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVIb2xkZXImIGxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7Ci0gICAgfQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0gICAgLy8gQ29uc3RhbnQgUG9vbAotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mSWRlbnRpZmllcnMoKSArIG51bWJlck9mREZHSWRlbnRpZmll
cnMoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZkRGR0lkZW50aWZpZXJzKCkgY29uc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0OwotI2Vsc2UKLSAg
ICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZklkZW50aWZpZXJzKCk7IH0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmlkZW50aWZp
ZXIoaW5kZXgpOyB9Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+
JiBjb25zdGFudHMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9Ci0g
ICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2KQotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2
KTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50TGF6aWx5KCkKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAg
ICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChpbnQgaW5kZXgpIHsgcmV0dXJuIGluZGV4ID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OyB9Ci0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XS5nZXQoKTsgfQotICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baW5kZXgg
LSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF07IH0KLQotICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4
XS5nZXQoKTsgfQotICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1
bmN0aW9uRGVjbHMuc2l6ZSgpOyB9Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9Ci0g
ICAgCi0gICAgUmVnRXhwKiByZWdleHAoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+cmVnZXhwKGluZGV4KTsgfQotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFu
dEJ1ZmZlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVm
ZmVycy5zaXplKCk7Ci0gICAgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50QnVmZmVyKGNvbnN0
IFZlY3RvcjxKU1ZhbHVlPiYgYnVmZmVyKQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9yYXJlRGF0YS0+bV9jb25z
dGFudEJ1ZmZlcnMuc2l6ZSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVy
cy5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCi0gICAgVmVj
dG9yPEpTVmFsdWU+JiBjb25zdGFudEJ1ZmZlckFzVmVjdG9yKHVuc2lnbmVkIGluZGV4KQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0
YS0+bV9jb25zdGFudEJ1ZmZlcnNbaW5kZXhdOwotICAgIH0KLSAgICBKU1ZhbHVlKiBjb25zdGFu
dEJ1ZmZlcih1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb25zdGFudEJ1
ZmZlckFzVmVjdG9yKGluZGV4KS5kYXRhKCk7Ci0gICAgfQotCi0gICAgSGVhcCogaGVhcCgpIGNv
bnN0IHsgcmV0dXJuICZtX3ZtLT5oZWFwOyB9Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9Ci0KLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4pOwotCi0gICAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKLSAgICB7Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAo
ISFtX2xpdmVuZXNzQW5hbHlzaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuICptX2xpdmVuZXNz
QW5hbHlzaXM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpdmVuZXNzQW5hbHlzaXNTbG93
KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdmFsaWRhdGUoKTsKLQotICAgIC8vIEp1bXAgVGFi
bGVzCi0KLSAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCkgOiAw
OyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVu
ZChTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXMubGFzdCgpOyB9Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpIHsgUkVMRUFTRV9BU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KLSAgICB2b2lkIGNsZWFyU3dpdGNo
SnVtcFRhYmxlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5jbGVhcigp
OwotICAgIH0KLQotICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBTdHJpbmdKdW1wVGFibGUmIGFkZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJu
IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KLSAgICBTdHJp
bmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBSRUxF
QVNFX0FTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQotCi0gICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVD
YWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9ldmFsQ29kZUNhY2hlOyB9Ci0KLSAgICBlbnVtIFNocmlua01vZGUgewotICAgICAgICAvLyBT
aHJpbmsgcHJpb3IgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgdGhhdCBtYXkgcG9pbnQgZGly
ZWN0bHkgaW50byB2ZWN0b3JzLgotICAgICAgICBFYXJseVNocmluaywKLQotICAgICAgICAvLyBT
aHJpbmsgYWZ0ZXIgZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUsIGFuZCBhZnRlciBwb3NzaWJseSBj
cmVhdGluZyBuZXcgdmVjdG9ycwotICAgICAgICAvLyBhbmQgYXBwZW5kaW5nIHRvIG90aGVycy4g
QXQgdGhpcyB0aW1lIGl0IGlzIG5vdCBzYWZlIHRvIHNocmluayBjZXJ0YWluIHZlY3RvcnMKLSAg
ICAgICAgLy8gYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgdGhh
dCByZWZlcmVuY2VzIHRoZW0gZGlyZWN0bHkuCi0gICAgICAgIExhdGVTaHJpbmsKLSAgICB9Owot
ICAgIHZvaWQgc2hyaW5rVG9GaXQoU2hyaW5rTW9kZSk7Ci0KLSAgICAvLyBGdW5jdGlvbnMgZm9y
IGNvbnRyb2xsaW5nIHdoZW4gSklUdGluZyBraWNrcyBpbiwgaW4gYSBtaXhlZCBtb2RlCi0gICAg
Ly8gZXhlY3V0aW9uIHdvcmxkLgotCi0gICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgZG9udEpJVEFu
eXRpbWVTb29uKCkKLSAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlcklu
ZGVmaW5pdGVseSgpOwotICAgIH0KLQotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMy
X3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7Ci0gICAgdm9pZCBqaXRT
b29uKCk7Ci0KLSAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0
ZUNvdW50ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291
bnRlcjsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RydWN0dXJlKiwgQmFnPExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNo
cG9pbnRNYXA7Ci0gICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCYgbGxpbnRHZXRCeUlkV2F0Y2hw
b2ludE1hcCgpIHsgcmV0dXJuIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsgfQotCi0gICAg
Ly8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBraWNr
cyBpbi4gVGhpcwotICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0aGUgb3B0aW1pemluZyBjb21w
aWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgotICAgIC8vIGVudHJ5IGhhcHBlbnMuIFR3byB0
cmlnZ2VycyBleGlzdDogdGhlIGxvb3AgdHJpZ2dlciBhbmQgdGhlIHJldHVybgotICAgIC8vIHRy
aWdnZXIuIEluIGVpdGhlciBjYXNlLCB3aGVuIGFuIGFkZGl0aW9uIHRvIG1faml0RXhlY3V0ZUNv
dW50ZXIKLSAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1uZWdhdGl2ZSwgdGhlIG9wdGlt
aXppbmcgY29tcGlsZXIgaXMKLSAgICAvLyBpbnZva2VkLiBUaGlzIGluY2x1ZGVzIGEgZmFzdCBj
aGVjayB0byBzZWUgaWYgdGhpcyBDb2RlQmxvY2sgaGFzCi0gICAgLy8gYWxyZWFkeSBiZWVuIG9w
dGltaXplZCAoaS5lLiByZXBsYWNlbWVudCgpIHJldHVybnMgYSBDb2RlQmxvY2sKLSAgICAvLyB0
aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hlciB0aWVyIEpJVCB0aGFuIHRoaXMgb25lKS4g
SW4gdGhlCi0gICAgLy8gY2FzZSBvZiB0aGUgbG9vcCB0cmlnZ2VyLCBpZiB0aGUgb3B0aW1pemVk
IGNvbXBpbGF0aW9uIHN1Y2NlZWRzCi0gICAgLy8gKG9yIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCBp
biB0aGUgcGFzdCkgdGhlbiBPU1IgaXMgYXR0ZW1wdGVkIHRvCi0gICAgLy8gcmVkaXJlY3QgcHJv
Z3JhbSBmbG93IGludG8gdGhlIG9wdGltaXplZCBjb2RlLgotCi0gICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VycywKLSAg
ICAvLyBhbmQgYXJlIHVzZWQgYXMgYSBzaW5nbGUgcG9pbnQgYXQgd2hpY2ggd2UgZGVmaW5lIHRo
ZSBoZXVyaXN0aWNzCi0gICAgLy8gZm9yIGhvdyBtdWNoIHdhcm0tdXAgaXMgbWFuZGF0ZWQgYmVm
b3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbgotICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFsbCBDb2Rl
QmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKLSAgICAvLyBhcyB0
aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCi0KLSAgICAvLyBX
aGVuIHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMsIHdlIHRyaWdnZXIg
YQotICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0aGUg
b3B0aW1pemF0aW9uIHRyaWdnZXIKLSAgICAvLyB0byBhdm9pZCB0aHJhc2hpbmcuCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25z
dDsKLSAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKLSNpZiBFTkFCTEUoSklUKQotICAg
IHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkgeyByZXR1cm4gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsgfQotICAgIHN0YXRpYyBzaXplX3QgbGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwotICAgIHNpemVfdCBjYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9m
REZHQ29tcGlsZXMoKTsKLQotICAgIGludDMyX3QgY29kZVR5cGVUaHJlc2hvbGRNdWx0aXBsaWVy
KCkgY29uc3Q7Ci0KLSAgICBpbnQzMl90IGFkanVzdGVkQ291bnRlclZhbHVlKGludDMyX3QgZGVz
aXJlZFRocmVzaG9sZCk7Ci0KLSAgICBpbnQzMl90KiBhZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRl
cigpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVy
OwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciwgbV9jb3VudGVy
KTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJl
c2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVD
b3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIsIG1fYWN0
aXZlVGhyZXNob2xkKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRp
b25Ub3RhbENvdW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRF
eGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
LCBtX3RvdGFsQ291bnQpOyB9Ci0KLSAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlcjsg
fQotCi0gICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgY29uc3QgeyByZXR1
cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSBv
cHRpbWl6YXRpb24gdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQsIGFuZCBpZiBub3QsCi0gICAg
Ly8gYWRqdXN0IHRoZSBoZXVyaXN0aWNzIGFjY29yZGluZ2x5LiBSZXR1cm5zIHRydWUgaWYgdGhl
IHRocmVzaG9sZCBoYXMKLSAgICAvLyBiZWVuIHJlYWNoZWQuCi0gICAgYm9vbCBjaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpOwotCi0gICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNl
IHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMKLSAgICAvLyBy
YXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBpY2FsbHkgbW9y
ZQotICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGluZSBjb2RlLgotICAgIHZv
aWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwotCi0gICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZl
bnQgb3B0aW1pemF0aW9uIGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKLSAgICAvLyBv
cHRpbWl6YXRpb24gd2lsbCBzdGlsbCBoYXBwZW4gYWZ0ZXIgcm91Z2hseSAyXjI5IGludm9jYXRp
b25zLAotICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRvIGRlbGF5IHRoYXQgYXMgbXVj
aCBhcyBwb3NzaWJsZS4gVGhpcwotICAgIC8vIGlzIGNhbGxlZCBpZiBvcHRpbWl6YXRpb24gZmFp
bGVkLCBhbmQgd2UgZXhwZWN0IGl0IHRvIGZhaWwgaW4KLSAgICAvLyB0aGUgZnV0dXJlIGFzIHdl
bGwuCi0gICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotCi0gICAgLy8gQ2FsbCB0
aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMgc3RhcnRpbmcgc3RhdGUsCi0g
ICAgLy8gZm9yY2luZyBhIHdhcm0tdXAgdG8gaGFwcGVuIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6
YXRpb24gdHJpZ2dlcgotICAgIC8vIGZpcmVzLiBUaGlzIGlzIGNhbGxlZCBpbiB0aGUgQ29kZUJs
b2NrIGNvbnN0cnVjdG9yLiBJdCBhbHNvCi0gICAgLy8gbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlz
IGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBOb3RlIHRoYXQKLSAgICAvLyBPU1IgZXhpdCBjb2Rl
IGlzIGNvZGUgZ2VuZXJhdGVkLCBzbyB0aGUgdmFsdWUgb2YgdGhlIGV4ZWN1dGUKLSAgICAvLyBj
b3VudGVyIHRoYXQgdGhpcyBjb3JyZXNwb25kcyB0byBpcyBhbHNvIGF2YWlsYWJsZSBkaXJlY3Rs
eS4KLSAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLQotICAgIC8vIENhbGwgdGhpcyB0
byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9ubHkgYWZ0ZXIKLSAgICAv
LyBhIGxvdCBvZiB3YXJtLXVwLgotICAgIHZvaWQgb3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsK
LQotICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBm
aXJlIHNvb24sIGJ1dAotICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0aGUgbmV4dCBvbmUuIFRoaXMg
bWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCi0gICAgLy8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5
IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUKLSAgICAvLyByZWxpbmtlZCB0
byB0aGUgb3B0aW1pemVkIGNvZGUsIHNvIHRoaXMgb25seSBhZmZlY3RzIGNhbGwKLSAgICAvLyBm
cmFtZXMgdGhhdCBhcmUgc3RpbGwgZXhlY3V0aW5nIHRoaXMgQ29kZUJsb2NrLiBUaGUgdmFsdWUg
aGVyZQotICAgIC8vIGlzIHR1bmVkIHRvIHN0cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB0aGUgY29z
dCBvZiBPU1IgZW50cnkKLSAgICAvLyAod2hpY2ggaXMgdG9vIGhpZ2ggdG8gd2FycmFudCBtYWtp
bmcgZXZlcnkgbG9vcCBiYWNrIGVkZ2UgdG8KLSAgICAvLyB0cmlnZ2VyIE9TUiBpbW1lZGlhdGVs
eSkgYW5kIHRoZSBjb3N0IG9mIGV4ZWN1dGluZyBiYXNlbGluZQotICAgIC8vIGNvZGUgKHdoaWNo
IGlzIGhpZ2ggZW5vdWdoIHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0bwotICAgIC8v
IGhhdmUgYSBmdWxsIHdhcm0tdXApLiBUaGUgaW50dWl0aW9uIGZvciBjYWxsaW5nIHRoaXMgaW5z
dGVhZCBvZgotICAgIC8vIG9wdGltaXplTmV4dEludm9jYXRpb24oKSBpcyBmb3IgdGhlIGNhc2Ug
b2YgcmVjdXJzaXZlIGZ1bmN0aW9ucwotICAgIC8vIHdpdGggbG9vcHMuIENvbnNpZGVyIHRoYXQg
dGhlcmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQotICAgIC8vIHJlY3Vyc2l2ZSBmdW5j
dGlvbiwgZm9yIGEgcmVhc29uYWJseSBsYXJnZSB2YWx1ZSBvZiBOLiBUaGUgdG9wCi0gICAgLy8g
b25lIHRyaWdnZXJzIG9wdGltaXphdGlvbiwgYW5kIHRoZW4gcmV0dXJucywgYW5kIHRoZW4gYWxs
IG9mCi0gICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0IHdhbnQgb3B0aW1pemF0aW9u
IHRvIGJlIHRyaWdnZXJlZCBvbgotICAgIC8vIGVhY2ggcmV0dXJuLCBhcyB0aGF0IHdvdWxkIGJl
IHN1cGVyZmx1b3VzLiBJdCBvbmx5IG1ha2VzIHNlbnNlCi0gICAgLy8gdG8gdHJpZ2dlciBvcHRp
bWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNvbWVzIGhvdAotICAgIC8vIGlu
IHRoZSBiYXNlbGluZSBjb2RlLgotICAgIHZvaWQgb3B0aW1pemVTb29uKCk7Ci0KLSAgICB2b2lk
IGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKLQotICAgIHZvaWQgc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9u
UmVzdWx0KTsKLSAgICAKLSAgICB1aW50MzJfdCBvc3JFeGl0Q291bnRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KLQotICAgIHZvaWQgY291bnRPU1JFeGl0KCkgeyBtX29z
ckV4aXRDb3VudGVyKys7IH0KLQotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZPU1JFeGl0Q291bnRl
cigpIHsgcmV0dXJuICZtX29zckV4aXRDb3VudGVyOyB9Ci0KLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX29zckV4aXRDb3VudGVyKTsgfQotCi0gICAgdWludDMyX3QgYWRqdXN0ZWRFeGl0Q291
bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7Ci0gICAgdWludDMyX3QgZXhp
dENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb24oKTsKLSAgICB1aW50MzJfdCBleGl0Q291
bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCk7Ci0gICAgYm9vbCBzaG91bGRS
ZW9wdGltaXplTm93KCk7Ci0gICAgYm9vbCBzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKTsK
LQotICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldCk7Ci0gICAgdm9p
ZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0
TGlzdD4pOwotICAgIAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmdldCgpOyB9Ci0jZWxz
ZSAvLyBObyBKSVQKLSAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgc2l6ZV90IGxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSB7IHJldHVybiAwOyB9
OwotICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpIHsgfQotICAgIHVuc2lnbmVkIG51bWJl
ck9mREZHQ29tcGlsZXMoKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotICAgIGJvb2wgc2hvdWxk
T3B0aW1pemVOb3coKTsKLSAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25z
KCk7Ci0gICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKCk7Ci0gICAgdm9pZCB1cGRh
dGVBbGxQcmVkaWN0aW9ucygpOwotCi0gICAgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7
Ci0gICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCgpOwotCi0gICAgYm9vbCBoYXNPcERlYnVnRm9y
TGluZUFuZENvbHVtbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwotCi0gICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9Ci0gICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9Ci0KLSAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJl
YWtwb2ludHMpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3Bv
aW50cykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzID49IG51bUJyZWFr
cG9pbnRzKTsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyAtPSBudW1CcmVha3BvaW50czsKLSAg
ICB9Ci0KLSAgICBlbnVtIFN0ZXBwaW5nTW9kZSB7Ci0gICAgICAgIFN0ZXBwaW5nTW9kZURpc2Fi
bGVkLAotICAgICAgICBTdGVwcGluZ01vZGVFbmFibGVkCi0gICAgfTsKLSAgICB2b2lkIHNldFN0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUpOwotCi0gICAgdm9pZCBjbGVhckRlYnVnZ2VyUmVxdWVz
dHMoKQotICAgIHsKLSAgICAgICAgbV9zdGVwcGluZ01vZGUgPSBTdGVwcGluZ01vZGVEaXNhYmxl
ZDsKLSAgICAgICAgbV9udW1CcmVha3BvaW50cyA9IDA7Ci0gICAgfQotCi0gICAgYm9vbCB3YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQotICAgIAotICAgIC8vIEZJ
WE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCi0KLSAgICBpbnQgbV9u
dW1DYWxsZWVMb2NhbHM7Ci0gICAgaW50IG1fbnVtVmFyczsKLSAgICAKLSAgICAvLyBUaGlzIGlz
IGludGVudGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUg
ZG9pbmcgYW55Ci0gICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgotICAg
IC8vCi0gICAgLy8gLSBNb2RpZnlpbmcgYW55IGlubGluZSBjYWNoZSBpbiB0aGlzIGNvZGUgYmxv
Y2suCi0gICAgLy8KLSAgICAvLyAtIFF1ZXJpbmcgYW55IGlubGluZSBjYWNoZSBpbiB0aGlzIGNv
ZGUgYmxvY2ssIGZyb20gYSB0aHJlYWQgb3RoZXIgdGhhbgotICAgIC8vICAgdGhlIG1haW4gdGhy
ZWFkLgotICAgIC8vCi0gICAgLy8gQWRkaXRpb25hbGx5LCBpdCdzIG9ubHkgbGVnYWwgdG8gbW9k
aWZ5IHRoZSBpbmxpbmUgY2FjaGUgb24gdGhlIG1haW4KLSAgICAvLyB0aHJlYWQuIFRoaXMgbWVh
bnMgdGhhdCB0aGUgbWFpbiB0aHJlYWQgY2FuIHF1ZXJ5IHRoZSBpbmxpbmUgY2FjaGUgd2l0aG91
dAotICAgIC8vIGxvY2tpbmcuIFRoaXMgaXMgY3J1Y2lhbCBzaW5jZSBleGVjdXRpbmcgdGhlIGlu
bGluZSBjYWNoZSBpcyBlZmZlY3RpdmVseQotICAgIC8vICJxdWVyeWluZyIgaXQuCi0gICAgLy8K
LSAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0aGUgR0MgY2Fu
IGRvIHdoYXRldmVyIGl0IHdhbnRzCi0gICAgLy8gd2l0aG91dCBob2xkaW5nIGFueSBsb2Nrcywg
YmVjYXVzZSB0aGUgR0MgaXMgZ3VhcmFudGVlZCB0byB3YWl0IHVudGlsIGFueQotICAgIC8vIGNv
bmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkcyBmaW5pc2ggd2hhdCB0aGV5J3JlIGRvaW5nLgot
ICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwotCi0gICAgQXRvbWljPGJvb2w+
IG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkOwotCi0gICAgYm9vbCBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3Jl
IHRvIGl0LgotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZl
bFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKLSNlbmRpZgotCi0gICAgYm9vbCBt
X2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgOiAxOyAvLyBJbml0aWFsaXplZCBhbmQgdXNl
ZCBvbiBldmVyeSBHQy4KLQotICAgIGJvb2wgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24gOiAxOwot
ICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwotICAgIGJvb2wgbV9oYXNCZWVu
Q29tcGlsZWRXaXRoRlRMIDogMTsKLSAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7Ci0gICAg
Ym9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9jb2RlVHlwZSA6IDI7IC8v
IENvZGVUeXBlCi0KLSAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlv
biBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndAotICAgIC8vIGZvciB0aGUg
ZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1lc3BhY2VzLgotICAgIHZvaWQg
YmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwotICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwotCi0gICAgc3RydWN0IFJhcmVEYXRhIHsKLSAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBWZWN0b3I8
SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7Ci0KLSAgICAgICAgLy8gQnVmZmVycyB1
c2VkIGZvciBsYXJnZSBhcnJheSBsaXRlcmFscwotICAgICAgICBWZWN0b3I8VmVjdG9yPEpTVmFs
dWU+PiBtX2NvbnN0YW50QnVmZmVyczsKLQotICAgICAgICAvLyBKdW1wIFRhYmxlcwotICAgICAg
ICBWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLQotICAgICAg
ICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLSAgICB9OwotCi0gICAgdm9pZCBjbGVh
ckV4Y2VwdGlvbkhhbmRsZXJzKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3JhcmVEYXRhKQotICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5jbGVhcigpOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kRXhjZXB0aW9uSGFuZGxlcihjb25zdCBIYW5kbGVySW5mbyYgaGFu
ZGxlcikKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgLy8gV2Ug
bWF5IGJlIGhhbmRsaW5nIHRoZSBleGNlcHRpb24gb2YgYW4gaW5saW5lZCBjYWxsIGZyYW1lLgot
ICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLmFwcGVuZChoYW5kbGVyKTsK
LSAgICB9Ci0KLSAgICBDYWxsU2l0ZUluZGV4IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGVJ
bmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpOwotCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJik7Ci0gICAgT3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsK
LSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7Ci0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7Ci0KLSNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKLSNlbHNl
Ci0gICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrU2V0OwotCi0gICAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdygpOwotICAgIAotICAgIENvZGVCbG9jayog
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKTsKLSAgICAKLSAgICB2b2lkIG5vdGljZUluY29t
aW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsKLSAgICAKLSAgICBkb3VibGUgb3B0aW1p
emF0aW9uVGhyZXNob2xkU2NhbGluZ0ZhY3RvcigpOwotCi0gICAgdm9pZCB1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwotCi0g
ICAgdm9pZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
a25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
PiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKLQotICAgIHZvaWQgcmVwbGFj
ZUNvbnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMu
c2l6ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHZhbHVlKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGR1bXBCeXRlY29kZSgKLSAgICAgICAgUHJpbnRTdHJlYW0mLCBF
eGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4sIGNvbnN0IEluc3RydWN0aW9uKiYs
Ci0gICAgICAgIGNvbnN0IFN0dWJJbmZvTWFwJiA9IFN0dWJJbmZvTWFwKCksIGNvbnN0IENhbGxM
aW5rSW5mb01hcCYgPSBDYWxsTGlua0luZm9NYXAoKSk7Ci0KLSAgICBDU3RyaW5nIHJlZ2lzdGVy
TmFtZShpbnQgcikgY29uc3Q7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoaW50IGluZGV4KSBj
b25zdDsKLSAgICB2b2lkIHByaW50VW5hcnlPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGlu
dCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwotICAgIHZv
aWQgcHJpbnRCaW5hcnlPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwotICAgIHZvaWQgcHJpbnRDb25k
aXRpb25hbEp1bXAoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbios
IGNvbnN0IEluc3RydWN0aW9uKiYsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciogb3ApOwotICAg
IHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRp
b24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwotICAgIHZvaWQgcHJpbnRHZXRCeUlkQ2FjaGVTdGF0
dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IFN0dWJJbmZv
TWFwJik7Ci0gICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVtcENhY2hlcywgRG9udER1bXBDYWNo
ZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50
IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1w
TW9kZSwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZywgY29uc3QgQ2FsbExpbmtJbmZvTWFwJik7
Ci0gICAgdm9pZCBwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBs
b2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3ApOwotICAgIHZvaWQg
cHJpbnRQdXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBpbnQgbG9jYXRpb24sIGNvbnN0
IFN0dWJJbmZvTWFwJik7Ci0gICAgdm9pZCBwcmludExvY2F0aW9uQW5kT3AoUHJpbnRTdHJlYW0m
LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNo
YXIqIG9wKTsKLSAgICB2b2lkIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBp
dCwgY29uc3QgY2hhciogb3AsIGludCBvcGVyYW5kKTsKLQotICAgIHZvaWQgYmVnaW5EdW1wUHJv
ZmlsaW5nKFByaW50U3RyZWFtJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgdm9p
ZCBkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBi
b29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICB2b2lkIGR1bXBBcnJheVByb2ZpbGluZyhQ
cmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwotICAgIHZvaWQgZHVtcFJhcmVDYXNlUHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNo
YXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwot
ICAgIHZvaWQgZHVtcEFyaXRoUHJvZmlsZShQcmludFN0cmVhbSYsIEFyaXRoUHJvZmlsZSosIGJv
b2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwotCi0gICAgYm9vbCBzaG91bGRWaXNpdFN0cm9uZ2x5
KCk7Ci0gICAgYm9vbCBzaG91bGRKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSgpOwotICAgIGJv
b2wgc2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpOwotICAgIAotICAgIHZvaWQgcHJvcGFnYXRl
VHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGRldGVybWluZUxpdmVuZXNzKFNs
b3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgIHZvaWQgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhTbG90VmlzaXRv
ciYpOwotCi0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lU2luY2VDcmVhdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcz4oCi0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Ns
b2NrOjpub3coKSAtIG1fY3JlYXRpb25UaW1lKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQotICAg
ICAgICAgICAgbV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBpbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJv
ZmlsZXIoUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiYpOwotCi0gICAgV3JpdGVCYXJyaWVy
PFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29kZTsKLSAgICBpbnQgbV9udW1QYXJhbWV0
ZXJzOwotICAgIHVuaW9uIHsKLSAgICAgICAgdW5zaWduZWQgbV9kZWJ1Z2dlclJlcXVlc3RzOwot
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbV9oYXNEZWJ1Z2dlclN0YXRl
bWVudCA6IDE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3N0ZXBwaW5nTW9kZSA6IDE7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBtX251bUJyZWFrcG9pbnRzIDogMzA7Ci0gICAgICAgIH07Ci0gICAg
fTsKLSAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fb3duZXJFeGVjdXRhYmxlOwot
ICAgIFZNKiBtX3ZtOwotCi0gICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uPiBtX2luc3Ry
dWN0aW9uczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIG1fc2NvcGVSZWdpc3RlcjsKLSAgICBtdXRhYmxlIENvZGVCbG9ja0hhc2ggbV9o
YXNoOwotCi0gICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBtX3NvdXJjZTsKLSAgICB1bnNpZ25l
ZCBtX3NvdXJjZU9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldDsK
LQotICAgIFJlZkNvdW50ZWRBcnJheTxMTEludENhbGxMaW5rSW5mbz4gbV9sbGludENhbGxMaW5r
SW5mb3M7Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOwot
ICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwot
ICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsK
LSAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgIEJhZzxKSVRBZGRJ
Qz4gbV9hZGRJQ3M7Ci0gICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICBCYWc8SklUTmVn
SUM+IG1fbmVnSUNzOwotICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Ci0gICAgQmFnPEJ5VmFs
SW5mbz4gbV9ieVZhbEluZm9zOwotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZv
czsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7Ci0gICAgU2VudGluZWxMaW5rZWRM
aXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGlj
Q2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7Ci0jZW5kaWYKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9j
a3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawotICAgIC8vIGZvciBERkcg
Y29kZSBibG9ja3MuCi0gICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwotICAgIENv
bXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciBtX2xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlczsKLSNlbmRpZgotICAgIFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+IG1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzOwotICAgIFJlZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+IG1f
dmFsdWVQcm9maWxlczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8UmFyZUNhc2VQcm9maWxlLCA4PiBt
X3JhcmVDYXNlUHJvZmlsZXM7Ci0gICAgUmVmQ291bnRlZEFycmF5PEFycmF5QWxsb2NhdGlvblBy
b2ZpbGU+IG1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZXM7Ci0gICAgQXJyYXlQcm9maWxlVmVjdG9y
IG1fYXJyYXlQcm9maWxlczsKLSAgICBSZWZDb3VudGVkQXJyYXk8T2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU+IG1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGVzOwotCi0gICAgLy8gQ29uc3RhbnQgUG9v
bAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmll
cl9Vbmtub3duKTsKLSAgICAvLyBUT0RPOiBUaGlzIGNvdWxkIGp1c3QgYmUgYSBwb2ludGVyIHRv
IG1fdW5saW5rZWRDb2RlQmxvY2sncyBkYXRhLCBidXQgdGhlIERGRyBtdXRhdGVzCi0gICAgLy8g
aXQsIHNvIHdlJ3JlIHN0dWNrIHdpdGggaXQgZm9yIG5vdy4KLSAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3RvcjxTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAg
IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5j
dGlvbkRlY2xzOwotICAgIFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVj
dXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwotCi0gICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4g
bV9hbHRlcm5hdGl2ZTsKLSAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyOwotCi0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhl
Y3V0ZUNvdW50ZXI7Ci0gICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKLSAgICB1aW50MTZf
dCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKLSAgICB1aW50MTZfdCBtX3Jlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyOwotCi0gICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9w
b2ludCBtX2NyZWF0aW9uVGltZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3NBbmFseXNpczsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKLQotICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNv
bmRpdGlvbmFsRmluYWxpemVyOwotICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVm
ZXJlbmNlSGFydmVzdGVyOwotfTsKLQotLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkg
YW55IGZ1bmN0aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0Ci0vLyByZXNwb25zaWJs
ZSBmb3IgbWFya2luZyBpdC4KLQotY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVC
bG9jayB7Ci0gICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0K
LXByb3RlY3RlZDoKLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxvY2smIG90aGVyKQotICAgICAg
ICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQotICAg
IHsKLSAgICB9Ci0KLSAgICBHbG9iYWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBm
aXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUs
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgIH0KLX07
Ci0KLWNsYXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIEdsb2JhbENvZGVCbG9jayBCYXNlOwotICAgIERFQ0xBUkVfSU5G
TzsKLQotICAgIHN0YXRpYyBQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQotICAgIHsKLSAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9n
cmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZt
LCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCi0gICAgICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExp
bmVDb2x1bW5PZmZzZXQpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBv
d25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7Ci0gICAgICAgIHJldHVy
biBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBv
dGhlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNl
ZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgUHJvZ3JhbUNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAgICAg
ICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBHbG9iYWxDb2Rl
QmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotCi1jbGFzcyBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKLSAgICBERUNMQVJFX0lORk87Ci0K
LSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBh
cnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
KiBjcmVhdGUoVk0qIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAotICAg
ICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgICAgIE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUp
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1Rh
ZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0K
LQotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSog
c2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25l
ZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBz
dHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3Vy
Y2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotfTsKLQotY2xhc3MgRXZhbENvZGVCbG9j
ayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewotcHVibGljOgotICAgIHR5cGVkZWYgR2xvYmFs
Q29kZUJsb2NrIEJhc2U7Ci0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgc3RhdGljIEV2YWxDb2Rl
QmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYg
b3RoZXIpCi0gICAgewotICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKLSAgICAgICAgICAg
IEV2YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5
UGFyc2VkQmxvY2ssIG90aGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2
bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRXZhbEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jaywKLSAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFu
Y2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkp
Ci0gICAgICAgICAgICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVy
ZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJj
ZVByb3ZpZGVyKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOwotICAgICAgICByZXR1cm4gaW5z
dGFuY2U7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+dmFyaWFibGUoaW5kZXgpOyB9Ci0gICAg
dW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkt
Pm51bVZhcmlhYmxlcygpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEV2YWxDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJs
b2NrJiBvdGhlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrLCBvdGhlcikKLSAgICB7Ci0gICAgfQotICAgICAgICAKLSAgICBFdmFsQ29k
ZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV2YWxFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCi0g
ICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlcikKLSAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCAx
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LQotcHJpdmF0ZToKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENvZGVC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZEV2YWxDb2RlQmxvY2sqPih1bmxp
bmtlZENvZGVCbG9jaygpKTsgfQotfTsKLQotY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgOiBwdWJs
aWMgQ29kZUJsb2NrIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIENvZGVCbG9jayBCYXNlOwotICAg
IERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBGdW5jdGlvbkNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCi0gICAg
ewotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxGdW5jdGlvbkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVu
Y3Rpb25Db2RlQmxvY2sodm0sIHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
Q29weVBhcnNlZEJsb2NrLCBvdGhlcik7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gICAgfQotCi0gICAgc3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBG
dW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLAotICAgICAgICBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0
LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgewotICAgICAgICBGdW5jdGlv
bkNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlv
bkNvZGVCbG9jaz4odm0tPmhlYXApKQotICAgICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sodm0s
IHZtLT5mdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZp
cnN0TGluZUNvbHVtbk9mZnNldCk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigq
dm0sIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVC
bG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJz
ZWRCbG9jaywgb3RoZXIpCi0gICAgewotICAgIH0KLQotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUsCi0gICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxl
LCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQs
IGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci19OwotCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogY2xh
c3MgV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKIHB1YmxpYzoKQEAg
LTEyODUsOTEgKzc1LDQgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYKIAotaW5saW5lIFJlZ2lzdGVy
JiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
dGhpcy0+Y29kZUJsb2NrKCk7Ci0gICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KSk7Ci0gICAgcmV0dXJuIHRoaXNb
aW5kZXhdOwotfQotCi1pbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotewotICAgIHJldHVybiByKHJlZy5vZmZzZXQoKSk7Ci19Ci0KLWlubGluZSBSZWdp
c3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKGludCBpbmRleCkKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVChpbmRleCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICByZXR1cm4gdGhp
c1tpbmRleF07Ci19Ci0KLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgp
KTsKLX0KLQotaW5saW5lIHZvaWQgQ29kZUJsb2NrOjpjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNh
bGxlZCgpCi17Ci0gICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9y
JiYgZnVuY3RvcikKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgUHJvZ3JhbUV4
ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRp
Y19jYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3By
b2dyYW1Db2RlQmxvY2suZ2V0KCkpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVs
YXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogewotICAgICAgICBp
ZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKSkKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGdW5jdGlv
bkV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIEZ1bmN0b3IgZihzdGQ6OmZvcndhcmQ8RnVuY3Rv
cj4oZnVuY3RvcikpOwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVk
Q29kZUJsb2NrKGYpOwotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNf
Y2FzdDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQo
KSkpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
VHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxD
b2RlQmxvY2sqPihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFj
aFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFeGVjdXRhYmxl
VHlwZT4KLUpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKFZN
JiB2bSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIENvZGVCbG9jayomIHJlc3VsdENvZGVCbG9jaykKLXsKLSAgICBpZiAo
aGFzSklUQ29kZUZvcihraW5kKSkgewotICAgICAgICBpZiAoc3RkOjppc19zYW1lPEV4ZWN1dGFi
bGVUeXBlLCBFdmFsRXhlY3V0YWJsZT46OnZhbHVlKQotICAgICAgICAgICAgcmVzdWx0Q29kZUJs
b2NrID0ganNDYXN0PENvZGVCbG9jayo+KGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT5j
b2RlQmxvY2soKSk7Ci0gICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTxFeGVjdXRhYmxlVHlw
ZSwgUHJvZ3JhbUV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdENvZGVCbG9j
ayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+
Y29kZUJsb2NrKCkpOwotICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8RXhlY3V0YWJsZVR5
cGUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlPjo6dmFsdWUpCi0gICAgICAgICAgICByZXN1bHRD
b2RlQmxvY2sgPSBqc0Nhc3Q8Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyktPmNvZGVCbG9jaygpKTsKLSAgICAgICAgZWxzZSBpZiAoc3RkOjppc19zYW1l
PEV4ZWN1dGFibGVUeXBlLCBGdW5jdGlvbkV4ZWN1dGFibGU+Ojp2YWx1ZSkKLSAgICAgICAgICAg
IHJlc3VsdENvZGVCbG9jayA9IGpzQ2FzdDxDb2RlQmxvY2sqPihqc0Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4odGhpcyktPmNvZGVCbG9ja0ZvcihraW5kKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICByZXR1cm4gcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwodm0sIGZ1bmN0
aW9uLCBzY29wZSwga2luZCwgcmVzdWx0Q29kZUJsb2NrKTsKLX0KLQotI2RlZmluZSBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgc3VtbWFyeSwgZGV0YWlscykgXAotICAgIChjb2RlQmxv
Y2stPnZtKCktPmxvZ0V2ZW50KGNvZGVCbG9jaywgc3VtbWFyeSwgWyZdICgpIHsgcmV0dXJuIHRv
Q1N0cmluZyBkZXRhaWxzOyB9KSkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdDbG9iYmVy
c0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0
YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDExIEBACiAjaW5j
bHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIkVycm9ySW5zdGFuY2UuaCIKKyNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkpTQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTMsOCArNTUsMTAgQEAKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIu
aCIKKyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUHJvZ3JhbUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4MzAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsOSBAQAogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiRXZhbENvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxs
UmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJQ1N0YXRzLmgiCkBAIC01NCw4ICs1NiwxMCBAQAog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKyNp
bmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlByb2dy
YW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC02Niw2ICs3MCw3IEBACiAjaW5j
bHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAj
aW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIK
ICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMDgzMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
NCArMzYsMTUgQEAKICNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGdW5j
dGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2lu
Y2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIklDU3RhdHMuaCIKICNpbmNsdWRlICJJ
bmxpbmVBY2Nlc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA4MzAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsMTAgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNFeGNlcHRp
b25zLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUu
aCIKKyNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiRnVuY3Rpb25XaGl0ZWxpc3QuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCkBAIC01MywxMyArNTUsMTYgQEAK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNp
bmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCisjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
ICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNp
bmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlNsb3dQYXRoUmV0dXJuVHlw
ZS5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiU3ltYm9sLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNs
dWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmNwcAkocmV2aXNp
b24gMjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTQgQEAKICNpbmNsdWRlICJCYXRj
aGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1
bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgorI2luY2x1ZGUgIk1vZHVsZVByb2dy
YW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJQcm9ncmFtQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQmF0
Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlw
b2ludC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlRHVtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgotI2luY2x1ZGUgIkpTQ2VsbElubGluZXMu
aCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjA4MzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgorI2luY2x1ZGUgIk1vZHVsZVByb2dy
YW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDIwODMw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNp
bmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTQgQEAK
ICNpbmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgorI2luY2x1
ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNs
dWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiVk1JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaAko
cmV2aXNpb24gMjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOCArMTA1LDYgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBFeGVjdXRhYmxlVHlwZT4KICAgICBKU09iamVjdCogcHJl
cGFyZUZvckV4ZWN1dGlvbihWTSYsIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJsb2NrKTsKIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYmKTsKLQog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgSlNPYmplY3Qq
IHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKFZNJiwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLCBDb2RlQmxvY2sqJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJKHJldmlzaW9uIDIwODMw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyVXRp
bHMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAyMDgzMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDEwIEBACiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJFcnJv
ckluc3RhbmNlLmgiCisjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdDQWN0
aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpAQCAtNzMsMTAgKzc1
LDEyIEBACiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNs
dWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNs
dWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
UHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAj
aW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKQEAgLTk3
LDYgKzEwMSw3IEBACiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcERhdGEuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0
Zi9Qcm9jZXNzSUQuaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3RhdHMuaD4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYkFzc2VtYmx5RXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2ViQXNzZW1ibHlFeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMjA4MzAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2ViQXNzZW1ibHlFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2lu
Y2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAj
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwODMwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkpTRG9sbGFyVk1Qcm90b3R5cGUuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
</data>
<flag name="review"
          id="316547"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>